diff --git a/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs b/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs index 157b07bdf0..0957ad37d6 100644 --- a/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs +++ b/tests/Neo.ConsoleService.Tests/UT_CommandServiceBase.cs @@ -63,7 +63,7 @@ public void TestParseIndicatorArguments() // Test case 1: Basic indicator arguments var args1 = "test --strParam hello --intParam 42 --boolParam".Tokenize(); - Assert.AreEqual(11, args1.Count); + Assert.HasCount(11, args1); Assert.AreEqual("test", args1[0].Value); Assert.AreEqual("--strParam", args1[2].Value); Assert.AreEqual("hello", args1[4].Value); @@ -72,10 +72,10 @@ public void TestParseIndicatorArguments() Assert.AreEqual("--boolParam", args1[10].Value); var result1 = service.ParseIndicatorArguments(method, args1[1..]); - Assert.AreEqual(4, result1.Length); + Assert.HasCount(4, result1); Assert.AreEqual("hello", result1[0]); Assert.AreEqual(42u, result1[1]); - Assert.AreEqual(true, result1[2]); + Assert.IsTrue((bool?)result1[2]); Assert.AreEqual("default", result1[3]); // Default value // Test case 2: Boolean parameter without value @@ -86,7 +86,7 @@ public void TestParseIndicatorArguments() var enumMethod = typeof(TestConsoleService).GetMethod("TestEnumMethod"); var args3 = "testenum --enumParam Value2".Tokenize(); var result3 = service.ParseIndicatorArguments(enumMethod, args3[1..]); - Assert.AreEqual(1, result3.Length); + Assert.HasCount(1, result3); Assert.AreEqual(TestConsoleService.TestEnum.Value2, result3[0]); // Test case 4: Unknown parameter should throw exception @@ -107,26 +107,26 @@ public void TestParseSequentialArguments() // Test case 1: All parameters provided var args1 = "test hello 42 true custom".Tokenize(); var result1 = service.ParseSequentialArguments(method, args1[1..]); - Assert.AreEqual(4, result1.Length); + Assert.HasCount(4, result1); Assert.AreEqual("hello", result1[0]); Assert.AreEqual(42u, result1[1]); - Assert.AreEqual(true, result1[2]); + Assert.IsTrue((bool?)result1[2]); Assert.AreEqual("custom", result1[3]); // Test case 2: Some parameters with default values var args2 = "test hello 42 true".Tokenize(); var result2 = service.ParseSequentialArguments(method, args2[1..]); - Assert.AreEqual(4, result2.Length); + Assert.HasCount(4, result2); Assert.AreEqual("hello", result2[0]); Assert.AreEqual(42u, result2[1]); - Assert.AreEqual(true, result2[2]); + Assert.IsTrue((bool?)result2[2]); Assert.AreEqual("default", result2[3]); // optionalParam default value // Test case 3: Enum parameter var enumMethod = typeof(TestConsoleService).GetMethod("TestEnumMethod"); var args3 = "testenum Value1".Tokenize(); var result3 = service.ParseSequentialArguments(enumMethod, args3[1..].Trim()); - Assert.AreEqual(1, result3.Length); + Assert.HasCount(1, result3); Assert.AreEqual(TestConsoleService.TestEnum.Value1, result3[0]); // Test case 4: Missing required parameter should throw exception diff --git a/tests/Neo.ConsoleService.Tests/UT_CommandTokenizer.cs b/tests/Neo.ConsoleService.Tests/UT_CommandTokenizer.cs index d13f7c5db6..548129a5f0 100644 --- a/tests/Neo.ConsoleService.Tests/UT_CommandTokenizer.cs +++ b/tests/Neo.ConsoleService.Tests/UT_CommandTokenizer.cs @@ -22,7 +22,7 @@ public void Test1() { var cmd = " "; var args = cmd.Tokenize(); - Assert.AreEqual(1, args.Count); + Assert.HasCount(1, args); Assert.AreEqual(" ", args[0].Value); } @@ -31,7 +31,7 @@ public void Test2() { var cmd = "show state"; var args = cmd.Tokenize(); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("state", args[2].Value); @@ -43,7 +43,7 @@ public void Test3() { var cmd = "show \"hello world\""; var args = cmd.Tokenize(); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("hello world", args[2].Value); @@ -54,7 +54,7 @@ public void Test4() { var cmd = "show \"'\""; var args = cmd.Tokenize(); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("'", args[2].Value); @@ -65,7 +65,7 @@ public void Test5() { var cmd = "show \"123\\\"456\""; // Double quote because it is quoted twice in code and command. var args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("123\"456", args[2].Value); @@ -77,7 +77,7 @@ public void TestMore() { var cmd = "show 'x1,x2,x3'"; var args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("x1,x2,x3", args[2].Value); @@ -85,7 +85,7 @@ public void TestMore() cmd = "show '\\n \\r \\t \\''"; // Double quote because it is quoted twice in code and command. args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("\n \r \t \'", args[2].Value); @@ -97,7 +97,7 @@ public void TestMore() var json = "[{\"type\":\"Hash160\",\"value\":\"0x0010922195a6c7cab3233f923716ad8e2dd63f8a\"}]"; cmd = "invoke 0xef4073a0f2b305a38ec4050e4d3d28bc40ea63f5 balanceOf " + json; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(7, args.Count); + Assert.HasCount(7, args); Assert.AreEqual("invoke", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("0xef4073a0f2b305a38ec4050e4d3d28bc40ea63f5", args[2].Value); @@ -108,7 +108,7 @@ public void TestMore() cmd = "show x'y'"; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("x'y'", args[2].Value); @@ -120,7 +120,7 @@ public void TestBackQuote() { var cmd = "show `x`"; var args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("x", args[2].Value); @@ -128,7 +128,7 @@ public void TestBackQuote() cmd = "show `{\"a\": \"b\"}`"; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("{\"a\": \"b\"}", args[2].Value); @@ -136,7 +136,7 @@ public void TestBackQuote() cmd = "show `123\"456`"; // Donot quoted twice if the input uses backquote. args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("123\"456", args[2].Value); @@ -149,7 +149,7 @@ public void TestUnicodeEscape() // Test basic Unicode escape sequence var cmd = "show \"\\u0041\""; // Should decode to 'A' var args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("A", args[2].Value); @@ -157,7 +157,7 @@ public void TestUnicodeEscape() // Test Unicode escape sequence for emoji cmd = "show \"\\uD83D\\uDE00\""; // Should decode to 😀 args = CommandTokenizer.Tokenize(cmd); // surrogate pairs - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("😀", args[2].Value); @@ -165,14 +165,14 @@ public void TestUnicodeEscape() // Test Unicode escape sequence in single quotes cmd = "show '\\u0048\\u0065\\u006C\\u006C\\u006F'"; // Should decode to "Hello" args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("Hello", args[2].Value); cmd = "show '\\x48\\x65\\x6C\\x6C\\x6F'"; // Should decode to "Hello" args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("Hello", args[2].Value); @@ -197,7 +197,7 @@ public void TestUnicodeEdgeCases() // Test surrogate pairs - high surrogate var cmd = "show \"\\uD83D\""; var args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("\uD83D", args[2].Value); // High surrogate @@ -205,7 +205,7 @@ public void TestUnicodeEdgeCases() // Test surrogate pairs - low surrogate cmd = "show \"\\uDE00\""; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("\uDE00", args[2].Value); // Low surrogate @@ -213,7 +213,7 @@ public void TestUnicodeEdgeCases() // Test null character cmd = "show \"\\u0000\""; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("\u0000", args[2].Value); // Null character @@ -221,7 +221,7 @@ public void TestUnicodeEdgeCases() // Test maximum Unicode value cmd = "show \"\\uFFFF\""; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("\uFFFF", args[2].Value); // Maximum Unicode value @@ -229,7 +229,7 @@ public void TestUnicodeEdgeCases() // Test multiple Unicode escapes in sequence cmd = "show \"\\u0048\\u0065\\u006C\\u006C\\u006F\\u0020\\u0057\\u006F\\u0072\\u006C\\u0064\""; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("Hello World", args[2].Value); @@ -237,7 +237,7 @@ public void TestUnicodeEdgeCases() // Test Unicode escape mixed with regular characters cmd = "show \"Hello\\u0020World\""; args = CommandTokenizer.Tokenize(cmd); - Assert.AreEqual(3, args.Count); + Assert.HasCount(3, args); Assert.AreEqual("show", args[0].Value); Assert.AreEqual(" ", args[1].Value); Assert.AreEqual("Hello World", args[2].Value); diff --git a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs index cd76dd2083..56d141f780 100644 --- a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs +++ b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Node.cs @@ -222,7 +222,7 @@ public void TestEmptyLeaf() { var leaf = Node.NewLeaf(Array.Empty()); var data = leaf.ToArray(); - Assert.AreEqual(3, data.Length); + Assert.HasCount(3, data); var l = data.AsSerializable(); Assert.AreEqual(NodeType.LeafNode, l.Type); Assert.AreEqual(0, l.Value.Length); diff --git a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs index a5fe1290bb..e4138f4f6d 100644 --- a/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs +++ b/tests/Neo.Cryptography.MPTTrie.Tests/Cryptography/MPTTrie/UT_Trie.cs @@ -279,20 +279,20 @@ public void TestGetProof() Assert.AreEqual(r.Hash.ToString(), mpt.Root.Hash.ToString()); var result = mpt.TryGetProof("ac01".HexToBytes(), out var proof); Assert.IsTrue(result); - Assert.AreEqual(4, proof.Count); - Assert.IsTrue(proof.Contains(b.ToArrayWithoutReference())); - Assert.IsTrue(proof.Contains(r.ToArrayWithoutReference())); - Assert.IsTrue(proof.Contains(e1.ToArrayWithoutReference())); - Assert.IsTrue(proof.Contains(v1.ToArrayWithoutReference())); + Assert.HasCount(4, proof); + Assert.Contains(b.ToArrayWithoutReference(), proof); + Assert.Contains(r.ToArrayWithoutReference(), proof); + Assert.Contains(e1.ToArrayWithoutReference(), proof); + Assert.Contains(v1.ToArrayWithoutReference(), proof); result = mpt.TryGetProof("ac".HexToBytes(), out proof); - Assert.AreEqual(3, proof.Count); + Assert.HasCount(3, proof); result = mpt.TryGetProof("ac10".HexToBytes(), out proof); Assert.IsFalse(result); result = mpt.TryGetProof("acae".HexToBytes(), out proof); - Assert.AreEqual(4, proof.Count); + Assert.HasCount(4, proof); Assert.ThrowsExactly(() => _ = mpt.TryGetProof([], out proof)); @@ -334,13 +334,13 @@ public void TestSplitKey() mpt1.Put([0xab], [0x02]); var r = mpt1.TryGetProof([0xab, 0xcd], out var set1); Assert.IsTrue(r); - Assert.AreEqual(4, set1.Count); + Assert.HasCount(4, set1); var mpt2 = new Trie(snapshot, null); mpt2.Put([0xab], [0x02]); mpt2.Put([0xab, 0xcd], [0x01]); r = mpt2.TryGetProof([0xab, 0xcd], out var set2); Assert.IsTrue(r); - Assert.AreEqual(4, set2.Count); + Assert.HasCount(4, set2); Assert.AreEqual(mpt1.Root.Hash, mpt2.Root.Hash); } @@ -351,21 +351,21 @@ public void TestFind() var snapshot = store.GetSnapshot(); var mpt1 = new Trie(snapshot, null); var results = mpt1.Find([]).ToArray(); - Assert.AreEqual(0, results.Length); + Assert.IsEmpty(results); var mpt2 = new Trie(snapshot, null); mpt2.Put([0xab, 0xcd, 0xef], [0x01]); mpt2.Put([0xab, 0xcd, 0xe1], [0x02]); mpt2.Put([0xab], [0x03]); results = [.. mpt2.Find([])]; - Assert.AreEqual(3, results.Length); + Assert.HasCount(3, results); results = [.. mpt2.Find([0xab])]; - Assert.AreEqual(3, results.Length); + Assert.HasCount(3, results); results = [.. mpt2.Find([0xab, 0xcd])]; - Assert.AreEqual(2, results.Length); + Assert.HasCount(2, results); results = [.. mpt2.Find([0xac])]; - Assert.AreEqual(0, results.Length); + Assert.IsEmpty(results); results = [.. mpt2.Find([0xab, 0xcd, 0xef, 0x00])]; - Assert.AreEqual(0, results.Length); + Assert.IsEmpty(results); } [TestMethod] @@ -399,7 +399,7 @@ public void TestFindLeadNode() var mpt = new Trie(_mptdb.GetSnapshot(), _root.Hash); var prefix = new byte[] { 0xac, 0x01 }; // = FromNibbles(path = { 0x0a, 0x0c, 0x00, 0x01 }); var results = mpt.Find(prefix).ToArray(); - Assert.AreEqual(1, results.Length); + Assert.HasCount(1, results); prefix = [0xac]; // = FromNibbles(path = { 0x0a, 0x0c }); Assert.ThrowsExactly(() => _ = mpt.Find(prefix).ToArray()); @@ -551,12 +551,12 @@ public void TestEmptyValueIssue633() mpt.Put(key, []); var val = mpt[key]; Assert.IsNotNull(val); - Assert.AreEqual(0, val.Length); + Assert.IsEmpty(val); var r = mpt.TryGetProof(key, out var proof); Assert.IsTrue(r); val = Trie.VerifyProof(mpt.Root.Hash, key, proof); Assert.IsNotNull(val); - Assert.AreEqual(0, val.Length); + Assert.IsEmpty(val); } [TestMethod] @@ -568,13 +568,13 @@ public void TestFindWithFrom() mpt.Put("aa10".HexToBytes(), "03".HexToBytes()); mpt.Put("aa50".HexToBytes(), "04".HexToBytes()); var r = mpt.Find("aa".HexToBytes()).ToList(); - Assert.AreEqual(3, r.Count); + Assert.HasCount(3, r); r = [.. mpt.Find("aa".HexToBytes(), "aa30".HexToBytes())]; - Assert.AreEqual(1, r.Count); + Assert.HasCount(1, r); r = [.. mpt.Find("aa".HexToBytes(), "aa60".HexToBytes())]; - Assert.AreEqual(0, r.Count); + Assert.IsEmpty(r); r = [.. mpt.Find("aa".HexToBytes(), "aa10".HexToBytes())]; - Assert.AreEqual(1, r.Count); + Assert.HasCount(1, r); } [TestMethod] @@ -585,11 +585,11 @@ public void TestFindStatesIssue652() mpt.Put("abc1".HexToBytes(), "01".HexToBytes()); mpt.Put("abc3".HexToBytes(), "02".HexToBytes()); var r = mpt.Find("ab".HexToBytes(), "abd2".HexToBytes()).ToList(); - Assert.AreEqual(0, r.Count); + Assert.IsEmpty(r); r = [.. mpt.Find("ab".HexToBytes(), "abb2".HexToBytes())]; - Assert.AreEqual(2, r.Count); + Assert.HasCount(2, r); r = [.. mpt.Find("ab".HexToBytes(), "abc2".HexToBytes())]; - Assert.AreEqual(1, r.Count); + Assert.HasCount(1, r); } } } diff --git a/tests/Neo.Extensions.Tests/Collections/UT_CollectionExtensions.cs b/tests/Neo.Extensions.Tests/Collections/UT_CollectionExtensions.cs index 54f82b9b31..c87c85c864 100644 --- a/tests/Neo.Extensions.Tests/Collections/UT_CollectionExtensions.cs +++ b/tests/Neo.Extensions.Tests/Collections/UT_CollectionExtensions.cs @@ -73,7 +73,7 @@ public void TestRemoveWhere() dict.RemoveWhere(p => p.Value == "b"); - Assert.AreEqual(2, dict.Count); + Assert.HasCount(2, dict); Assert.IsFalse(dict.ContainsKey(2)); Assert.AreEqual("a", dict[1]); Assert.AreEqual("c", dict[3]); diff --git a/tests/Neo.Extensions.Tests/Factories/UT_RandomNumberFactory.cs b/tests/Neo.Extensions.Tests/Factories/UT_RandomNumberFactory.cs index a1e72b3075..b08b72b94b 100644 --- a/tests/Neo.Extensions.Tests/Factories/UT_RandomNumberFactory.cs +++ b/tests/Neo.Extensions.Tests/Factories/UT_RandomNumberFactory.cs @@ -265,7 +265,7 @@ public void CheckNextBigIntegerInNegative() var actualValue = RandomNumberFactory.NextBigInteger(expectedMin, expectedMax); Assert.IsTrue(actualValue >= expectedMin && actualValue <= expectedMax); - Assert.IsTrue(actualValue.Sign < 0); + Assert.IsLessThan(0, actualValue.Sign); } [TestMethod] diff --git a/tests/Neo.Extensions.Tests/UT_ByteArrayComparer.cs b/tests/Neo.Extensions.Tests/UT_ByteArrayComparer.cs index 839c9130e3..0e869dcb4d 100644 --- a/tests/Neo.Extensions.Tests/UT_ByteArrayComparer.cs +++ b/tests/Neo.Extensions.Tests/UT_ByteArrayComparer.cs @@ -23,62 +23,62 @@ public void TestCompare() byte[]? x = null, y = null; Assert.AreEqual(0, comparer.Compare(x, y)); - x = new byte[] { 1, 2, 3, 4, 5 }; + x = [1, 2, 3, 4, 5]; y = x; Assert.AreEqual(0, comparer.Compare(x, y)); Assert.AreEqual(0, comparer.Compare(x, x)); y = null; - Assert.IsTrue(comparer.Compare(x, y) > 0); + Assert.IsGreaterThan(0, comparer.Compare(x, y)); y = x; x = null; - Assert.IsTrue(comparer.Compare(x, y) < 0); + Assert.IsLessThan(0, comparer.Compare(x, y)); - x = new byte[] { 1 }; - y = Array.Empty(); - Assert.IsTrue(comparer.Compare(x, y) > 0); + x = [1]; + y = []; + Assert.IsGreaterThan(0, comparer.Compare(x, y)); y = x; Assert.AreEqual(0, comparer.Compare(x, y)); - x = new byte[] { 1 }; - y = new byte[] { 2 }; - Assert.IsTrue(comparer.Compare(x, y) < 0); + x = [1]; + y = [2]; + Assert.IsLessThan(0, comparer.Compare(x, y)); Assert.AreEqual(0, comparer.Compare(null, Array.Empty())); Assert.AreEqual(0, comparer.Compare(Array.Empty(), null)); - x = new byte[] { 1, 2, 3, 4, 5 }; - y = new byte[] { 1, 2, 3 }; - Assert.IsTrue(comparer.Compare(x, y) > 0); + x = [1, 2, 3, 4, 5]; + y = [1, 2, 3]; + Assert.IsGreaterThan(0, comparer.Compare(x, y)); - x = new byte[] { 1, 2, 3, 4, 5 }; - y = new byte[] { 1, 2, 3, 4, 5, 6 }; - Assert.IsTrue(comparer.Compare(x, y) < 0); + x = [1, 2, 3, 4, 5]; + y = [1, 2, 3, 4, 5, 6]; + Assert.IsLessThan(0, comparer.Compare(x, y)); // cases for reverse comparer comparer = ByteArrayComparer.Reverse; - x = new byte[] { 3 }; - Assert.IsTrue(comparer.Compare(x, y) < 0); + x = [3]; + Assert.IsLessThan(0, comparer.Compare(x, y)); y = x; Assert.AreEqual(0, comparer.Compare(x, y)); - x = new byte[] { 1 }; - y = new byte[] { 2 }; - Assert.IsTrue(comparer.Compare(x, y) > 0); + x = [1]; + y = [2]; + Assert.IsGreaterThan(0, comparer.Compare(x, y)); Assert.AreEqual(0, comparer.Compare(null, Array.Empty())); Assert.AreEqual(0, comparer.Compare(Array.Empty(), null)); - x = new byte[] { 1, 2, 3, 4, 5 }; - y = new byte[] { 1, 2, 3 }; - Assert.IsTrue(comparer.Compare(x, y) < 0); + x = [1, 2, 3, 4, 5]; + y = [1, 2, 3]; + Assert.IsLessThan(0, comparer.Compare(x, y)); - x = new byte[] { 1, 2, 3, 4, 5 }; - y = new byte[] { 1, 2, 3, 4, 5, 6 }; - Assert.IsTrue(comparer.Compare(x, y) > 0); + x = [1, 2, 3, 4, 5]; + y = [1, 2, 3, 4, 5, 6]; + Assert.IsGreaterThan(0, comparer.Compare(x, y)); } } } diff --git a/tests/Neo.Json.UnitTests/UT_JArray.cs b/tests/Neo.Json.UnitTests/UT_JArray.cs index 8fae027897..a4b3088b4d 100644 --- a/tests/Neo.Json.UnitTests/UT_JArray.cs +++ b/tests/Neo.Json.UnitTests/UT_JArray.cs @@ -126,8 +126,8 @@ public void TestContains() { alice }; - Assert.IsTrue(jArray.Contains(alice)); - Assert.IsFalse(jArray.Contains(bob)); + Assert.Contains(alice, jArray); + Assert.DoesNotContain(bob, jArray); } [TestMethod] @@ -230,7 +230,7 @@ public void TestRemoveAt() }; jArray.RemoveAt(1); Assert.AreEqual(2, jArray.Count()); - Assert.IsFalse(jArray.Contains(bob)); + Assert.DoesNotContain(bob, jArray); } [TestMethod] @@ -269,7 +269,7 @@ public void TestAsString() public void TestCount() { var jArray = new JArray { alice, bob }; - Assert.AreEqual(2, jArray.Count); + Assert.HasCount(2, jArray); } [TestMethod] @@ -296,7 +296,7 @@ public void TestImplicitConversionFromJTokenArray() JToken[] jTokens = { alice, bob }; JArray jArray = jTokens; - Assert.AreEqual(2, jArray.Count); + Assert.HasCount(2, jArray); Assert.AreEqual(alice, jArray[0]); Assert.AreEqual(bob, jArray[1]); } @@ -308,7 +308,7 @@ public void TestAddNullValues() { null }; - Assert.AreEqual(1, jArray.Count); + Assert.HasCount(1, jArray); Assert.IsNull(jArray[0]); } @@ -343,7 +343,7 @@ public void TestAddNull() { var jArray = new JArray { null }; - Assert.AreEqual(1, jArray.Count); + Assert.HasCount(1, jArray); Assert.IsNull(jArray[0]); } @@ -353,7 +353,7 @@ public void TestSetNull() var jArray = new JArray { alice }; jArray[0] = null; - Assert.AreEqual(1, jArray.Count); + Assert.HasCount(1, jArray); Assert.IsNull(jArray[0]); } @@ -363,7 +363,7 @@ public void TestInsertNull() var jArray = new JArray { alice }; jArray.Insert(0, null); - Assert.AreEqual(2, jArray.Count); + Assert.HasCount(2, jArray); Assert.IsNull(jArray[0]); Assert.AreEqual(alice, jArray[1]); } @@ -374,7 +374,7 @@ public void TestRemoveNull() var jArray = new JArray { null, alice }; jArray.Remove(null); - Assert.AreEqual(1, jArray.Count); + Assert.HasCount(1, jArray); Assert.AreEqual(alice, jArray[0]); } @@ -382,8 +382,8 @@ public void TestRemoveNull() public void TestContainsNull() { var jArray = new JArray { null, alice }; - Assert.IsTrue(jArray.Contains(null)); - Assert.IsFalse(jArray.Contains(bob)); + Assert.Contains((JToken)null, jArray); + Assert.DoesNotContain(bob, jArray); } [TestMethod] @@ -422,7 +422,7 @@ 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); - Assert.AreEqual(3, jArray.Count); + Assert.HasCount(3, jArray); Assert.IsNull(jArray[0]); // Checking the second and third elements diff --git a/tests/Neo.Json.UnitTests/UT_OrderedDictionary.cs b/tests/Neo.Json.UnitTests/UT_OrderedDictionary.cs index d4ab7436b2..4120c89232 100644 --- a/tests/Neo.Json.UnitTests/UT_OrderedDictionary.cs +++ b/tests/Neo.Json.UnitTests/UT_OrderedDictionary.cs @@ -33,16 +33,16 @@ public void SetUp() public void TestClear() { od.Clear(); - Assert.AreEqual(0, od.Count); + Assert.IsEmpty(od); Assert.IsFalse(od.TryGetValue("a", out uint i)); } [TestMethod] public void TestCount() { - Assert.AreEqual(3, od.Count); + Assert.HasCount(3, od); od.Add("d", 4); - Assert.AreEqual(4, od.Count); + Assert.HasCount(4, od); } [TestMethod] @@ -67,7 +67,7 @@ public void TestGetKeys() { var keys = od.Keys; Assert.IsTrue(keys.Contains("a")); - Assert.AreEqual(3, keys.Count); + Assert.HasCount(3, keys); } [TestMethod] @@ -75,14 +75,14 @@ public void TestGetValues() { var values = od.Values; Assert.IsTrue(values.Contains(1u)); - Assert.AreEqual(3, values.Count); + Assert.HasCount(3, values); } [TestMethod] public void TestRemove() { od.Remove("a"); - Assert.AreEqual(2, od.Count); + Assert.HasCount(2, od); Assert.IsFalse(od.ContainsKey("a")); } @@ -101,7 +101,7 @@ public void TestCollectionAddAndContains() var pair = new KeyValuePair("d", 4); ICollection> collection = od; collection.Add(pair); - Assert.IsTrue(collection.Contains(pair)); + Assert.Contains(pair, collection); } [TestMethod] @@ -124,8 +124,8 @@ public void TestCollectionRemove() ICollection> collection = od; var pair = new KeyValuePair("a", 1); collection.Remove(pair); - Assert.IsFalse(collection.Contains(pair)); - Assert.AreEqual(2, collection.Count); + Assert.DoesNotContain(pair, collection); + Assert.HasCount(2, collection); } [TestMethod] diff --git a/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs b/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs index 5eb36fc44b..89aed56153 100644 --- a/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs +++ b/tests/Neo.Plugins.ApplicationLogs.Tests/UT_LogReader.cs @@ -146,35 +146,35 @@ public async Task Test_GetApplicationLog() JObject blockJson = (JObject)s_neoSystemFixture.logReader.GetApplicationLog([block.Hash.ToString()]); Assert.AreEqual(blockJson["blockhash"], block.Hash.ToString()); JArray executions = (JArray)blockJson["executions"]; - Assert.AreEqual(2, executions.Count); - Assert.AreEqual(executions[0]["trigger"], "OnPersist"); - Assert.AreEqual(executions[1]["trigger"], "PostPersist"); + Assert.HasCount(2, executions); + Assert.AreEqual("OnPersist", executions[0]["trigger"]); + Assert.AreEqual("PostPersist", executions[1]["trigger"]); JArray notifications = (JArray)executions[1]["notifications"]; - Assert.AreEqual(1, notifications.Count); + Assert.HasCount(1, notifications); Assert.AreEqual(notifications[0]["contract"], GasToken.GAS.Hash.ToString()); - Assert.AreEqual(notifications[0]["eventname"], "Transfer"); // from null to Validator - Assert.AreEqual(notifications[0]["state"]["value"][0]["type"], nameof(ContractParameterType.Any)); + Assert.AreEqual("Transfer", notifications[0]["eventname"]); // from null to Validator + Assert.AreEqual(nameof(ContractParameterType.Any), notifications[0]["state"]["value"][0]["type"]); CollectionAssert.AreEqual(Convert.FromBase64String(notifications[0]["state"]["value"][1]["value"].AsString()), ValidatorScriptHash.ToArray()); - Assert.AreEqual(notifications[0]["state"]["value"][2]["value"], "50000000"); + Assert.AreEqual("50000000", notifications[0]["state"]["value"][2]["value"]); blockJson = (JObject)s_neoSystemFixture.logReader.GetApplicationLog([block.Hash.ToString(), "PostPersist"]); executions = (JArray)blockJson["executions"]; - Assert.AreEqual(1, executions.Count); - Assert.AreEqual(executions[0]["trigger"], "PostPersist"); + Assert.HasCount(1, executions); + Assert.AreEqual("PostPersist", executions[0]["trigger"]); JObject transactionJson = (JObject)s_neoSystemFixture.logReader.GetApplicationLog([s_neoSystemFixture.txs[0].Hash.ToString(), true]); // "true" is invalid but still works executions = (JArray)transactionJson["executions"]; - Assert.AreEqual(1, executions.Count); - Assert.AreEqual(executions[0]["vmstate"], nameof(VMState.HALT)); - Assert.AreEqual(executions[0]["stack"][0]["value"], true); + Assert.HasCount(1, executions); + Assert.AreEqual(nameof(VMState.HALT), executions[0]["vmstate"]); + Assert.AreEqual(true, executions[0]["stack"][0]["value"]); notifications = (JArray)executions[0]["notifications"]; - Assert.AreEqual(2, notifications.Count); + Assert.HasCount(2, notifications); Assert.AreEqual("Transfer", notifications[0]["eventname"].AsString()); Assert.AreEqual(notifications[0]["contract"].AsString(), NeoToken.NEO.Hash.ToString()); - Assert.AreEqual(notifications[0]["state"]["value"][2]["value"], "1"); + Assert.AreEqual("1", notifications[0]["state"]["value"][2]["value"]); Assert.AreEqual("Transfer", notifications[1]["eventname"].AsString()); Assert.AreEqual(notifications[1]["contract"].AsString(), GasToken.GAS.Hash.ToString()); - Assert.AreEqual(notifications[1]["state"]["value"][2]["value"], "50000000"); + Assert.AreEqual("50000000", notifications[1]["state"]["value"][2]["value"]); } [TestMethod] @@ -198,10 +198,10 @@ public async Task Test_Commands() Assert.AreEqual(2, log.Notifications.Count()); Assert.AreEqual("Transfer", log.Notifications[0].EventName); Assert.AreEqual(log.Notifications[0].ScriptHash, NeoToken.NEO.Hash); - Assert.AreEqual(log.Notifications[0].State[2], 1); + Assert.AreEqual(1, log.Notifications[0].State[2]); Assert.AreEqual("Transfer", log.Notifications[1].EventName); Assert.AreEqual(log.Notifications[1].ScriptHash, GasToken.GAS.Hash); - Assert.AreEqual(log.Notifications[1].State[2], 50000000); + Assert.AreEqual(50000000, log.Notifications[1].State[2]); } List<(BlockchainEventModel eventLog, UInt256 txHash)> neoLogs = s_neoSystemFixture.logReader._neostore.GetContractLog(NeoToken.NEO.Hash, TriggerType.Application).ToList(); @@ -209,7 +209,7 @@ public async Task Test_Commands() Assert.AreEqual(neoLogs[0].txHash, s_neoSystemFixture.txs[0].Hash); Assert.AreEqual("Transfer", neoLogs[0].eventLog.EventName); Assert.AreEqual(neoLogs[0].eventLog.ScriptHash, NeoToken.NEO.Hash); - Assert.AreEqual(neoLogs[0].eventLog.State[2], 1); + Assert.AreEqual(1, neoLogs[0].eventLog.State[2]); } } } diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs index c246968f1c..d25e0db366 100644 --- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs +++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_Core.cs @@ -121,7 +121,7 @@ public void TestBasicConsensusFlow() // Assert - Services should start consensus without throwing // Verify all consensus services were created successfully - Assert.AreEqual(ValidatorCount, consensusServices.Length, "Should create all consensus services"); + Assert.HasCount(ValidatorCount, consensusServices, "Should create all consensus services"); foreach (var service in consensusServices) { Assert.IsNotNull(service, "Each consensus service should be created successfully"); diff --git a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs index bb04e472f2..3930823ffb 100644 --- a/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs +++ b/tests/Neo.Plugins.DBFTPlugin.Tests/UT_DBFT_MessageFlow.cs @@ -120,7 +120,7 @@ public void TestProperConsensusMessageFlow() // Assert - Enhanced validation Assert.IsNotNull(receivedMessages, "Message collection should not be null"); - Assert.IsTrue(receivedMessages.Count >= 0, "Should monitor consensus message flow"); + Assert.IsGreaterThanOrEqualTo(0, receivedMessages.Count, "Should monitor consensus message flow"); // Verify consensus services are not null foreach (var service in consensusServices) @@ -136,14 +136,14 @@ public void TestProperConsensusMessageFlow() { Assert.IsNotNull(msg, "Message should not be null"); Assert.AreEqual("dBFT", msg.Category, "Message should be DBFT category"); - Assert.IsTrue(msg.Data.Length > 0, "Message data should not be empty"); + Assert.IsGreaterThan(0, msg.Data.Length, "Message data should not be empty"); try { var consensusMsg = ConsensusMessage.DeserializeFrom(msg.Data); Assert.IsNotNull(consensusMsg, "Consensus message should deserialize successfully"); - Assert.IsTrue(consensusMsg.ValidatorIndex < ValidatorCount, - $"Validator index {consensusMsg.ValidatorIndex} should be valid"); + Assert.IsLessThan(ValidatorCount, +consensusMsg.ValidatorIndex, $"Validator index {consensusMsg.ValidatorIndex} should be valid"); validConsensusMessages++; Console.WriteLine($"Valid consensus message: {consensusMsg.Type} from validator {consensusMsg.ValidatorIndex}"); @@ -257,8 +257,8 @@ public void TestConsensusMessageValidation() // Assert - Enhanced validation Assert.IsNotNull(messages, "Message collection should not be null"); Assert.IsNotNull(additionalMessages, "Additional message collection should not be null"); - Assert.IsTrue(messages.Count >= 0, "Should monitor consensus message flow"); - Assert.IsTrue(additionalMessages.Count >= 0, "Should handle invalid messages gracefully"); + Assert.IsGreaterThanOrEqualTo(0, messages.Count, "Should monitor consensus message flow"); + Assert.IsGreaterThanOrEqualTo(0, additionalMessages.Count, "Should handle invalid messages gracefully"); // Verify that invalid messages don't crash the system var totalValidMessages = 0; @@ -281,7 +281,7 @@ public void TestConsensusMessageValidation() VerifyConsensusServicesOperational(); - Assert.IsTrue(totalValidMessages >= 0, "Should have processed some valid messages"); + Assert.IsGreaterThanOrEqualTo(0, totalValidMessages, "Should have processed some valid messages"); Console.WriteLine($"Valid message monitoring: {messages.Count} messages"); Console.WriteLine($"Invalid message handling: {additionalMessages.Count} additional messages"); Console.WriteLine($"Total valid consensus messages processed: {totalValidMessages}"); @@ -331,7 +331,7 @@ public void TestConsensusServiceResilience() var messages = MonitorConsensusMessages(TimeSpan.FromSeconds(2)); // Assert - Assert.IsTrue(messages.Count >= 0, "Should handle various message conditions"); + Assert.IsGreaterThanOrEqualTo(0, messages.Count, "Should handle various message conditions"); VerifyConsensusServicesOperational(); Console.WriteLine($"Resilience test: {messages.Count} messages monitored"); @@ -371,8 +371,8 @@ public void TestConsensusServiceLifecycle() var additionalMessages = MonitorConsensusMessages(TimeSpan.FromSeconds(1)); // Assert - Assert.IsTrue(messages.Count >= 0, "Should handle PrepareRequest messages"); - Assert.IsTrue(additionalMessages.Count >= 0, "Should handle PrepareResponse and Commit messages"); + Assert.IsGreaterThanOrEqualTo(0, messages.Count, "Should handle PrepareRequest messages"); + Assert.IsGreaterThanOrEqualTo(0, additionalMessages.Count, "Should handle PrepareResponse and Commit messages"); VerifyConsensusServicesOperational(); Console.WriteLine($"PrepareRequest phase: {messages.Count} messages"); diff --git a/tests/Neo.Plugins.RestServer.Tests/RateLimitingIntegrationTests.cs b/tests/Neo.Plugins.RestServer.Tests/RateLimitingIntegrationTests.cs index 98359ecf8b..9d325582cd 100644 --- a/tests/Neo.Plugins.RestServer.Tests/RateLimitingIntegrationTests.cs +++ b/tests/Neo.Plugins.RestServer.Tests/RateLimitingIntegrationTests.cs @@ -36,13 +36,14 @@ public async Task RateLimiter_ShouldReturn429_WhenLimitExceeded() Assert.AreEqual(HttpStatusCode.TooManyRequests, response3.StatusCode); // Check for Retry-After header - Assert.IsTrue(response3.Headers.Contains("Retry-After")); + Assert.Contains((header) => header.Key == "Retry-After", response3.Headers); + var retryAfter = response3.Headers.GetValues("Retry-After").FirstOrDefault(); Assert.IsNotNull(retryAfter); // Read the response content var content = await response3.Content.ReadAsStringAsync(CancellationToken.None); - Assert.IsTrue(content.Contains("Too many requests")); + Assert.Contains("Too many requests", content); } [TestMethod] diff --git a/tests/Neo.Plugins.RestServer.Tests/RestServerRateLimitingTests.cs b/tests/Neo.Plugins.RestServer.Tests/RestServerRateLimitingTests.cs index 9fc1d4d963..f3b85bee89 100644 --- a/tests/Neo.Plugins.RestServer.Tests/RestServerRateLimitingTests.cs +++ b/tests/Neo.Plugins.RestServer.Tests/RestServerRateLimitingTests.cs @@ -86,11 +86,11 @@ public async Task RestServer_ShouldRateLimit_WhenLimitExceeded() Assert.AreEqual(HttpStatusCode.TooManyRequests, response3.StatusCode); // Check for Retry-After header - Assert.IsTrue(response3.Headers.Contains("Retry-After")); + Assert.Contains((header) => header.Key == "Retry-After", response3.Headers); // Read the response content var content = await response3.Content.ReadAsStringAsync(CancellationToken.None); - Assert.IsTrue(content.Contains("Too many requests")); + Assert.Contains("Too many requests", content); } [TestCleanup] diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs index 69e5378a12..ac1ea4a449 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_Parameters.cs @@ -438,8 +438,8 @@ public void TestToSignersAndWitnesses() }); var result = signers.ToSignersAndWitnesses(addressVersion); - Assert.AreEqual(1, result.Signers.Length); - Assert.AreEqual(0, result.Witnesses.Length); + Assert.HasCount(1, result.Signers); + Assert.IsEmpty(result.Witnesses); Assert.AreEqual(account, result.Signers[0].Account); Assert.AreEqual(WitnessScope.CalledByEntry, result.Signers[0].Scopes); @@ -451,8 +451,8 @@ public void TestToSignersAndWitnesses() ["verification"] = "V29ybGQK" }); result = signersAndWitnesses.ToSignersAndWitnesses(addressVersion); - Assert.AreEqual(1, result.Signers.Length); - Assert.AreEqual(1, result.Witnesses.Length); + Assert.HasCount(1, result.Signers); + Assert.HasCount(1, result.Witnesses); Assert.AreEqual(account, result.Signers[0].Account); Assert.AreEqual(WitnessScope.CalledByEntry, result.Signers[0].Scopes); Assert.AreEqual("SGVsbG8K", Convert.ToBase64String(result.Witnesses[0].InvocationScript.Span)); diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs index b69f06fa7a..3fc470cc7a 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcErrorHandling.cs @@ -107,7 +107,7 @@ public async Task TestDuplicateTransactionErrorCodeInJsonResponse() // The message might include additional data and stack trace in DEBUG mode, // so just check that it contains the expected message var actualMessage = response["error"]["message"].AsString(); - Assert.IsTrue(actualMessage.Contains(RpcError.AlreadyExists.Message), + Assert.Contains(RpcError.AlreadyExists.Message, actualMessage, $"Expected message to contain '{RpcError.AlreadyExists.Message}' but got '{actualMessage}'"); } @@ -146,7 +146,7 @@ public async Task TestDuplicateTransactionErrorCodeWithDynamicInvoke() // The message might include additional data and stack trace in DEBUG mode, // so just check that it contains the expected message var actualMessage = response["error"]["message"].AsString(); - Assert.IsTrue(actualMessage.Contains(RpcError.AlreadyExists.Message), + Assert.Contains(RpcError.AlreadyExists.Message, actualMessage, $"Expected message to contain '{RpcError.AlreadyExists.Message}' but got '{actualMessage}'"); } @@ -311,7 +311,7 @@ public async Task TestDynamicInvokeExceptionUnwrapping() // The message might include additional data and stack trace in DEBUG mode, // so just check that it contains the expected message var actualMessage = response["error"]["message"].AsString(); - Assert.IsTrue(actualMessage.Contains(RpcError.AlreadyExists.Message), + Assert.Contains(RpcError.AlreadyExists.Message, actualMessage, $"Expected message to contain '{RpcError.AlreadyExists.Message}' but got '{actualMessage}'"); } diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs index 0da7a73fc0..cb1d34f2d2 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Blockchain.cs @@ -115,7 +115,7 @@ public void TestGetBlock_Genesis() Assert.AreEqual(expectedJson["merkleroot"].AsString(), resultVerbose["merkleroot"].AsString()); Assert.AreEqual(expectedJson["confirmations"].AsNumber(), resultVerbose["confirmations"].AsNumber()); // Genesis block should have 0 transactions - Assert.AreEqual(0, ((JArray)resultVerbose["tx"]).Count); + Assert.IsEmpty((JArray)resultVerbose["tx"]); } [TestMethod] @@ -146,14 +146,14 @@ public void TestGetBlock_NoTransactions() var blockArr = Convert.FromBase64String(resultNonVerbose.AsString()); var deserializedBlock = blockArr.AsSerializable(); Assert.AreEqual(block.Hash, deserializedBlock.Hash); - Assert.AreEqual(0, deserializedBlock.Transactions.Length); + Assert.IsEmpty(deserializedBlock.Transactions); // Test verbose var resultVerbose = _rpcServer.GetBlock(new BlockHashOrIndex(block.Index), true); var expectedJson = block.ToJson(TestProtocolSettings.Default); expectedJson["confirmations"] = NativeContract.Ledger.CurrentIndex(snapshot) - block.Index + 1; Assert.AreEqual(expectedJson["hash"].AsString(), resultVerbose["hash"].AsString()); - Assert.AreEqual(0, ((JArray)resultVerbose["tx"]).Count); + Assert.IsEmpty((JArray)resultVerbose["tx"]); var ex = Assert.ThrowsExactly(() => _rpcServer.GetBlock(null, true)); Assert.AreEqual(RpcError.InvalidParams.Code, ex.HResult); @@ -291,13 +291,13 @@ public void TestGetRawMemPool_Empty() // Test without unverified var result = _rpcServer.GetRawMemPool(); Assert.IsInstanceOfType(result, typeof(JArray)); - Assert.AreEqual(0, ((JArray)result).Count); + Assert.IsEmpty((JArray)result); // Test with unverified result = _rpcServer.GetRawMemPool(true); Assert.IsInstanceOfType(result, typeof(JObject)); - Assert.AreEqual(0, ((JArray)((JObject)result)["verified"]).Count); - Assert.AreEqual(0, ((JArray)((JObject)result)["unverified"]).Count); + Assert.IsEmpty((JArray)((JObject)result)["verified"]); + Assert.IsEmpty((JArray)((JObject)result)["unverified"]); Assert.IsTrue(((JObject)result).ContainsProperty("height")); } @@ -321,7 +321,7 @@ public void TestGetRawMemPool_MixedVerifiedUnverified() var expectedVerifiedHashes = verified.Select(tx => tx.Hash.ToString()).ToHashSet(); var expectedUnverifiedHashes = unverified.Select(tx => tx.Hash.ToString()).ToHashSet(); - Assert.IsTrue(expectedVerifiedCount + expectedUnverifiedCount > 0, "Test setup failed: No transactions in mempool"); + Assert.IsGreaterThan(0, expectedVerifiedCount + expectedUnverifiedCount, "Test setup failed: No transactions in mempool"); // Call the RPC method var result = _rpcServer.GetRawMemPool(true); @@ -504,7 +504,7 @@ public void TestFindStorage_Pagination() // Get second page var resultPage2 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(prefix), nextIndex); Assert.IsFalse(resultPage2["truncated"].AsBoolean()); - Assert.AreEqual(5, ((JArray)resultPage2["results"]).Count); + Assert.HasCount(5, (JArray)resultPage2["results"]); Assert.AreEqual(totalItems, (int)resultPage2["next"].AsNumber()); // Next should be total count } @@ -535,7 +535,7 @@ public void TestFindStorage_Pagination_End() // Try to get next page (should be empty) var resultPage2 = _rpcServer.FindStorage(new(contractState.Hash), Convert.ToBase64String(prefix), nextIndex); Assert.IsFalse(resultPage2["truncated"].AsBoolean()); - Assert.AreEqual(0, ((JArray)resultPage2["results"]).Count); + Assert.IsEmpty((JArray)resultPage2["results"]); Assert.AreEqual(nextIndex, (int)resultPage2["next"].AsNumber()); // Next index should remain the same var ex = Assert.ThrowsExactly( diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs index 56c28d6342..5d4e386c34 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Node.cs @@ -51,7 +51,7 @@ public void TestGetPeers() Assert.IsInstanceOfType(result, typeof(JObject)); var json = (JObject)result; Assert.IsTrue(json.ContainsProperty("unconnected")); - Assert.AreEqual(3, (json["unconnected"] as JArray).Count); + Assert.HasCount(3, json["unconnected"] as JArray); Assert.IsTrue(json.ContainsProperty("bad")); Assert.IsTrue(json.ContainsProperty("connected")); } @@ -70,7 +70,7 @@ public void TestGetPeers_NoUnconnected() Assert.IsInstanceOfType(result, typeof(JObject)); var json = (JObject)result; Assert.IsTrue(json.ContainsProperty("unconnected")); - Assert.AreEqual(0, (json["unconnected"] as JArray).Count); + Assert.IsEmpty(json["unconnected"] as JArray); Assert.IsTrue(json.ContainsProperty("bad")); Assert.IsTrue(json.ContainsProperty("connected")); } @@ -91,7 +91,7 @@ public void TestGetPeers_NoConnected() Assert.IsTrue(json.ContainsProperty("unconnected")); Assert.IsTrue(json.ContainsProperty("bad")); Assert.IsTrue(json.ContainsProperty("connected")); - Assert.AreEqual(0, (json["connected"] as JArray).Count); // Directly check connected count + Assert.IsEmpty(json["connected"] as JArray); // Directly check connected count } [TestMethod] @@ -141,13 +141,13 @@ public void TestGetVersion_HardforksStructure() Assert.IsTrue(hfJson.ContainsProperty("blockheight")); Assert.IsInstanceOfType(hfJson["name"], typeof(JString)); Assert.IsInstanceOfType(hfJson["blockheight"], typeof(JNumber)); - Assert.IsFalse(hfJson["name"].AsString().StartsWith("HF_")); // Check if prefix was stripped + Assert.DoesNotStartWith("HF_", hfJson["name"].AsString()); // Check if prefix was stripped } } // If no hardforks are defined, the array should be empty else { - Assert.AreEqual(0, _neoSystem.Settings.Hardforks.Count); + Assert.IsEmpty(_neoSystem.Settings.Hardforks); } } diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs index 63a3714cfa..80754a45b8 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.SmartContract.cs @@ -79,22 +79,22 @@ public void TestInvokeFunction() Assert.IsTrue(resp.ContainsProperty("gasconsumed")); Assert.IsTrue(resp.ContainsProperty("diagnostics")); Assert.AreEqual(resp["diagnostics"]["invokedcontracts"]["call"][0]["hash"], s_neoHash); - Assert.AreEqual(0, ((JArray)resp["diagnostics"]["storagechanges"]).Count); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); - Assert.AreEqual(null, resp["exception"]); - Assert.AreEqual(0, ((JArray)resp["notifications"]).Count); - Assert.AreEqual(resp["stack"][0]["type"], nameof(Integer)); - Assert.AreEqual(resp["stack"][0]["value"], "100000000"); + Assert.IsEmpty((JArray)resp["diagnostics"]["storagechanges"]); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); + Assert.IsNull(resp["exception"]); + Assert.IsEmpty((JArray)resp["notifications"]); + Assert.AreEqual(nameof(Integer), resp["stack"][0]["type"]); + Assert.AreEqual("100000000", resp["stack"][0]["value"]); Assert.IsTrue(resp.ContainsProperty("tx")); resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "symbol"); Assert.AreEqual(6, resp.Count); Assert.IsTrue(resp.ContainsProperty("script")); Assert.IsTrue(resp.ContainsProperty("gasconsumed")); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); - Assert.AreEqual(null, resp["exception"]); - Assert.AreEqual(0, ((JArray)resp["notifications"]).Count); - Assert.AreEqual(resp["stack"][0]["type"], nameof(ByteString)); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); + Assert.IsNull(resp["exception"]); + Assert.IsEmpty((JArray)resp["notifications"]); + Assert.AreEqual(nameof(ByteString), resp["stack"][0]["type"]); Assert.AreEqual(resp["stack"][0]["value"], Convert.ToBase64String(Encoding.UTF8.GetBytes("NEO"))); // This call triggers not only NEO but also unclaimed GAS @@ -115,18 +115,18 @@ public void TestInvokeFunction() Assert.IsTrue(resp.ContainsProperty("gasconsumed")); Assert.IsTrue(resp.ContainsProperty("diagnostics")); Assert.AreEqual(resp["diagnostics"]["invokedcontracts"]["call"][0]["hash"], s_neoHash); - Assert.AreEqual(4, ((JArray)resp["diagnostics"]["storagechanges"]).Count); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); + Assert.HasCount(4, (JArray)resp["diagnostics"]["storagechanges"]); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); Assert.AreEqual(resp["exception"], $"The smart contract or address {MultisigScriptHash} ({MultisigAddress}) is not found. " + $"If this is your wallet address and you want to sign a transaction with it, make sure you have opened this wallet."); JArray notifications = (JArray)resp["notifications"]; - Assert.AreEqual(2, notifications.Count); + Assert.HasCount(2, notifications); Assert.AreEqual("Transfer", notifications[0]["eventname"].AsString()); Assert.AreEqual(notifications[0]["contract"].AsString(), s_neoHash); - Assert.AreEqual(notifications[0]["state"]["value"][2]["value"], "1"); + Assert.AreEqual("1", notifications[0]["state"]["value"][2]["value"]); Assert.AreEqual("Transfer", notifications[1]["eventname"].AsString()); Assert.AreEqual(notifications[1]["contract"].AsString(), s_gasHash); - Assert.AreEqual(notifications[1]["state"]["value"][2]["value"], "50000000"); + Assert.AreEqual("50000000", notifications[1]["state"]["value"][2]["value"]); _rpcServer.wallet = null; } @@ -150,7 +150,7 @@ public void TestInvokeFunctionInvalid() Console.WriteLine(resp); Assert.AreEqual(3, resp.Count); Assert.IsNotNull(resp["error"]); - Assert.AreEqual(resp["error"]["code"], -32602); + Assert.AreEqual(-32602, resp["error"]["code"]); _rpcServer.wallet = null; } @@ -167,16 +167,16 @@ public void TestInvokeScript() Assert.IsTrue(resp.ContainsProperty("gasconsumed")); Assert.IsTrue(resp.ContainsProperty("diagnostics")); Assert.AreEqual(resp["diagnostics"]["invokedcontracts"]["call"][0]["hash"], s_neoHash); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); - Assert.AreEqual(null, resp["exception"]); - Assert.AreEqual(0, ((JArray)resp["notifications"]).Count); - Assert.AreEqual(resp["stack"][0]["type"], nameof(Integer)); - Assert.AreEqual(resp["stack"][0]["value"], "100000000"); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); + Assert.IsNull(resp["exception"]); + Assert.IsEmpty((JArray)resp["notifications"]); + Assert.AreEqual(nameof(Integer), resp["stack"][0]["type"]); + Assert.AreEqual("100000000", resp["stack"][0]["value"]); resp = (JObject)_rpcServer.InvokeScript(Convert.FromBase64String(NeoTransferScript)); Assert.AreEqual(6, resp.Count); - Assert.AreEqual(resp["stack"][0]["type"], nameof(Boolean)); - Assert.AreEqual(resp["stack"][0]["value"], false); + Assert.AreEqual(nameof(Boolean), resp["stack"][0]["type"]); + Assert.AreEqual(false, resp["stack"][0]["value"]); } [TestMethod] @@ -230,7 +230,7 @@ public void TestInvokeScript_GasLimitExceeded() Assert.AreEqual(nameof(VMState.FAULT), resp["state"].AsString()); Assert.IsNotNull(resp["exception"].AsString()); Assert.Contains("Insufficient GAS", resp["exception"].AsString()); - Assert.IsTrue(long.Parse(resp["gasconsumed"].AsString()) > lowGasSettings.MaxGasInvoke); + Assert.IsGreaterThan(lowGasSettings.MaxGasInvoke, long.Parse(resp["gasconsumed"].AsString())); } [TestMethod] @@ -356,7 +356,7 @@ public void TestInvokeScript_WithDiagnostics() Assert.IsTrue(invokedContracts.ContainsProperty("call")); // Nested calls var calls = (JArray)invokedContracts["call"]; - Assert.IsTrue(calls.Count >= 1); // Should call at least GAS contract for claim + Assert.IsGreaterThanOrEqualTo(1, calls.Count); // Should call at least GAS contract for claim // Also check for NEO call, as it's part of the transfer Assert.IsTrue(calls.Any(c => c["hash"].AsString() == s_neoHash)); // Fix based on test output @@ -364,7 +364,7 @@ public void TestInvokeScript_WithDiagnostics() // Verify Storage Changes Assert.IsTrue(diagnostics.ContainsProperty("storagechanges")); var storageChanges = (JArray)diagnostics["storagechanges"]; - Assert.IsTrue(storageChanges.Count > 0, "Expected storage changes for transfer"); + Assert.IsGreaterThan(0, storageChanges.Count, "Expected storage changes for transfer"); // Check structure of a storage change item var firstChange = (JObject)storageChanges[0]; @@ -382,7 +382,7 @@ public void TestTraverseIterator() var sessionId = resp["session"]; var iteratorId = resp["stack"][0]["id"]; var respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100); - Assert.AreEqual(0, respArray.Count); + Assert.IsEmpty(respArray); _rpcServer.TerminateSession(sessionId.AsParameter()); Assert.ThrowsExactly( @@ -398,7 +398,7 @@ public void TestTraverseIterator() validatorSigner.AsParameter(), true ); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); var snapshot = _neoSystem.GetSnapshotCache(); var tx = new Transaction @@ -419,19 +419,19 @@ public void TestTraverseIterator() sessionId = resp["session"]; iteratorId = resp["stack"][0]["id"]; respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100); - Assert.AreEqual(1, respArray.Count); - Assert.AreEqual(respArray[0]["type"], nameof(Struct)); + Assert.HasCount(1, respArray); + Assert.AreEqual(nameof(Struct), respArray[0]["type"]); var value = (JArray)respArray[0]["value"]; - Assert.AreEqual(2, value.Count); - Assert.AreEqual(value[0]["type"], nameof(ByteString)); + Assert.HasCount(2, value); + Assert.AreEqual(nameof(ByteString), value[0]["type"]); Assert.AreEqual(value[0]["value"], Convert.ToBase64String(TestProtocolSettings.SoleNode.StandbyCommittee[0].ToArray())); - Assert.AreEqual(value[1]["type"], nameof(Integer)); - Assert.AreEqual(value[1]["value"], "0"); + Assert.AreEqual(nameof(Integer), value[1]["type"]); + Assert.AreEqual("0", value[1]["value"]); // No result when traversed again respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100); - Assert.AreEqual(0, respArray.Count); + Assert.IsEmpty(respArray); // GetAllCandidates again resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true); @@ -440,13 +440,13 @@ public void TestTraverseIterator() // Insufficient result count limit respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 0); - Assert.AreEqual(0, respArray.Count); + Assert.IsEmpty(respArray); respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 1); - Assert.AreEqual(1, respArray.Count); + Assert.HasCount(1, respArray); respArray = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 1); - Assert.AreEqual(0, respArray.Count); + Assert.IsEmpty(respArray); // Mocking session timeout Thread.Sleep((int)_rpcServerSettings.SessionExpirationTime.TotalMilliseconds + 1); @@ -460,7 +460,7 @@ public void TestTraverseIterator() Assert.ThrowsExactly( () => _ = (JArray)_rpcServer.TraverseIterator(sessionId.AsParameter(), iteratorId.AsParameter(), 100), "Unknown session"); respArray = (JArray)_rpcServer.TraverseIterator(notExpiredSessionId.AsParameter(), notExpiredIteratorId.AsParameter(), 1); - Assert.AreEqual(1, respArray.Count); + Assert.HasCount(1, respArray); // Mocking disposal resp = (JObject)_rpcServer.InvokeFunction(s_neoHash, "getAllCandidates", [], validatorSigner.AsParameter(), true); @@ -525,12 +525,12 @@ public void TestGetUnclaimedGas() { var address = new JString(MultisigAddress); JObject resp = (JObject)_rpcServer.GetUnclaimedGas(address.AsParameter
()); - Assert.AreEqual(resp["unclaimed"], "50000000"); + Assert.AreEqual("50000000", resp["unclaimed"]); Assert.AreEqual(resp["address"], MultisigAddress); address = new JString(ValidatorAddress); resp = (JObject)_rpcServer.GetUnclaimedGas(address.AsParameter
()); - Assert.AreEqual(resp["unclaimed"], "0"); + Assert.AreEqual("0", resp["unclaimed"]); Assert.AreEqual(resp["address"], ValidatorAddress); } diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs index b29c2fbe1d..db2a73dae7 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Utilities.cs @@ -20,13 +20,13 @@ public partial class UT_RpcServer public void TestListPlugins() { var resp = (JArray)_rpcServer.ListPlugins(); - Assert.AreEqual(0, resp.Count); + Assert.IsEmpty(resp); Plugin.Plugins.Add(new RpcServerPlugin()); resp = (JArray)_rpcServer.ListPlugins(); - Assert.AreEqual(2, resp.Count); + Assert.HasCount(2, resp); foreach (var p in resp) - Assert.AreEqual(p["name"], nameof(RpcServer)); + Assert.AreEqual(nameof(RpcServer), p["name"]); } [TestMethod] @@ -35,12 +35,12 @@ public void TestValidateAddress() var validAddr = new JString("NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBP"); var resp = (JObject)_rpcServer.ValidateAddress(validAddr.AsString()); Assert.AreEqual(resp["address"], validAddr); - Assert.AreEqual(resp["isvalid"], true); + Assert.AreEqual(true, resp["isvalid"]); var invalidAddr = "ANeo2toNeo3MigrationAddressxwPB2Hz"; resp = (JObject)_rpcServer.ValidateAddress(invalidAddr); Assert.AreEqual(resp["address"], invalidAddr); - Assert.AreEqual(resp["isvalid"], false); + Assert.AreEqual(false, resp["isvalid"]); } [TestMethod] @@ -49,7 +49,7 @@ public void TestValidateAddress_EmptyString() var emptyAddr = ""; var resp = (JObject)_rpcServer.ValidateAddress(emptyAddr); Assert.AreEqual(resp["address"], emptyAddr); - Assert.AreEqual(resp["isvalid"], false); + Assert.AreEqual(false, resp["isvalid"]); } [TestMethod] @@ -60,7 +60,7 @@ public void TestValidateAddress_InvalidChecksum() var invalidChecksumAddr = "NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBO"; var resp = (JObject)_rpcServer.ValidateAddress(invalidChecksumAddr); Assert.AreEqual(resp["address"], invalidChecksumAddr); - Assert.AreEqual(resp["isvalid"], false); + Assert.AreEqual(false, resp["isvalid"]); } [TestMethod] @@ -70,13 +70,13 @@ public void TestValidateAddress_WrongLength() var shortAddr = "NM7Aky765FG8NhhwtxjXRx7jEL1cnw7P"; var resp = (JObject)_rpcServer.ValidateAddress(shortAddr); Assert.AreEqual(resp["address"], shortAddr); - Assert.AreEqual(resp["isvalid"], false); + Assert.AreEqual(false, resp["isvalid"]); // Address too long var longAddr = "NM7Aky765FG8NhhwtxjXRx7jEL1cnw7PBPPP"; resp = (JObject)_rpcServer.ValidateAddress(longAddr); Assert.AreEqual(resp["address"], longAddr); - Assert.AreEqual(resp["isvalid"], false); + Assert.AreEqual(false, resp["isvalid"]); } } } diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs index 1ae81d305f..e9dc8cf3b4 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs @@ -289,7 +289,7 @@ public void TestListAddress() Assert.IsInstanceOfType(result, typeof(JArray)); var json = (JArray)result; - Assert.IsTrue(json.Count > 0); + Assert.IsGreaterThan(0, json.Count); TestUtilCloseWallet(); } @@ -323,9 +323,9 @@ public void TestSendFrom() Assert.AreEqual(12, resp.Count); Assert.AreEqual(resp["sender"], ValidatorAddress); JArray signers = (JArray)resp["signers"]; - Assert.AreEqual(1, signers.Count); + Assert.HasCount(1, signers); Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString()); - Assert.AreEqual(signers[0]["scopes"], nameof(WitnessScope.CalledByEntry)); + Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]["scopes"]); _rpcServer.wallet = null; } @@ -345,9 +345,9 @@ public void TestSendMany() Assert.AreEqual(12, resp.Count); Assert.AreEqual(resp["sender"], ValidatorAddress); JArray signers = (JArray)resp["signers"]; - Assert.AreEqual(1, signers.Count); + Assert.HasCount(1, signers); Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString()); - Assert.AreEqual(signers[0]["scopes"], nameof(WitnessScope.CalledByEntry)); + Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]["scopes"]); _rpcServer.wallet = null; } @@ -366,9 +366,9 @@ public void TestSendToAddress() Assert.AreEqual(12, resp.Count); Assert.AreEqual(resp["sender"], ValidatorAddress); JArray signers = (JArray)resp["signers"]; - Assert.AreEqual(1, signers.Count); + Assert.HasCount(1, signers); Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString()); - Assert.AreEqual(signers[0]["scopes"], nameof(WitnessScope.CalledByEntry)); + Assert.AreEqual(nameof(WitnessScope.CalledByEntry), signers[0]["scopes"]); _rpcServer.wallet = null; } @@ -608,10 +608,10 @@ public void TestCancelTransaction() Assert.AreEqual(resp["sender"], ValidatorAddress); var signers = (JArray)resp["signers"]; - Assert.AreEqual(1, signers.Count); + Assert.HasCount(1, signers); Assert.AreEqual(signers[0]["account"], ValidatorScriptHash.ToString()); - Assert.AreEqual(signers[0]["scopes"], nameof(WitnessScope.None)); - Assert.AreEqual(resp["attributes"][0]["type"], nameof(TransactionAttributeType.Conflicts)); + Assert.AreEqual(nameof(WitnessScope.None), signers[0]["scopes"]); + Assert.AreEqual(nameof(TransactionAttributeType.Conflicts), resp["attributes"][0]["type"]); _rpcServer.wallet = null; } @@ -680,7 +680,7 @@ public void TestInvokeContractVerify() ], validatorSigner.AsParameter() ); - Assert.AreEqual(deployResp["state"], nameof(VMState.HALT)); + Assert.AreEqual(nameof(VMState.HALT), deployResp["state"]); var deployedScriptHash = new UInt160(Convert.FromBase64String(deployResp["notifications"][0]["state"]["value"][0]["value"].AsString())); var snapshot = _neoSystem.GetSnapshotCache(); @@ -699,13 +699,13 @@ public void TestInvokeContractVerify() // invoke verify without signer; should return false JObject resp = (JObject)_rpcServer.InvokeContractVerify([deployedScriptHash.ToString()]); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); - Assert.AreEqual(false, resp["stack"][0]["value"].AsBoolean()); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); + Assert.IsFalse(resp["stack"][0]["value"].AsBoolean()); // invoke verify with signer; should return true resp = (JObject)_rpcServer.InvokeContractVerify([deployedScriptHash.ToString(), new JArray([]), validatorSigner]); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); - Assert.AreEqual(true, resp["stack"][0]["value"].AsBoolean()); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); + Assert.IsTrue(resp["stack"][0]["value"].AsBoolean()); // invoke verify with wrong input value; should FAULT resp = (JObject)_rpcServer.InvokeContractVerify([ @@ -713,8 +713,8 @@ public void TestInvokeContractVerify() new JArray([new JObject() { ["type"] = nameof(ContractParameterType.Integer), ["value"] = "0" }]), validatorSigner ]); - Assert.AreEqual(resp["state"], nameof(VMState.FAULT)); - Assert.AreEqual(resp["exception"], "Object reference not set to an instance of an object."); + Assert.AreEqual(nameof(VMState.FAULT), resp["state"]); + Assert.AreEqual("Object reference not set to an instance of an object.", resp["exception"]); // invoke verify with 1 param and signer; should return true resp = (JObject)_rpcServer.InvokeContractVerify([ @@ -722,8 +722,8 @@ public void TestInvokeContractVerify() new JArray([new JObject() { ["type"] = nameof(ContractParameterType.Integer), ["value"] = "32" }]), validatorSigner, ]); - Assert.AreEqual(resp["state"], nameof(VMState.HALT)); - Assert.AreEqual(true, resp["stack"][0]["value"].AsBoolean()); + Assert.AreEqual(nameof(VMState.HALT), resp["state"]); + Assert.IsTrue(resp["stack"][0]["value"].AsBoolean()); // invoke verify with 2 param (which does not exist); should throw Exception Assert.ThrowsExactly( diff --git a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs index 44eadb4bee..c458375d9b 100644 --- a/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs +++ b/tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.cs @@ -220,7 +220,7 @@ public async Task TestProcessRequest_MixedBatch() Assert.IsInstanceOfType(response, typeof(JArray)); var batchResults = (JArray)response; - Assert.AreEqual(4, batchResults.Count); + Assert.HasCount(4, batchResults); // Check response 1 (valid getblockcount) Assert.IsNull(batchResults[0]["error"]); diff --git a/tests/Neo.Plugins.Storage.Tests/StoreTest.cs b/tests/Neo.Plugins.Storage.Tests/StoreTest.cs index 716bc63f4e..12f9a2ed66 100644 --- a/tests/Neo.Plugins.Storage.Tests/StoreTest.cs +++ b/tests/Neo.Plugins.Storage.Tests/StoreTest.cs @@ -196,7 +196,7 @@ private static void TestStorage(IStore store) // Seek Forward var entries = store.Find([0x00, 0x00, 0x02], SeekDirection.Forward).ToArray(); - Assert.AreEqual(3, entries.Length); + Assert.HasCount(3, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x02 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x02 }, entries[0].Value); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x03 }, entries[1].Key); @@ -207,7 +207,7 @@ private static void TestStorage(IStore store) // Seek Backward entries = store.Find([0x00, 0x00, 0x02], SeekDirection.Backward).ToArray(); - Assert.AreEqual(3, entries.Length); + Assert.HasCount(3, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x02 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x02 }, entries[0].Value); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[1].Key); @@ -224,7 +224,7 @@ private static void TestStorage(IStore store) store.Put([0x00, 0x01, 0x02], [0x02]); entries = store.Find([0x00, 0x00, 0x03], SeekDirection.Backward).ToArray(); - Assert.AreEqual(2, entries.Length); + Assert.HasCount(2, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x01 }, entries[0].Value); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[1].Key); @@ -232,14 +232,14 @@ private static void TestStorage(IStore store) // Seek null entries = store.Find(null, SeekDirection.Forward).ToArray(); - Assert.AreEqual(3, entries.Length); + Assert.HasCount(3, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[1].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x01, 0x02 }, entries[2].Key); // Seek empty entries = store.Find([], SeekDirection.Forward).ToArray(); - Assert.AreEqual(3, entries.Length); + Assert.HasCount(3, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[1].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x01, 0x02 }, entries[2].Key); @@ -247,13 +247,13 @@ private static void TestStorage(IStore store) // Test keys with different lengths var searchKey = new byte[] { 0x00, 0x01 }; entries = store.Find(searchKey, SeekDirection.Backward).ToArray(); - Assert.AreEqual(2, entries.Length); + Assert.HasCount(2, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[1].Key); searchKey = [0x00, 0x01, 0xff, 0xff, 0xff]; entries = store.Find(searchKey, SeekDirection.Backward).ToArray(); - Assert.AreEqual(3, entries.Length); + Assert.HasCount(3, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x01, 0x02 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[1].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[2].Key); @@ -264,16 +264,16 @@ private static void TestStorage(IStore store) { // Seek null entries = snapshot.Find(null, SeekDirection.Backward).ToArray(); - Assert.AreEqual(0, entries.Length); + Assert.IsEmpty(entries); // Seek empty entries = snapshot.Find([], SeekDirection.Backward).ToArray(); - Assert.AreEqual(0, entries.Length); + Assert.IsEmpty(entries); // Seek Backward entries = snapshot.Find([0x00, 0x00, 0x02], SeekDirection.Backward).ToArray(); - Assert.AreEqual(2, entries.Length); + Assert.HasCount(2, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x01 }, entries[0].Value); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[1].Key); @@ -295,7 +295,7 @@ private static void TestStorage(IStore store) using (var snapshot = store.GetSnapshot()) { entries = snapshot.Find([0x00, 0x00, 0x03], SeekDirection.Backward).ToArray(); - Assert.AreEqual(2, entries.Length); + Assert.HasCount(2, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x01 }, entries[0].Value); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[1].Key); @@ -304,13 +304,13 @@ private static void TestStorage(IStore store) // Test keys with different lengths searchKey = [0x00, 0x01]; entries = snapshot.Find(searchKey, SeekDirection.Backward).ToArray(); - Assert.AreEqual(2, entries.Length); + Assert.HasCount(2, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[1].Key); searchKey = [0x00, 0x01, 0xff, 0xff, 0xff]; entries = snapshot.Find(searchKey, SeekDirection.Backward).ToArray(); - Assert.AreEqual(3, entries.Length); + Assert.HasCount(3, entries); CollectionAssert.AreEqual(new byte[] { 0x00, 0x01, 0x02 }, entries[0].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x01 }, entries[1].Key); CollectionAssert.AreEqual(new byte[] { 0x00, 0x00, 0x00 }, entries[2].Key); diff --git a/tests/Neo.RpcClient.Tests/UT_TransactionManager.cs b/tests/Neo.RpcClient.Tests/UT_TransactionManager.cs index c73df4ee0b..51438d8b24 100644 --- a/tests/Neo.RpcClient.Tests/UT_TransactionManager.cs +++ b/tests/Neo.RpcClient.Tests/UT_TransactionManager.cs @@ -257,7 +257,7 @@ public async Task TestAddWitness() await txManager.SignAsync(); var tx = txManager.Tx; - Assert.AreEqual(2, tx.Witnesses.Length); + Assert.HasCount(2, tx.Witnesses); Assert.AreEqual(40, tx.Witnesses[0].VerificationScript.Length); Assert.AreEqual(66, tx.Witnesses[0].InvocationScript.Length); } diff --git a/tests/Neo.UnitTests/Network/P2P/Payloads/UT_Signers.cs b/tests/Neo.UnitTests/Network/P2P/Payloads/UT_Signers.cs index b705adef6d..46c7fb168e 100644 --- a/tests/Neo.UnitTests/Network/P2P/Payloads/UT_Signers.cs +++ b/tests/Neo.UnitTests/Network/P2P/Payloads/UT_Signers.cs @@ -91,7 +91,7 @@ public void Test_IEquatable() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); //Check null diff --git a/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessCondition.cs b/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessCondition.cs index 8d44b65666..615b0940da 100644 --- a/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessCondition.cs +++ b/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessCondition.cs @@ -52,7 +52,7 @@ public void Test_IEquatable_ScriptHashCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -87,7 +87,7 @@ public void Test_IEquatable_GroupCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -122,7 +122,7 @@ public void Test_IEquatable_CalledByGroupCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -150,7 +150,7 @@ public void Test_IEquatable_CalledByEntryCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -184,7 +184,7 @@ public void Test_IEquatable_CalledByContractCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -218,7 +218,7 @@ public void Test_IEquatable_BooleanCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -265,7 +265,7 @@ public void Test_IEquatable_AndCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } @@ -312,7 +312,7 @@ public void Test_IEquatable_OrCondition() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } diff --git a/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessRule.cs b/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessRule.cs index 95ab3c9e2b..ab09178db5 100644 --- a/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessRule.cs +++ b/tests/Neo.UnitTests/Network/P2P/Payloads/UT_WitnessRule.cs @@ -60,7 +60,7 @@ public void Test_IEquatable() Assert.IsFalse(expected == null); Assert.IsFalse(null == expected); - Assert.AreNotEqual(expected, null); + Assert.AreNotEqual(null, expected); Assert.IsFalse(expected.Equals(null)); } } diff --git a/tests/Neo.UnitTests/SmartContract/Native/UT_StdLib.cs b/tests/Neo.UnitTests/SmartContract/Native/UT_StdLib.cs index 8137c9f251..acbaae2db1 100644 --- a/tests/Neo.UnitTests/SmartContract/Native/UT_StdLib.cs +++ b/tests/Neo.UnitTests/SmartContract/Native/UT_StdLib.cs @@ -405,7 +405,7 @@ public void TestRuntime_Deserialize() Assert.AreEqual(VMState.HALT, engine.Execute()); Assert.HasCount(2, engine.ResultStack); - Assert.AreEqual(engine.ResultStack.Pop().GetInteger(), 100); + Assert.AreEqual(100, engine.ResultStack.Pop().GetInteger()); Assert.AreEqual("test", engine.ResultStack.Pop().GetString()); } diff --git a/tests/Neo.UnitTests/SmartContract/UT_JsonSerializer.cs b/tests/Neo.UnitTests/SmartContract/UT_JsonSerializer.cs index 2e2e98e4f0..30f28a6bfa 100644 --- a/tests/Neo.UnitTests/SmartContract/UT_JsonSerializer.cs +++ b/tests/Neo.UnitTests/SmartContract/UT_JsonSerializer.cs @@ -234,10 +234,10 @@ public void Deserialize_Map_Test() var map = (Map)items; Assert.IsTrue(map.TryGetValue("test1", out var value)); - Assert.AreEqual(value.GetInteger(), 123); + Assert.AreEqual(123, value.GetInteger()); Assert.IsTrue(map.TryGetValue("test2", out value)); - Assert.AreEqual(value.GetInteger(), 321); + Assert.AreEqual(321, value.GetInteger()); CollectionAssert.AreEqual(map.Values.Select(u => u.GetInteger()).ToArray(), new BigInteger[] { 123, 321 }); } @@ -256,7 +256,7 @@ public void Deserialize_Array_Bool_Str_Num() Assert.IsTrue(array[0].GetBoolean()); Assert.AreEqual("test", array[1].GetString()); - Assert.AreEqual(array[2].GetInteger(), 123); + Assert.AreEqual(123, array[2].GetInteger()); Assert.AreEqual(array[3].GetInteger(), BigInteger.Parse("90500000000000000000000000000")); } @@ -280,7 +280,7 @@ public void Deserialize_Array_OfArray() Assert.IsTrue(array[0].GetBoolean()); Assert.AreEqual("test1", array[1].GetString()); - Assert.AreEqual(array[2].GetInteger(), 123); + Assert.AreEqual(123, array[2].GetInteger()); array = (Array)items; array = (Array)array[1]; @@ -288,7 +288,7 @@ public void Deserialize_Array_OfArray() Assert.IsTrue(array[0].GetBoolean()); Assert.AreEqual("test2", array[1].GetString()); - Assert.AreEqual(array[2].GetInteger(), 321); + Assert.AreEqual(321, array[2].GetInteger()); } } } diff --git a/tests/Neo.VM.Tests/Converters/ScriptConverter.cs b/tests/Neo.VM.Tests/Converters/ScriptConverter.cs index 882225868e..450c1b4443 100644 --- a/tests/Neo.VM.Tests/Converters/ScriptConverter.cs +++ b/tests/Neo.VM.Tests/Converters/ScriptConverter.cs @@ -34,7 +34,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist { if (reader.Value is string str) { - Assert.IsTrue(str.StartsWith("0x"), $"'0x' prefix required for value: '{str}'"); + Assert.StartsWith("0x", str, $"'0x' prefix required for value: '{str}'"); return str.FromHexString(); } break; @@ -64,7 +64,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist { for (int x = 0; x < mul; x++) { - Assert.IsTrue(value.StartsWith("0x"), $"'0x' prefix required for value: '{value}'"); + Assert.StartsWith("0x", value, $"'0x' prefix required for value: '{value}'"); script.EmitRaw(value.FromHexString()); } } diff --git a/tests/Neo.VM.Tests/UT_EvaluationStack.cs b/tests/Neo.VM.Tests/UT_EvaluationStack.cs index 62eabbeb3f..a48e10592d 100644 --- a/tests/Neo.VM.Tests/UT_EvaluationStack.cs +++ b/tests/Neo.VM.Tests/UT_EvaluationStack.cs @@ -49,7 +49,7 @@ public void TestClear() { var stack = CreateOrderedStack(3); stack.Clear(); - Assert.AreEqual(0, stack.Count); + Assert.IsEmpty(stack); } [TestMethod] @@ -63,14 +63,14 @@ public void TestCopyTo() stack.CopyTo(copy, 0); - Assert.AreEqual(3, stack.Count); - Assert.AreEqual(0, copy.Count); + Assert.HasCount(3, stack); + Assert.IsEmpty(copy); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray()); stack.CopyTo(copy, -1); - Assert.AreEqual(3, stack.Count); - Assert.AreEqual(3, copy.Count); + Assert.HasCount(3, stack); + Assert.HasCount(3, copy); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray()); // Test IEnumerable @@ -82,8 +82,8 @@ public void TestCopyTo() copy.CopyTo(stack, 2); - Assert.AreEqual(5, stack.Count); - Assert.AreEqual(3, copy.Count); + Assert.HasCount(5, stack); + Assert.HasCount(3, copy); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3, 2, 3 }, stack.ToArray()); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, copy.ToArray()); @@ -97,14 +97,14 @@ public void TestMoveTo() stack.MoveTo(other, 0); - Assert.AreEqual(3, stack.Count); - Assert.AreEqual(0, other.Count); + Assert.HasCount(3, stack); + Assert.IsEmpty(other); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray()); stack.MoveTo(other, -1); - Assert.AreEqual(0, stack.Count); - Assert.AreEqual(3, other.Count); + Assert.IsEmpty(stack); + Assert.HasCount(3, other); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, other.ToArray()); // Test IEnumerable @@ -116,8 +116,8 @@ public void TestMoveTo() other.MoveTo(stack, 2); - Assert.AreEqual(2, stack.Count); - Assert.AreEqual(1, other.Count); + Assert.HasCount(2, stack); + Assert.HasCount(1, other); CollectionAssert.AreEqual(new Integer[] { 2, 3 }, stack.ToArray()); CollectionAssert.AreEqual(new Integer[] { 1 }, other.ToArray()); @@ -134,7 +134,7 @@ public void TestInsertPeek() Assert.ThrowsExactly(() => stack.Insert(4, 2)); - Assert.AreEqual(3, stack.Count); + Assert.HasCount(3, stack); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, stack.ToArray()); Assert.AreEqual(3, stack.Peek(0)); diff --git a/tests/Neo.VM.Tests/UT_ExecutionContext.cs b/tests/Neo.VM.Tests/UT_ExecutionContext.cs index 93df2d81e5..fa9289da47 100644 --- a/tests/Neo.VM.Tests/UT_ExecutionContext.cs +++ b/tests/Neo.VM.Tests/UT_ExecutionContext.cs @@ -42,7 +42,7 @@ public void TestStateTest() // Test new var stack = context.GetState>(); - Assert.AreEqual(0, stack.Count); + Assert.IsEmpty(stack); stack.Push(100); stack = context.GetState>(); Assert.AreEqual(100, stack.Pop()); @@ -52,7 +52,7 @@ public void TestStateTest() var copy = context.Clone(); var copyStack = copy.GetState>(); - Assert.AreEqual(1, copyStack.Count); + Assert.HasCount(1, copyStack); copyStack.Push(200); copyStack = context.GetState>(); Assert.AreEqual(200, copyStack.Pop()); diff --git a/tests/Neo.VM.Tests/UT_Slot.cs b/tests/Neo.VM.Tests/UT_Slot.cs index 41029bb826..23e1b443e0 100644 --- a/tests/Neo.VM.Tests/UT_Slot.cs +++ b/tests/Neo.VM.Tests/UT_Slot.cs @@ -77,7 +77,7 @@ public void TestEnumerable() CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, GetEnumerable(enumerator).Cast().ToArray()); - Assert.AreEqual(3, slot.Count); + Assert.HasCount(3, slot); CollectionAssert.AreEqual(new Integer[] { 1, 2, 3 }, slot.ToArray()); @@ -94,7 +94,7 @@ public void TestEnumerable() CollectionAssert.AreEqual(Array.Empty(), GetEnumerable(enumerator).Cast().ToArray()); - Assert.AreEqual(0, slot.Count); + Assert.IsEmpty(slot); CollectionAssert.AreEqual(Array.Empty(), slot.ToArray()); }