public void CollectsTestCases() { var visitor = new TestDiscoverySink(); var testCase1 = new _TestCaseDiscovered(); var testCase2 = new _TestCaseDiscovered(); var testCase3 = new _TestCaseDiscovered(); visitor.OnMessage(testCase1); visitor.OnMessage(testCase2); visitor.OnMessage(testCase3); visitor.OnMessage(new _MessageSinkMessage()); // Ignored Assert.Collection( visitor.TestCases, msg => Assert.Same(testCase1, msg), msg => Assert.Same(testCase2, msg), msg => Assert.Same(testCase3, msg) ); }
_TestCaseDiscovered AdaptTestCaseDiscoveryMessage(ITestCaseDiscoveryMessage message) { var testCase = message.TestCase; // Clean up the cache lock (testUniqueIDsByTestCase) testUniqueIDsByTestCase.Remove(testCase); var testCollectionUniqueID = UniqueIDForTestCollection(assemblyUniqueID, message.TestCollection); var testClassUniqueID = UniqueIDForTestClass(testCollectionUniqueID, message.TestClass); var testMethodUniqueID = UniqueIDForTestMethod(testClassUniqueID, message.TestMethod); var testCaseUniqueID = testCase.UniqueID; string? @namespace = null; string? @class = null; var typeName = testCase.TestMethod?.TestClass?.Class.Name; if (typeName != null) { var namespaceIdx = typeName.LastIndexOf('.'); if (namespaceIdx < 0) { @class = typeName; } else { @namespace = typeName.Substring(0, namespaceIdx); @class = typeName.Substring(namespaceIdx + 1); var innerClassIdx = @class.LastIndexOf('+'); if (innerClassIdx >= 0) { @class = @class.Substring(innerClassIdx + 1); } } } var result = new _TestCaseDiscovered { AssemblyUniqueID = assemblyUniqueID, SkipReason = testCase.SkipReason, SourceFilePath = testCase.SourceInformation?.FileName, SourceLineNumber = testCase.SourceInformation?.LineNumber, TestCaseDisplayName = testCase.DisplayName, TestCaseUniqueID = testCaseUniqueID, TestCollectionUniqueID = testCollectionUniqueID, TestClass = @class, TestClassUniqueID = testClassUniqueID, TestClassWithNamespace = typeName, TestMethod = testCase.TestMethod?.Method.Name, TestMethodUniqueID = testMethodUniqueID, TestNamespace = @namespace, Traits = testCase.Traits }; if (discoverer != null) { result.Serialization = discoverer.Serialize(testCase); } return(result); }
public void CanRoundTripTraits() { var msg = new _TestCaseDiscovered { AssemblyUniqueID = "asm-id", Serialization = "serialized-value", TestCaseDisplayName = "test-case-display-name", TestCaseUniqueID = "test-case-id", TestCollectionUniqueID = "test-collection-id", Traits = new Dictionary <string, IReadOnlyList <string> > { { "foo", new List <string> { "bar", "baz" } }, { "abc", new List <string> { "123" } }, { "empty", new List <string>() }, }, }; // Validate serialization var serialized = msg.ToJson(); Assert.Equal( @"{" + @"""$type"":""_TestCaseDiscovered""," + @"""AssemblyUniqueID"":""asm-id""," + @"""Serialization"":""serialized-value""," + @"""TestCaseDisplayName"":""test-case-display-name""," + @"""TestCaseUniqueID"":""test-case-id""," + @"""TestCollectionUniqueID"":""test-collection-id""," + @"""Traits"":" + @"{" + @"""foo"":[""bar"",""baz""]," + @"""abc"":[""123""]," + @"""empty"":[]" + @"}" + @"}", Encoding.UTF8.GetString(serialized) ); // Validate deserialization var deserialized = _MessageSinkMessage.ParseJson(serialized); var deserializedDiscovered = Assert.IsType <_TestCaseDiscovered>(deserialized); Assert.Collection( deserializedDiscovered.Traits.OrderBy(kvp => kvp.Key), trait => { Assert.Equal("abc", trait.Key); Assert.Equal(new[] { "123" }, trait.Value); }, trait => { Assert.Equal("empty", trait.Key); Assert.Empty(trait.Value); }, trait => { Assert.Equal("foo", trait.Key); Assert.Equal(new[] { "bar", "baz" }, trait.Value); } ); }