예제 #1
0
 public override bool OnMessage(IMessageSinkMessage message)
 {
     return(DoVisit <ITestProgressMessage>(message, m => Visit(m)) &&
            DoVisit <ITestSummaryStatisticsMessage>(message, m => Visit(m)) &&
            DoVisit <ITestStatisticsMessage>(message, m => Visit(m)) &&
            base.OnMessage(message));
 }
예제 #2
0
        /// <inheritdoc/>
        public override bool OnMessage(IMessageSinkMessage message)
        {
            var result = base.OnMessage(message);

            result = innerMessageSink.OnMessage(message) || result;
            return(result);
        }
예제 #3
0
        protected override bool OnMessage(IMessageSinkMessage message)
        {
            var testFailed = message as ITestFailed;
            if (testFailed != null)
            {
                OnTestFailed(testFailed);
            }

            var testPassed = message as ITestPassed;
            if (testPassed != null)
            {
                OnTestPassed(testPassed);
            }

            var testSkipped = message as ITestSkipped;
            if (testSkipped != null)
            {
                OnTestSkipped(testSkipped);
            }

            if (message is ITestAssemblyFinished)
            {
                Finished.Set();
            }

            return ShouldContinue;
        }
    public DelegatingExecutionSummarySinkTests()
    {
        innerSink = Substitute.For <IMessageSinkWithTypes>();
        innerSink.OnMessageWithTypes(null, null).ReturnsForAnyArgs(true);

        testMessage = Substitute.For <IMessageSinkMessage>();
    }
예제 #5
0
 private void OnMessageHandled(IMessageSinkMessage message)
 {
     if (message is ITestCollectionFinished testCollectionFinished)
     {
         TestCollectionFinished?.Invoke(this, testCollectionFinished.TestCollection);
     }
 }
예제 #6
0
    public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet <string> messageTypes)
    {
        var result = _innerSink.OnMessageWithTypes(message, messageTypes);

        message.Dispatch <ITestAssemblyFinished>(messageTypes, args => _completionCallback(ExecutionSummary));
        return(result);
    }
예제 #7
0
 /// <inheritdoc/>
 public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet <string> messageTypes)
 => message.Dispatch(messageTypes, AfterTestFinishedEvent) &&
 message.Dispatch(messageTypes, AfterTestStartingEvent) &&
 message.Dispatch(messageTypes, BeforeTestFinishedEvent) &&
 message.Dispatch(messageTypes, BeforeTestStartingEvent) &&
 message.Dispatch(messageTypes, TestAssemblyCleanupFailureEvent) &&
 message.Dispatch(messageTypes, TestAssemblyFinishedEvent) &&
 message.Dispatch(messageTypes, TestAssemblyStartingEvent) &&
 message.Dispatch(messageTypes, TestCaseCleanupFailureEvent) &&
 message.Dispatch(messageTypes, TestCaseFinishedEvent) &&
 message.Dispatch(messageTypes, TestCaseStartingEvent) &&
 message.Dispatch(messageTypes, TestClassCleanupFailureEvent) &&
 message.Dispatch(messageTypes, TestClassConstructionFinishedEvent) &&
 message.Dispatch(messageTypes, TestClassConstructionStartingEvent) &&
 message.Dispatch(messageTypes, TestClassDisposeFinishedEvent) &&
 message.Dispatch(messageTypes, TestClassDisposeStartingEvent) &&
 message.Dispatch(messageTypes, TestClassFinishedEvent) &&
 message.Dispatch(messageTypes, TestClassStartingEvent) &&
 message.Dispatch(messageTypes, TestCleanupFailureEvent) &&
 message.Dispatch(messageTypes, TestCollectionCleanupFailureEvent) &&
 message.Dispatch(messageTypes, TestCollectionFinishedEvent) &&
 message.Dispatch(messageTypes, TestCollectionStartingEvent) &&
 message.Dispatch(messageTypes, TestFailedEvent) &&
 message.Dispatch(messageTypes, TestFinishedEvent) &&
 message.Dispatch(messageTypes, TestMethodCleanupFailureEvent) &&
 message.Dispatch(messageTypes, TestMethodFinishedEvent) &&
 message.Dispatch(messageTypes, TestMethodStartingEvent) &&
 message.Dispatch(messageTypes, TestOutputEvent) &&
 message.Dispatch(messageTypes, TestPassedEvent) &&
 message.Dispatch(messageTypes, TestSkippedEvent) &&
 message.Dispatch(messageTypes, TestStartingEvent);
