Beispiel #1
0
    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);
        }
            );
    }