Skip to content

Commit

Permalink
[Neo Json Fix] Json null tests (#3450)
Browse files Browse the repository at this point in the history
* null operation

* fix array

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
  • Loading branch information
3 people authored Aug 8, 2024
1 parent 1488958 commit 28043cb
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/Neo.Json/JArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public void Add(JToken? item)

public override string AsString()
{
return string.Join(",", items.Select(p => p?.AsString()));
return ToString();
}

public override void Clear()
Expand Down
94 changes: 93 additions & 1 deletion tests/Neo.Json.UnitTests/UT_JArray.cs
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ public void TestAsString()
bob,
};
var s = jArray.AsString();
Assert.AreEqual(s, "{\"name\":\"alice\",\"age\":30,\"score\":100.001,\"gender\":\"female\",\"isMarried\":true,\"pet\":{\"name\":\"Tom\",\"type\":\"cat\"}},{\"name\":\"bob\",\"age\":100000,\"score\":0.001,\"gender\":\"male\",\"isMarried\":false,\"pet\":{\"name\":\"Paul\",\"type\":\"dog\"}}");
Assert.AreEqual(s, "[{\"name\":\"alice\",\"age\":30,\"score\":100.001,\"gender\":\"female\",\"isMarried\":true,\"pet\":{\"name\":\"Tom\",\"type\":\"cat\"}},{\"name\":\"bob\",\"age\":100000,\"score\":0.001,\"gender\":\"male\",\"isMarried\":false,\"pet\":{\"name\":\"Paul\",\"type\":\"dog\"}}]");
}

[TestMethod]
Expand Down Expand Up @@ -325,5 +325,97 @@ public void TestReadOnlyBehavior()
var jArray = new JArray();
jArray.IsReadOnly.Should().BeFalse();
}

[TestMethod]
public void TestAddNull()
{
var jArray = new JArray { null };

jArray.Count.Should().Be(1);
jArray[0].Should().BeNull();
}

[TestMethod]
public void TestSetNull()
{
var jArray = new JArray { alice };
jArray[0] = null;

jArray.Count.Should().Be(1);
jArray[0].Should().BeNull();
}

[TestMethod]
public void TestInsertNull()
{
var jArray = new JArray { alice };
jArray.Insert(0, null);

jArray.Count.Should().Be(2);
jArray[0].Should().BeNull();
jArray[1].Should().Be(alice);
}

[TestMethod]
public void TestRemoveNull()
{
var jArray = new JArray { null, alice };
jArray.Remove(null);

jArray.Count.Should().Be(1);
jArray[0].Should().Be(alice);
}

[TestMethod]
public void TestContainsNull()
{
var jArray = new JArray { null, alice };
jArray.Contains(null).Should().BeTrue();
jArray.Contains(bob).Should().BeFalse();
}

[TestMethod]
public void TestIndexOfNull()
{
var jArray = new JArray { null, alice };
jArray.IndexOf(null).Should().Be(0);
jArray.IndexOf(alice).Should().Be(1);
}

[TestMethod]
public void TestCopyToWithNull()
{
var jArray = new JArray { null, alice };
JObject[] jObjects = new JObject[2];
jArray.CopyTo(jObjects, 0);

jObjects[0].Should().BeNull();
jObjects[1].Should().Be(alice);
}

[TestMethod]
public void TestToStringWithNull()
{
var jArray = new JArray { null, alice, bob };
var jsonString = jArray.ToString();
var asString = jArray.AsString();
// JSON string should properly represent the null value
jsonString.Should().Be("[null,{\"name\":\"alice\",\"age\":30,\"score\":100.001,\"gender\":\"female\",\"isMarried\":true,\"pet\":{\"name\":\"Tom\",\"type\":\"cat\"}},{\"name\":\"bob\",\"age\":100000,\"score\":0.001,\"gender\":\"male\",\"isMarried\":false,\"pet\":{\"name\":\"Paul\",\"type\":\"dog\"}}]");
asString.Should().Be("[null,{\"name\":\"alice\",\"age\":30,\"score\":100.001,\"gender\":\"female\",\"isMarried\":true,\"pet\":{\"name\":\"Tom\",\"type\":\"cat\"}},{\"name\":\"bob\",\"age\":100000,\"score\":0.001,\"gender\":\"male\",\"isMarried\":false,\"pet\":{\"name\":\"Paul\",\"type\":\"dog\"}}]");
}

[TestMethod]
public void TestFromStringWithNull()
{
var jsonString = "[null,{\"name\":\"alice\",\"age\":30,\"score\":100.001,\"gender\":\"female\",\"isMarried\":true,\"pet\":{\"name\":\"Tom\",\"type\":\"cat\"}},{\"name\":\"bob\",\"age\":100000,\"score\":0.001,\"gender\":\"male\",\"isMarried\":false,\"pet\":{\"name\":\"Paul\",\"type\":\"dog\"}}]";
var jArray = (JArray)JArray.Parse(jsonString);

jArray.Count.Should().Be(3);
jArray[0].Should().BeNull();

// Checking the second and third elements
jArray[1]["name"].AsString().Should().Be("alice");
jArray[2]["name"].AsString().Should().Be("bob");
}
}
}

0 comments on commit 28043cb

Please sign in to comment.