예제 #8
0
        // making sure all texts are Xml valid
        public static IMessageSinkMessage SanitizeXml(this IMessageSinkMessage message)
        {
            var failed = message as TestFailed;

            if (failed != null)
            {
                return(new TestFailed(failed.Test,
                                      failed.ExecutionTime,
                                      XmlUtility.Sanitize(failed.Output),
                                      failed.ExceptionTypes,
                                      failed.Messages == null ? null : failed.Messages.Select(m => XmlUtility.Sanitize(m)).ToArray(),
                                      failed.StackTraces,
                                      failed.ExceptionParentIndices));
            }

            var skipped = message as TestSkipped;

            if (skipped != null)
            {
                skipped = new TestSkipped(skipped.Test, XmlUtility.Sanitize(skipped.Reason));
                skipped.SetOutput(XmlUtility.Sanitize(skipped.Output));
                return(skipped);
            }

            var passed = message as TestPassed;

            if (passed != null)
            {
                return(new TestPassed(passed.Test, passed.ExecutionTime, XmlUtility.Sanitize(passed.Output)));
            }

            return(message);
        }
        HashSet<string> GetMessageTypes(IMessageSinkMessage message)
        {
            var messageType = message.GetType();
            HashSet<string> result;

            cacheLock.TryEnterReadLock(-1);

            try
            {
                interfaceCache.TryGetValue(messageType, out result);
            }
            finally
            {
                cacheLock.ExitReadLock();
            }

            if (result == null)
            {
                cacheLock.TryEnterWriteLock(-1);

                try
                {
                    result = new HashSet<string>(messageType.GetInterfaces().Select(x => x.FullName));
                    interfaceCache[messageType] = result;
                }
                finally
                {
                    cacheLock.ExitWriteLock();
                }
            }

            return result;
        }
예제 #10
0
        public bool OnMessage(IMessageSinkMessage message)
        {
            var testCaseDiscoveryMessage = message as ITestCaseDiscoveryMessage;

            if (testCaseDiscoveryMessage != null)
            {
                //TODO: Improve this
                if (Regex.IsMatch(testCaseDiscoveryMessage.TestClass.Class.Name, @"\d+$"))
                {
                    var             details = GetTestDetails(testCaseDiscoveryMessage);
                    List <NodeTest> tests;
                    if (Tests.TryGetValue(details.TestName, out tests))
                    {
                        tests.Add(details);
                    }
                    else
                    {
                        tests = new List <NodeTest>(new[] { details });
                    }
                    Tests[details.TestName] = tests;
                }
            }

            if (message is IDiscoveryCompleteMessage)
            {
                Finished.Set();
            }

            return(true);
        }
예제 #11
0
        protected override bool OnMessage(IMessageSinkMessage message)
        {
            var testFailed = message as ITestFailed;

            if (testFailed != null)
            {
                OnTestFailed(testFailed);
            }

            var testPassed = message as ITestPassed;

            if (testPassed != null)
            {
                OnTestPassed(testPassed);
            }

            var testSkipped = message as ITestSkipped;

            if (testSkipped != null)
            {
                OnTestSkipped(testSkipped);
            }

            if (message is ITestAssemblyFinished)
            {
                Finished.Set();
            }

            return(ShouldContinue);
        }
예제 #12
0
            public bool QueueMessage(IMessageSinkMessage message)
            {
                _listener.Flush();
                var output = GetActualOutput();

                // Inject Trace.WriteLine calls that might have happened as the test output.
                if (message is ITestResultMessage && !string.IsNullOrEmpty(output))
                {
                    var passed = message as ITestPassed;
                    var failed = message as ITestFailed;

                    if (passed != null)
                    {
                        _buffer.GetStringBuilder().Clear();
                        return(_innerBus.QueueMessage(new TestPassed(passed.Test, passed.ExecutionTime,
                                                                     string.IsNullOrEmpty(passed.Output) ? output : passed.Output + Environment.NewLine + output)));
                    }

                    if (failed != null)
                    {
                        _buffer.GetStringBuilder().Clear();
                        return(_innerBus.QueueMessage(new TestFailed(failed.Test, failed.ExecutionTime,
                                                                     string.IsNullOrEmpty(failed.Output) ? output : failed.Output + Environment.NewLine + output,
                                                                     failed.ExceptionTypes, failed.Messages, failed.StackTraces, failed.ExceptionParentIndices)));
                    }
                }

                if (message is ITestMethodMessage)
                {
                    return(_innerBus.QueueMessage(message));
                }

                return(true);
            }
