Skip to content

JSonObjectAdapter test operation for empty string works inconsistent with standard definition #31

@MateuszGert

Description

@MateuszGert

Hello, I've found some edge case:

[TestCase]
public void EmptyStringTest()
{
    var patchDocument = new JsonPatchDocument<JsonNode>();
    patchDocument.Operations.Add(new Operation<JsonNode>(op: "test", path: "/string", from: null, value: ""));
    var node = JsonNode.Parse("{\"string\": \"\"}")!;
    Assert.DoesNotThrow(() => patchDocument.ApplyTo(node));
}

[TestCase]
public void NullFieldTest()
{
    var patchDocument = new JsonPatchDocument<JsonNode>();
    patchDocument.Operations.Add(new Operation<JsonNode>(op: "test", path: "/string", from: null, value: null));
    var node = JsonNode.Parse("{\"string\": null}")!;
    Assert.DoesNotThrow(() => patchDocument.ApplyTo(node));
}

From https://datatracker.ietf.org/doc/html/rfc6902#section-4.6

The "test" operation tests that a value at the target location is
equal to a specified value.
The operation object MUST contain a "value" member that conveys the
value to be compared to the target location's value.
The target location MUST be equal to the "value" value for the
operation to be considered successful.
Here, "equal" means that the value at the target location and the
value conveyed by "value" are of the same JSON type, and that they
are considered equal by the following rules for that type:
o strings: are considered equal if they contain the same number of
Unicode characters and their code points are byte-by-byte equal.
(...)
o literals (false, true, and null): are considered equal if they are
the same.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions