Migrate to Sdk projects. Migrate tests from NUnit to xUnit.

This commit is contained in:
2021-06-13 05:17:01 +02:00
parent a4153ded57
commit ff32ad9d1f
8 changed files with 146 additions and 342 deletions

View File

@@ -1,9 +1,8 @@
using System.Collections.Generic;
using NUnit.Framework;
using Xunit;
namespace VAR.Json.Tests
{
[TestFixture()]
public class JsonParser_Tests
{
#region Parse
@@ -14,15 +13,15 @@ namespace VAR.Json.Tests
public int Number { get; set; }
}
[Test()]
[Fact]
public void Parse__SwallowObject()
{
JsonParser parser = new JsonParser();
parser.KnownTypes.Add(typeof(SwallowObject));
SwallowObject result = parser.Parse(@"{""Text"": ""AAAA"", ""Number"": 42}") as SwallowObject;
Assert.AreEqual(false, parser.Tainted);
Assert.AreEqual("AAAA", result.Text);
Assert.AreEqual(42, result.Number);
Assert.False(parser.Tainted);
Assert.Equal("AAAA", result.Text);
Assert.Equal(42, result.Number);
}
public class DeeperObject_L1
@@ -31,17 +30,17 @@ namespace VAR.Json.Tests
public SwallowObject Object { get; set; }
}
[Test()]
[Fact]
public void Parse__DeeperObject_L1()
{
JsonParser parser = new JsonParser();
parser.KnownTypes.Add(typeof(SwallowObject));
parser.KnownTypes.Add(typeof(DeeperObject_L1));
DeeperObject_L1 result = parser.Parse(@"{""Name"": ""Thing"", ""Object"": {""Text"": ""AAAA"", ""Number"": 42}}") as DeeperObject_L1;
Assert.AreEqual(false, parser.Tainted);
Assert.AreEqual("Thing", result.Name);
Assert.AreEqual("AAAA", result.Object.Text);
Assert.AreEqual(42, result.Object.Number);
Assert.False(parser.Tainted);
Assert.Equal("Thing", result.Name);
Assert.Equal("AAAA", result.Object.Text);
Assert.Equal(42, result.Object.Number);
}
public class DeeperObject_L2
@@ -50,7 +49,7 @@ namespace VAR.Json.Tests
public DeeperObject_L1 Object { get; set; }
}
[Test()]
[Fact]
public void Parse__DeeperObject_L2()
{
JsonParser parser = new JsonParser();
@@ -58,23 +57,23 @@ namespace VAR.Json.Tests
parser.KnownTypes.Add(typeof(DeeperObject_L1));
parser.KnownTypes.Add(typeof(DeeperObject_L2));
DeeperObject_L2 result = parser.Parse(@"{""Count"": 1, ""Object"": {""Name"": ""Thing"", ""Object"": {""Text"": ""AAAA"", ""Number"": 42}}}") as DeeperObject_L2;
Assert.AreEqual(false, parser.Tainted);
Assert.AreEqual(1, result.Count);
Assert.AreEqual("Thing", result.Object.Name);
Assert.AreEqual("AAAA", result.Object.Object.Text);
Assert.AreEqual(42, result.Object.Object.Number);
Assert.False(parser.Tainted);
Assert.Equal(1, result.Count);
Assert.Equal("Thing", result.Object.Name);
Assert.Equal("AAAA", result.Object.Object.Text);
Assert.Equal(42, result.Object.Object.Number);
}
[Test()]
[Fact]
public void Parse__SwallowObjectArray()
{
JsonParser parser = new JsonParser();
parser.KnownTypes.Add(typeof(SwallowObject));
List<SwallowObject> result = parser.Parse(@"[{""Text"": ""AAAA"", ""Number"": 42}]") as List<SwallowObject>;
Assert.AreEqual(false, parser.Tainted);
Assert.AreEqual(1, result.Count);
Assert.AreEqual("AAAA", result[0].Text);
Assert.AreEqual(42, result[0].Number);
Assert.False(parser.Tainted);
Assert.Single(result);
Assert.Equal("AAAA", result[0].Text);
Assert.Equal(42, result[0].Number);
}
public class DeeperObjectArray_L1
@@ -83,17 +82,17 @@ namespace VAR.Json.Tests
public List<SwallowObject> Array { get; set; }
}
[Test()]
[Fact]
public void Parse__DeeperObjectArray_L1()
{
JsonParser parser = new JsonParser();
parser.KnownTypes.Add(typeof(SwallowObject));
parser.KnownTypes.Add(typeof(DeeperObjectArray_L1));
DeeperObjectArray_L1 result = parser.Parse(@"{""Count"": 1, ""Array"": [{""Text"": ""AAAA"", ""Number"": 42}]}") as DeeperObjectArray_L1;
Assert.AreEqual(false, parser.Tainted);
Assert.AreEqual(1, result.Count);
Assert.AreEqual("AAAA", result.Array[0].Text);
Assert.AreEqual(42, result.Array[0].Number);
Assert.False(parser.Tainted);
Assert.Equal(1, result.Count);
Assert.Equal("AAAA", result.Array[0].Text);
Assert.Equal(42, result.Array[0].Number);
}
public class DeeperObjectArray_L2
@@ -102,7 +101,7 @@ namespace VAR.Json.Tests
public List<DeeperObjectArray_L1> Objects { get; set; }
}
[Test()]
[Fact]
public void Parse__DeeperObjectArray_L2()
{
JsonParser parser = new JsonParser();
@@ -110,284 +109,284 @@ namespace VAR.Json.Tests
parser.KnownTypes.Add(typeof(DeeperObjectArray_L1));
parser.KnownTypes.Add(typeof(DeeperObjectArray_L2));
DeeperObjectArray_L2 result = parser.Parse(@"{""Name"": ""Thing"", ""Objects"": [{""Count"": 1, ""Array"": [{""Text"": ""AAAA"", ""Number"": 42}]}]}") as DeeperObjectArray_L2;
Assert.AreEqual(false, parser.Tainted);
Assert.AreEqual("Thing", result.Name);
Assert.AreEqual(1, result.Objects[0].Count);
Assert.AreEqual("AAAA", result.Objects[0].Array[0].Text);
Assert.AreEqual(42, result.Objects[0].Array[0].Number);
Assert.False(parser.Tainted);
Assert.Equal("Thing", result.Name);
Assert.Equal(1, result.Objects[0].Count);
Assert.Equal("AAAA", result.Objects[0].Array[0].Text);
Assert.Equal(42, result.Objects[0].Array[0].Number);
}
#endregion Parse
#region Validity tests
[Test()]
[Fact]
public void Parse__Validity_Fail01()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"""A JSON payload should be an object or array, not a string.""");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail02()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Unclosed array""");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail03()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{unquoted_key: ""keys must be quoted""}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail04()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""extra comma"",]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail05()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""double extra comma"",,]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail06()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[ , ""<-- missing value""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail07()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Comma after the close""],");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail08()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Extra close""]]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail09()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Extra comma"": true,}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail10()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Extra value after close"": true} ""misplaced quoted value""");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail11()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Illegal expression"": 1 + 2}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail12()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Illegal invocation"": alert()}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail13()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Numbers cannot have leading zeroes"": 013}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail14()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Numbers cannot be hex"": 0x14}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail15()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Illegal backslash escape: \x15""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail16()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[\naked]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail17()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Illegal backslash escape: \017""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail18()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[[[[[[[[[[[[[[[[[[[[""Too deep""]]]]]]]]]]]]]]]]]]]]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail19()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Missing colon"" null}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail20()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Double colon"":: null}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail21()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Comma instead of colon"", null}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail22()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Colon instead of comma"": false]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail23()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""Bad value"", truth]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail24()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"['single quote']");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail25()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"["" tab character in string ""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail26()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""tab\ character\ in\ string\ ""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail27()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""line
break""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail28()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""line\
break""]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail29()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[0e]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail30()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[0e+]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail31()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[0e+-1]");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail32()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"{""Comma instead if closing brace"": true,");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Fail33()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[""mismatch""}");
Assert.AreEqual(true, parser.Tainted);
Assert.True(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Pass01()
{
JsonParser parser = new JsonParser();
@@ -449,18 +448,18 @@ break""]");
1e-1,
1e00,2e+00,2e-00
,""rosebud""]");
Assert.AreEqual(false, parser.Tainted);
Assert.False(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Pass02()
{
JsonParser parser = new JsonParser();
object result = parser.Parse(@"[[[[[[[[[[[[[[[[[[[""Not too deep""]]]]]]]]]]]]]]]]]]]");
Assert.AreEqual(false, parser.Tainted);
Assert.False(parser.Tainted);
}
[Test()]
[Fact]
public void Parse__Validity_Pass03()
{
JsonParser parser = new JsonParser();
@@ -471,7 +470,7 @@ break""]");
}
}
");
Assert.AreEqual(false, parser.Tainted);
Assert.False(parser.Tainted);
}
#endregion Validity tests