예제 #13
0
        public void AddsErrorMessagesToXml(IMessageSinkMessage errorMessage, string messageType, string name)
        {
            var assemblyFinished = Substitute.For <ITestAssemblyFinished>();
            var assemblyElement  = new XElement("assembly");
            var visitor          = new XmlTestExecutionVisitor(assemblyElement, () => false);

            visitor.OnMessage(errorMessage);
            visitor.OnMessage(assemblyFinished);

            var errorElement = Assert.Single(assemblyElement.Element("errors").Elements());

            Assert.Equal(messageType, errorElement.Attribute("type").Value);

            if (name == null)
            {
                Assert.Null(errorElement.Attribute("name"));
            }
            else
            {
                Assert.Equal(name, errorElement.Attribute("name").Value);
            }

            var failureElement = Assert.Single(errorElement.Elements("failure"));

            Assert.Equal("ExceptionType", failureElement.Attribute("exception-type").Value);
            Assert.Equal("ExceptionType : This is my message \\t\\r\\n", failureElement.Elements("message").Single().Value);
            Assert.Equal("Line 1\r\nLine 2\r\nLine 3", failureElement.Elements("stack-trace").Single().Value);
        }
예제 #14
0
            public bool QueueMessage(IMessageSinkMessage message)
            {
                var result = message as TestResultMessage;

                if (result != null && String.IsNullOrEmpty(result.Output))
                {
                    result.SetOutput(TestTracer.GetTraceString());
                }

                lock (_messages)
                {
                    var testFailed = result as TestFailed;
                    if (testFailed != null && testFailed.ExceptionTypes.LastOrDefault() == typeof(KuduXunitTestSkippedException).FullName)
                    {
                        TestSkipped = true;
                        message     = new TestSkipped(result.Test, testFailed.Messages.LastOrDefault() ?? "unknown");
                    }

                    _messages.Add(message);
                }

                // No way to ask the inner bus if they want to cancel without sending them the message, so
                // we just go ahead and continue always.
                return(true);
            }
예제 #15
0
        public bool OnMessage(IMessageSinkMessage message)
        {
            if (showDiagnostics && message is IDiagnosticMessage diagnosticMessage)
            {
                lock (consoleLock)
                {
                    if (!noColor)
                    {
                        ConsoleHelper.SetForegroundColor(displayColor);
                    }

                    if (assemblyDisplayName != null)
                    {
                        Console.WriteLine($"   {assemblyDisplayName}: {diagnosticMessage.Message}");
                    }
                    else
                    {
                        Console.WriteLine($"   {diagnosticMessage.Message}");
                    }

                    if (!noColor)
                    {
                        ConsoleHelper.ResetColor();
                    }
                }
            }

            return(true);
        }
        /// <inheritdoc/>
        public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet <string> messageTypes)
        {
            var result = executionSink.OnMessageWithTypes(message, messageTypes);

            result = innerSink.OnMessageWithTypes(message, messageTypes) && result;
            return(result);
        }
    public DelegatingExecutionSummarySinkTests()
    {
        innerSink = Substitute.For<IMessageSinkWithTypes>();
        innerSink.OnMessageWithTypes(null, null).ReturnsForAnyArgs(true);

        testMessage = Substitute.For<IMessageSinkMessage>();
    }
예제 #18
0
        public bool OnMessage(IMessageSinkMessage message)
        {
            var testCaseDiscoveryMessage = message as ITestCaseDiscoveryMessage;
            if (testCaseDiscoveryMessage != null)
            {
                //TODO: Improve this
                if (Regex.IsMatch(testCaseDiscoveryMessage.TestClass.Class.Name, @"\d+$"))
                {
                    var details = GetTestDetails(testCaseDiscoveryMessage);
                    List<NodeTest> tests;
                    if (Tests.TryGetValue(details.TestName, out tests))
                    {
                        tests.Add(details);
                    }
                    else
                    {
                        tests = new List<NodeTest>(new[] {details});
                    }
                    Tests[details.TestName] = tests;
                }
            }

            if (message is IDiscoveryCompleteMessage)
                Finished.Set();

            return true;
        }
예제 #19
0
 /// <inheritdoc/>
 public virtual bool OnMessage(IMessageSinkMessage message)
 {
     return
         (DoVisit <IAfterTestFinished>(message, Visit) &&
          DoVisit <IAfterTestStarting>(message, Visit) &&
          DoVisit <IBeforeTestFinished>(message, Visit) &&
          DoVisit <IBeforeTestStarting>(message, Visit) &&
          DoVisit <IDiscoveryCompleteMessage>(message, Visit) &&
          DoVisit <IErrorMessage>(message, Visit) &&
          DoVisit <ITestAssemblyFinished>(message, Visit) &&
          DoVisit <ITestAssemblyStarting>(message, Visit) &&
          DoVisit <ITestCaseDiscoveryMessage>(message, Visit) &&
          DoVisit <ITestCaseFinished>(message, Visit) &&
          DoVisit <ITestCaseStarting>(message, Visit) &&
          DoVisit <ITestClassConstructionFinished>(message, Visit) &&
          DoVisit <ITestClassConstructionStarting>(message, Visit) &&
          DoVisit <ITestClassDisposeFinished>(message, Visit) &&
          DoVisit <ITestClassDisposeStarting>(message, Visit) &&
          DoVisit <ITestClassFinished>(message, Visit) &&
          DoVisit <ITestClassStarting>(message, Visit) &&
          DoVisit <ITestCollectionFinished>(message, Visit) &&
          DoVisit <ITestCollectionStarting>(message, Visit) &&
          DoVisit <ITestFailed>(message, Visit) &&
          DoVisit <ITestFinished>(message, Visit) &&
          DoVisit <ITestMethodFinished>(message, Visit) &&
          DoVisit <ITestMethodStarting>(message, Visit) &&
          DoVisit <ITestPassed>(message, Visit) &&
          DoVisit <ITestSkipped>(message, Visit) &&
          DoVisit <ITestStarting>(message, Visit));
 }
예제 #20
0
        /// <inheritdoc/>
        public virtual bool QueueMessage(IMessageSinkMessage message)
        {
            if (callback != null)
                callback(message);

            return innerMessageBus.QueueMessage(message);
        }
예제 #21
0
        HashSet <string> GetMessageTypes(IMessageSinkMessage message)
        {
            var messageType = message.GetType();
            HashSet <string> result;

            cacheLock.TryEnterReadLock(-1);

            try
            {
                interfaceCache.TryGetValue(messageType, out result);
            }
            finally
            {
                cacheLock.ExitReadLock();
            }

            if (result == null)
            {
                cacheLock.TryEnterWriteLock(-1);

                try
                {
                    result = new HashSet <string>(messageType.GetInterfaces().Select(x => x.FullName));
                    interfaceCache[messageType] = result;
                }
                finally
                {
                    cacheLock.ExitWriteLock();
                }
            }

            return(result);
        }
예제 #22
0
            public bool QueueMessage(IMessageSinkMessage message)
            {
                if (this.invalidConfigurationExpected)
                {
                    if (message is TestFailed)
                    {
                        // TODO: allow for derived types of allowed exceptions
                        var failedMessage = (TestFailed)message;
                        if (failedMessage.ExceptionTypes.Length > 0 &&
                            AllowedFailureExceptionTypes.Any(t => t.FullName == failedMessage.ExceptionTypes[0]))
                        {
                            message = new TestPassed(failedMessage.Test, failedMessage.ExecutionTime, failedMessage.Output);
                            this.InvertedFailures++;
                        }
                    }
                    else if (message is TestPassed)
                    {
                        var passedMessage = (TestPassed)message;
                        message = new TestFailed(passedMessage.Test, passedMessage.ExecutionTime, passedMessage.Output, new AssertActualExpectedException(false, true, "Expected invalid configuration but no exception thrown."));
                        this.InvertedSuccesses++;
                    }
                }

                return(this.inner.QueueMessage(message));
            }
예제 #23
0
 /// <summary>
 /// Reports the presence of a message on the message bus with an optional list of message types.
 /// This method should never throw exceptions.
 /// </summary>
 /// <param name="message">The message from the message bus.</param>
 /// <param name="messageTypes">The list of message types, or <see language="null"/>.</param>
 /// <returns>Return <see language="true"/> to continue running tests, or <see language="false"/> to stop.</returns>
 public bool OnMessageWithTypes(
     IMessageSinkMessage message
     , HashSet <string> messageTypes
     )
 {
     throw new NotImplementedException( );
 }
예제 #24
0
        static HashSet <string>?GetImplementedInterfaces(IMessageSinkMessage message)
        {
            Guard.ArgumentNotNull(nameof(message), message);

            if (message is IMessageSinkMessageWithTypes messageWithTypes)
            {
                return(messageWithTypes.InterfaceTypes);
            }

#if NETFRAMEWORK
            // Can't get the list of interfaces across the remoting boundary
            if (System.Runtime.Remoting.RemotingServices.IsTransparentProxy(message))
            {
                return(null);
            }
#endif

            var result = new HashSet <string>(message.GetType().GetInterfaces().Select(i => i.FullName !), StringComparer.OrdinalIgnoreCase);

            // TODO: Hack this to include the concrete type, while we transition from v2 to v3 so that we
            // can support our new message types which aren't interfaces.
            result.Add(message.GetType().FullName !);

            return(result);
        }
예제 #25
0
        /// <inheritdoc />
        public bool QueueMessage(IMessageSinkMessage message)
        {
            if (message is TestFailed failed)
            {
                var    outerException = failed.ExceptionTypes.FirstOrDefault();
                bool   skipTest       = false;
                string?skipReason     = null;
                switch (outerException)
                {
                case string _ when this.ShouldSkipException(outerException):
                    skipTest = true;

                    skipReason = failed.Messages?.FirstOrDefault();
                    break;

                case "Xunit.Sdk.ThrowsException" when failed.ExceptionTypes.Length > 1:
                    outerException = failed.ExceptionTypes[1];
                    if (this.ShouldSkipException(outerException))
                    {
                        skipTest   = true;
                        skipReason = failed.Messages?.Length > 1 ? failed.Messages[1] : null;
                    }

                    break;
                }

                if (skipTest)
                {
                    this.SkippedCount++;
                    return(this.inner.QueueMessage(new TestSkipped(failed.Test, skipReason)));
                }
            }

            return(this.inner.QueueMessage(message));
        }
예제 #26
0
        /// <inheritdoc/>
        public virtual bool OnMessage(IMessageSinkMessage message)
        {
            if (callback != null)
                callback(message);

            return innerSink.OnMessage(message);
        }
 private void OnMessage(IMessageSinkMessage obj)
 {
     var testCaseFinishedMessage = obj as ITestCaseFinished;
     if (testCaseFinishedMessage != null)
     {
         _receivers.ForEach(receiver => receiver.OnTestCaseFinished(testCaseFinishedMessage));
     }
 }
예제 #28
0
        public bool QueueMessage(IMessageSinkMessage message)
        {
            _messageQueue.Enqueue(message);

            // Returns if execution should continue. Since we are intercepting the message, we
            //  have no way of checking this so always continue...
            return(true);
        }
		public bool QueueMessage (IMessageSinkMessage message)
		{
			var result = innerBus.QueueMessage (message);

			callbacks.ForEach (callback => callback (message));

			return result;
		}
예제 #30
0
 public bool OnMessage(IMessageSinkMessage message)
 {
     if (message is IDiagnosticMessage diagnosticMessage)
     {
         return(true);
     }
     return(false);
 }
예제 #31
0
 public bool QueueMessage(IMessageSinkMessage message)
 {
     return(RunInjections(_testCaseStartingInjections, message) &&
            RunInjections(_testStartingInjections, message) &&
            RunInjections(_testFinishedInjections, message) &&
            RunInjections(_testCaseFinishedInjections, message) &&
            _innerMessageBus.QueueMessage(message));
 }
        /// <inheritdoc />
        public bool QueueMessage(IMessageSinkMessage message)
        {
            lock (_messages)
                _messages.Add(message);

            // No way to ask the inner bus if they want to cancel without sending them the message, so
            // we just go ahead and continue always.
            return(true);
        }
예제 #33
0
        /// <inheritdoc/>
        public virtual bool OnMessage(IMessageSinkMessage message)
        {
            if (callback != null)
            {
                callback(message);
            }

            return(innerSink.OnMessage(message));
        }
예제 #34
0
        public bool QueueMessage(IMessageSinkMessage message)
        {
            lock (messages)
                messages.Add(message);

            // No way to ask the inner bus if they want to cancel without sending them the message, so
            // we just go ahead and continue always.
            return true;
        }
예제 #35
0
        public bool QueueMessage(IMessageSinkMessage message)
        {
            lock (this.delayedMessages)
            {
                this.delayedMessages.Add(message);
            }

            return(true);
        }
예제 #36
0
        /// <summary/>
        public bool QueueMessage(IMessageSinkMessage message)
        {
            if (shutdownRequested)
                throw new ObjectDisposedException("MessageBus");

            reporterQueue.Enqueue(message);
            reporterWorkEvent.Set();
            return continueRunning;
        }
예제 #37
0
        public bool OnMessage(IMessageSinkMessage message)
        {
            if (message is IDiagnosticMessage diagnosticMessage)
            {
                Console.WriteLine(diagnosticMessage.Message);
            }

            return(true);
        }
        /// <summary>
        /// Forwards the message on to all subscribed visitors
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public override bool OnMessage(IMessageSinkMessage message)
        {
            foreach (var visitor in _visitors)
            {
                visitor.OnMessage(message);
            }

            return(base.OnMessage(message));
        }
예제 #39
0
        bool IMessageSinkWithTypes.OnMessageWithTypes(IMessageSinkMessage message, HashSet <string> messageTypes)
        {
            DispatchMessage <ITestCaseDiscoveryMessage>(message, messageTypes, testDiscovered =>
                                                        testCasesToRun.Add(testDiscovered.TestCase));
            DispatchMessage <IDiscoveryCompleteMessage>(message, messageTypes, discoveryComplete => discoveryCompleteEvent.Set());
            DispatchMessage <ITestAssemblyFinished>(message, messageTypes, assemblyFinished => executionCompleteEvent.Set());

            return(true);
        }
 public static string GetIdentifier(IMessageSinkMessage message)
 {
     return GetIdentifier(message as ITestMessage)
            ?? GetIdentifier(message as ITestCaseMessage)
            ?? GetIdentifier(message as ITestMethodMessage)
            ?? GetIdentifier(message as ITestClassMessage)
            ?? GetIdentifier(message as ITestCollectionMessage)
            ?? GetIdentifier(message as ITestAssemblyMessage)
            ?? "Unknown message";
 }
예제 #41
0
        public bool QueueMessage(IMessageSinkMessage message)
        {
            var result = message as TestResultMessage;
            if (result != null && String.IsNullOrEmpty(result.Output))
            {
                result.SetOutput(TestTracer.GetTraceString());
            }

            return _innerBus.QueueMessage(message.SanitizeXml());
        }
        /// <inheritdoc/>
        public bool OnMessage(IMessageSinkMessage message)
        {
            var discoveryMessage = message as ITestCaseDiscoveryMessage;
            if (discoveryMessage != null)
                TestCases.Add(discoveryMessage.TestCase);

            if (message is IDiscoveryCompleteMessage)
                Finished.Set();

            return true;
        }
        public void Dispose() { }    // Assume the thing we're wrapping gets disposed elsewhere

        /// <summary>
        /// Returns the implemented interface types, if known.
        /// </summary>
        /// <param name="message">The message interfaces to retrieve.</param>
        /// <returns>The hash set of interfaces, if known; <c>null</c>, otherwise.</returns>
        public static HashSet<string> GetImplementedInterfaces(IMessageSinkMessage message)
        {
            var messageWithTypes = message as IMessageSinkMessageWithTypes;
            if (messageWithTypes != null)
                return messageWithTypes.InterfaceTypes;

#if !PLATFORM_DOTNET
            // Can't get the list of interfaces across the remoting boundary
            if (System.Runtime.Remoting.RemotingServices.IsTransparentProxy(message))
                return null;
#endif

            return new HashSet<string>(message.GetType().GetInterfaces().Select(i => i.FullName), StringComparer.OrdinalIgnoreCase);
        }
        /// <inheritdoc />
        public bool QueueMessage(IMessageSinkMessage message)
        {
            var failed = message as TestFailed;
            if (failed != null)
            {
                if (failed.ExceptionTypes.Length == 1 && Array.IndexOf(this.SkippingExceptionNames, failed.ExceptionTypes[0]) >= 0)
                {
                    this.SkippedCount++;
                    return this.inner.QueueMessage(new TestSkipped(failed.Test, failed.Messages[0]));
                }
            }

            return this.inner.QueueMessage(message);
        }
예제 #45
0
 public bool QueueMessage(IMessageSinkMessage message)
 {
     var testFailed = message as ITestFailed;
     if (testFailed != null)
     {
         var exceptionType = testFailed.ExceptionTypes.FirstOrDefault();
         if (exceptionType == typeof(SkipTestException).FullName)
         {
             DynamicallySkippedTestCount++;
             return _innerBus.QueueMessage(new TestSkipped(testFailed.Test, testFailed.Messages.FirstOrDefault()));
         }
     }
     return _innerBus.QueueMessage(message);
 }
        /// <inheritdoc />
        public bool QueueMessage(IMessageSinkMessage message)
        {
            var failed = message as TestFailed;
            if (failed != null)
            {
                var outerException = failed.ExceptionTypes.FirstOrDefault();
                if (outerException != null && Array.IndexOf(this.SkippingExceptionNames, outerException) >= 0)
                {
                    this.SkippedCount++;
                    return this.inner.QueueMessage(new TestSkipped(failed.Test, failed.Messages[0]));
                }
            }

            return this.inner.QueueMessage(message);
        }
        protected override bool OnMessage(IMessageSinkMessage message)
        {
            var discoveryMessage = message as ITestCaseDiscoveryMessage;
            if (discoveryMessage != null)
            {
                OnTestDiscovered(discoveryMessage);
            }

            if (message is IDiscoveryCompleteMessage)
            {
                Finished.Set();
            }

            return ShouldContinue;
        }
        /// <inheritdoc/>
        public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet<string> messageTypes)
        {
            var result = innerSink.OnMessageWithTypes(message, messageTypes);

            return message.Dispatch<IErrorMessage>(messageTypes, args => Interlocked.Increment(ref errors))
                && message.Dispatch<ITestAssemblyCleanupFailure>(messageTypes, args => Interlocked.Increment(ref errors))
                && message.Dispatch<ITestAssemblyFinished>(messageTypes, HandleTestAssemblyFinished)
                && message.Dispatch<ITestCaseCleanupFailure>(messageTypes, args => Interlocked.Increment(ref errors))
                && message.Dispatch<ITestClassCleanupFailure>(messageTypes, args => Interlocked.Increment(ref errors))
                && message.Dispatch<ITestCleanupFailure>(messageTypes, args => Interlocked.Increment(ref errors))
                && message.Dispatch<ITestCollectionCleanupFailure>(messageTypes, args => Interlocked.Increment(ref errors))
                && message.Dispatch<ITestMethodCleanupFailure>(messageTypes, args => Interlocked.Increment(ref errors))
                && result
                && !cancelThunk();
        }
예제 #49
0
            public bool OnMessage(IMessageSinkMessage message)
            {
                var discoveryMessage = message as ITestCaseDiscoveryMessage;
                if (discoveryMessage != null)
                {
                    OnDiscoveryMessage(discoveryMessage);
                }

                if (message is IDiscoveryCompleteMessage)
                {
                    Finished.Set();
                }

                return _writer.IsConnected;
            }
예제 #50
0
        public bool QueueMessage(IMessageSinkMessage message)
        {
            var testPassedMessage = message as ITestPassed;

            if (testPassedMessage != null)
            {
                var output = string.Format(
                    CultureInfo.InvariantCulture,
                    "Execution time: {0}ms",
                    testPassedMessage.ExecutionTime * 1000);

                message = new TestPassed(testPassedMessage.Test, testPassedMessage.ExecutionTime, output);
            }

            return this.inner.QueueMessage(message);
        }
        public bool QueueMessage(IMessageSinkMessage message)
        {
            var testFailed = message as ITestFailed;
            if (testFailed != null)
            {
                var exceptionType = testFailed.ExceptionTypes.FirstOrDefault();
                if (exceptionType == typeof(SkipStepException).FullName || exceptionType == typeof(NotImplementedException).FullName || exceptionType == typeof(SkipScenarioException).FullName)
                {
                    DynamicallySkippedTestCount++;
                    return innerBus.QueueMessage(new TestSkipped(testFailed.Test, testFailed.Messages.FirstOrDefault()));
                }
            }

            // Nothing we care about, send it on its way
            return innerBus.QueueMessage(message);
        }
예제 #52
0
        public bool OnMessage(IMessageSinkMessage message)
        {
            var resultMessage = message as ITestResultMessage;
            if (resultMessage != null)
            {
                _logger.Tell(resultMessage.Output);
                Console.WriteLine(resultMessage.Output);
            }
            var testPassed = message as ITestPassed;
            if (testPassed != null)
            {
                //the MultiNodeTestRunner uses 1-based indexing, which is why we have to add 1 to the index.
                var specPass = new SpecPass(_nodeIndex + 1, testPassed.TestCase.DisplayName);
                _logger.Tell(specPass.ToString());
                Console.WriteLine(specPass.ToString()); //so the message also shows up in the individual per-node build log
                Passed = true;
                return true;
            }
            var testFailed = message as ITestFailed;
            if (testFailed != null)
            {
                //the MultiNodeTestRunner uses 1-based indexing, which is why we have to add 1 to the index.
                var specFail = new SpecFail(_nodeIndex + 1, testFailed.TestCase.DisplayName);
                foreach (var failedMessage in testFailed.Messages) specFail.FailureMessages.Add(failedMessage);
                foreach (var stackTrace in testFailed.StackTraces) specFail.FailureStackTraces.Add(stackTrace);
                foreach(var exceptionType in testFailed.ExceptionTypes) specFail.FailureExceptionTypes.Add(exceptionType);
                _logger.Tell(specFail.ToString());
                Console.WriteLine(specFail.ToString());
                return true;
            }
            var errorMessage = message as ErrorMessage;
            if (errorMessage != null)
            {
                var specFail = new SpecFail(_nodeIndex + 1, "ERRORED");
                foreach (var failedMessage in errorMessage.Messages) specFail.FailureMessages.Add(failedMessage);
                foreach (var stackTrace in errorMessage.StackTraces) specFail.FailureStackTraces.Add(stackTrace);
                foreach (var exceptionType in errorMessage.ExceptionTypes) specFail.FailureExceptionTypes.Add(exceptionType);
                _logger.Tell(specFail.ToString());
                Console.WriteLine(specFail.ToString());
            }
            if (message is ITestAssemblyFinished)
            {
                Finished.Set();
            }

            return true;
        }
        /// <inheritdoc/>
        public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet<string> messageTypes)
        {
            // Call the inner sink first, because we want to be able to depend on ExecutionSummary
            // being correctly filled out.
            var result = innerSink.OnMessageWithTypes(message, messageTypes);

            return message.Dispatch<IErrorMessage>(messageTypes, HandleErrorMessage)
                && message.Dispatch<ITestAssemblyCleanupFailure>(messageTypes, HandleTestAssemblyCleanupFailure)
                && message.Dispatch<ITestAssemblyFinished>(messageTypes, HandleTestAssemblyFinished)
                && message.Dispatch<ITestAssemblyStarting>(messageTypes, HandleTestAssemblyStarting)
                && message.Dispatch<ITestCaseCleanupFailure>(messageTypes, HandleTestCaseCleanupFailure)
                && message.Dispatch<ITestClassCleanupFailure>(messageTypes, HandleTestClassCleanupFailure)
                && message.Dispatch<ITestCleanupFailure>(messageTypes, HandleTestCleanupFailure)
                && message.Dispatch<ITestCollectionCleanupFailure>(messageTypes, HandleTestCollectionCleanupFailure)
                && message.Dispatch<ITestCollectionFinished>(messageTypes, HandleTestCollectionFinished)
                && message.Dispatch<ITestFailed>(messageTypes, HandleTestFailed)
                && message.Dispatch<ITestMethodCleanupFailure>(messageTypes, HandleTestMethodCleanupFailure)
                && message.Dispatch<ITestPassed>(messageTypes, HandleTestPassed)
                && message.Dispatch<ITestSkipped>(messageTypes, HandleTestSkipped)
                && result;
        }
        /// <inheritdoc/>
        public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet<string> messageTypes)
        {
            var testSkipped = message.Cast<ITestSkipped>(messageTypes);
            if (testSkipped != null)
            {
                skipCount++;
                var testFailed = new TestFailed(testSkipped.Test, 0M, "",
                                                new[] { "FAIL_SKIP" },
                                                new[] { testSkipped.Reason },
                                                new[] { "" },
                                                new[] { -1 });
                return innerSink.OnMessage(testFailed);
            }

            var testCollectionFinished = message.Cast<ITestCollectionFinished>(messageTypes);
            if (testCollectionFinished != null)
            {
                testCollectionFinished = new TestCollectionFinished(testCollectionFinished.TestCases,
                                                                    testCollectionFinished.TestCollection,
                                                                    testCollectionFinished.ExecutionTime,
                                                                    testCollectionFinished.TestsRun,
                                                                    testCollectionFinished.TestsFailed + testCollectionFinished.TestsSkipped,
                                                                    0);
                return innerSink.OnMessage(testCollectionFinished);
            }

            var assemblyFinished = message.Cast<ITestAssemblyFinished>(messageTypes);
            if (assemblyFinished != null)
            {
                assemblyFinished = new TestAssemblyFinished(assemblyFinished.TestCases,
                                                            assemblyFinished.TestAssembly,
                                                            assemblyFinished.ExecutionTime,
                                                            assemblyFinished.TestsRun,
                                                            assemblyFinished.TestsFailed + assemblyFinished.TestsSkipped,
                                                            0);
                return innerSink.OnMessage(assemblyFinished);
            }

            return innerSink.OnMessageWithTypes(message, messageTypes);
        }
 public bool OnMessage(IMessageSinkMessage message)
 {
     Console.WriteLine(message.ToString());
     return true;
 }
 /// <inheritdoc/>
 public override bool OnMessage(IMessageSinkMessage message)
 {
     var result = base.OnMessage(message);
     result = innerMessageSink.OnMessage(message) || result;
     return result;
 }
예제 #57
0
 /// <summary/>
 public bool OnMessage(IMessageSinkMessage message)
 {
     return InnerSink.OnMessage(message);
 }
예제 #58
0
 /// <inheritdoc/>
 public bool OnMessageWithTypes(IMessageSinkMessage message, HashSet<string> messageTypes)
     => true;
예제 #59
0
 /// <inheritdoc/>
 public bool OnMessage(IMessageSinkMessage message)
     => true;
예제 #60
0
 bool IMessageSink.OnMessage(IMessageSinkMessage message)
 {
     return OnMessage(message);
 }