コード例 #1
0
        public static void LogsTestNameWithExceptionAndStackTraceAndOutput()
        {
            var testFailed = Substitute.For <ITestFailed>();
            var test       = Mocks.Test(null, "???");

            testFailed.Test.Returns(test);
            testFailed.ExecutionTime.Returns(1.2345M);
            testFailed.Messages.Returns(new[] { "This is my message \t\r\n" });
            testFailed.StackTraces.Returns(new[] { "Line 1\r\nLine 2\r\nLine 3" });
            testFailed.ExceptionTypes.Returns(new[] { "ExceptionType" });
            testFailed.ExceptionParentIndices.Returns(new[] { -1 });
            testFailed.Output.Returns("This is\t\r\noutput");
            var formatter = Substitute.For <TeamCityDisplayNameFormatter>();

            formatter.DisplayName(test).Returns("This is my display name \t\r\n");

            var logger = SpyLogger.Create();

            using (var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId", formatter))
            {
                visitor.OnMessage(testFailed);

                Assert.Collection(logger.Messages,
                                  msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFailed name='This is my display name \t|r|n' details='ExceptionType : This is my message \t|r|n|r|nLine 1|r|nLine 2|r|nLine 3' flowId='myFlowId']", msg),
                                  msg => Assert.Equal("MESSAGE[High]: ##teamcity[testStdOut name='This is my display name \t|r|n' out='This is\t|r|noutput']", msg),
                                  msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFinished name='This is my display name \t|r|n' duration='1234' flowId='myFlowId']", msg)
                                  );
            }
        }
コード例 #2
0
        public static void LogsMessageWithStatitics()
        {
            var assembly         = Mocks.TestAssembly(@"C:\Assembly\File.dll");
            var assemblyStarting = Substitute.For <ITestAssemblyStarting>();

            assemblyStarting.TestAssembly.Returns(assembly);
            var assemblyFinished = Substitute.For <ITestAssemblyFinished>();

            assemblyFinished.TestAssembly.Returns(assembly);
            assemblyFinished.TestsRun.Returns(2112);
            assemblyFinished.TestsFailed.Returns(42);
            assemblyFinished.TestsSkipped.Returns(6);
            assemblyFinished.ExecutionTime.Returns(123.4567M);

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(assemblyStarting);
            visitor.OnMessage(assemblyFinished);

            Assert.Collection(logger.Messages,
                              message => Assert.Equal(message, "MESSAGE[High]:   Starting:    File"),
                              message => Assert.Equal(message, "MESSAGE[High]:   Finished:    File")
                              );
        }
コード例 #3
0
        public void NoOutputWhenNotInVerboseMode()
        {
            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testStarting);

            Assert.Empty(logger.Messages);
        }
コード例 #4
0
        public void OutputStartMessageWhenInVerboseMode()
        {
            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, true, null);

            visitor.OnMessage(testStarting);

            Assert.Single(logger.Messages, "MESSAGE[Normal]:     START: This is my display name \\t\\r\\n");
        }
コード例 #5
0
        public void AddsPassToLogWhenInVerboseMode()
        {
            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, true, null);

            visitor.OnMessage(testPassed);

            Assert.Single(logger.Messages, "MESSAGE[Normal]:     PASS:  This is my display name \\t\\r\\n");
        }
コード例 #6
0
        public void LogsTestName()
        {
            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testPassed);

            Assert.Single(logger.Messages, "MESSAGE[Normal]:     This is my display name \\t\\r\\n");
        }
コード例 #7
0
        public static void LogsMessage(IMessageSinkMessage message, string messageType)
        {
            var logger = SpyLogger.Create();

            using (var visitor = new TeamCityVisitor(logger, null, null))
            {
                visitor.OnMessage(message);

                var msg = Assert.Single(logger.Messages);
                Assert.Equal(String.Format("MESSAGE[High]: ##teamcity[message text='|[{0}|] ExceptionType: ExceptionType : This is my message \t|r|n' errorDetails='Line 1|r|nLine 2|r|nLine 3' status='ERROR']", messageType), msg);
            }
        }
コード例 #8
0
        public void LogsTestName()
        {
            var testStarting = Substitute.For <ITestStarting>();

            testStarting.TestDisplayName.Returns("This is my display name \t\r\n");

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId");

            visitor.OnMessage(testStarting);

            Assert.Single(logger.Messages, "MESSAGE[High]: ##teamcity[testStarted name='This is my display name \t|r|n' flowId='myFlowId']");
        }
コード例 #9
0
        public static void LogsMessage(IMessageSinkMessage message, string messageType)
        {
            var logger = SpyLogger.Create();

            using (var visitor = new StandardOutputVisitor(logger, null, false, null))
            {
                visitor.OnMessage(message);

                Assert.Collection(logger.Messages,
                                  msg => Assert.Equal(String.Format("ERROR: [{0}] ExceptionType : This is my message \\t\\r\\n", messageType), msg),
                                  msg => Assert.Equal("ERROR: Line 1\r\nLine 2\r\nLine 3", msg));
            }
        }
コード例 #10
0
        public void LogsMessage()
        {
            var collectionStarting = Substitute.For <ITestCollectionStarting>();

            collectionStarting.TestCollection.DisplayName.Returns("Display Name");

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId");

            visitor.OnMessage(collectionStarting);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal(@"MESSAGE[High]: ##teamcity[testSuiteStarted name='Display Name' flowId='myFlowId']", msg));
        }
コード例 #11
0
        public static void LogsTestNameAsWarning()
        {
            var testSkipped = Substitute.For <ITestSkipped>();

            testSkipped.TestDisplayName.Returns("This is my display name \t\r\n");
            testSkipped.Reason.Returns("This is my skip reason \t\r\n");

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testSkipped);

            Assert.Single(logger.Messages, "WARNING: This is my display name \\t\\r\\n: This is my skip reason \\t\\r\\n");
        }
コード例 #12
0
        public static void IncludesSourceLineNumberFromTopOfStack(IMessageSinkMessage message, string messageType)
        {
            ((IFailureInformation)message).StackTraces.Returns(new[] { @"   at FixtureAcceptanceTests.Constructors.TestClassMustHaveSinglePublicConstructor() in d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs:line 16" });

            var logger = SpyLogger.Create(includeSourceInformation: true);

            using (var visitor = new StandardOutputVisitor(logger, null, false, null))
            {
                visitor.OnMessage(message);

                Assert.Collection(logger.Messages,
                                  msg => Assert.Equal(String.Format(@"ERROR: [FILE d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs][LINE 16] [{0}] ExceptionType : This is my message \t\r\n", messageType), msg),
                                  msg => Assert.Equal(@"ERROR: [FILE d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs][LINE 16]    at FixtureAcceptanceTests.Constructors.TestClassMustHaveSinglePublicConstructor() in d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs:line 16", msg));
            }
        }
コード例 #13
0
        public static void IncludesSourceLineNumberOfFirstStackFrameWithSourceInformation(IMessageSinkMessage message, string messageType)
        {
            ((IFailureInformation)message).StackTraces.Returns(new[] { @"   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)" + Environment.NewLine
                                                                       + @"   at FixtureAcceptanceTests.ClassFixture.TestClassWithExtraArgumentToConstructorResultsInFailedTest() in d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs:line 76" });

            var logger = SpyLogger.Create(includeSourceInformation: true);

            using (var visitor = new StandardOutputVisitor(logger, null, false, null))
            {
                visitor.OnMessage(message);

                Assert.Collection(logger.Messages,
                                  msg => Assert.Equal(String.Format(@"ERROR: [FILE d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs][LINE 76] [{0}] ExceptionType : This is my message \t\r\n", messageType), msg),
                                  msg => Assert.Equal(String.Format(@"ERROR: [FILE d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs][LINE 76]    at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source){0}   at FixtureAcceptanceTests.ClassFixture.TestClassWithExtraArgumentToConstructorResultsInFailedTest() in d:\Dev\xunit\xunit\test\test.xunit.execution\Acceptance\FixtureAcceptanceTests.cs:line 76", Environment.NewLine), msg));
            }
        }
コード例 #14
0
        public void NullStackTraceDoesNotLogStackTrace()
        {
            var testFailed = Substitute.For <ITestFailed>();

            testFailed.TestDisplayName.Returns("1");
            testFailed.Message.Returns("2");
            testFailed.StackTrace.Returns((string)null);

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testFailed);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("ERROR: 1: 2", msg));
        }
コード例 #15
0
        public void LogsTestName()
        {
            var testPassed = Substitute.For <ITestPassed>();

            testPassed.TestDisplayName.Returns("This is my display name \t\r\n");
            testPassed.ExecutionTime.Returns(1.2345M);

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId");

            visitor.OnMessage(testPassed);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFinished name='This is my display name \t|r|n' duration='1234' flowId='myFlowId']", msg)
                              );
        }
コード例 #16
0
        public void LogsMessage()
        {
            var collectionFinished = Substitute.For <ITestCollectionFinished>();

            collectionFinished.TestsRun.Returns(2112);
            collectionFinished.TestsFailed.Returns(42);
            collectionFinished.TestsSkipped.Returns(6);
            collectionFinished.ExecutionTime.Returns(123.4567M);
            collectionFinished.TestCollection.DisplayName.Returns("Display Name");

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId");

            visitor.OnMessage(collectionFinished);

            Assert.Single(logger.Messages, @"MESSAGE[High]: ##teamcity[testSuiteFinished name='Display Name' flowId='myFlowId']");
        }
コード例 #17
0
        public void LogsMessage()
        {
            var errorMessage = Substitute.For <IErrorMessage>();

            errorMessage.ExceptionTypes.Returns(new[] { "ExceptionType" });
            errorMessage.Messages.Returns(new[] { "This is my message \t\r\n" });
            errorMessage.StackTraces.Returns(new[] { "Line 1\r\nLine 2\r\nLine 3" });

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null);

            var result = visitor.OnMessage(errorMessage);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("ERROR: ExceptionType : This is my message \\t\\r\\n", msg),
                              msg => Assert.Equal("ERROR: Line 1\r\nLine 2\r\nLine 3", msg));
        }
コード例 #18
0
        public void LogsTestNameWithExceptionAndStackTrace()
        {
            var testFailed = Substitute.For <ITestFailed>();

            testFailed.TestDisplayName.Returns("This is my display name \t\r\n");
            testFailed.Message.Returns("This is my message \t\r\n");
            testFailed.StackTrace.Returns("Line 1\r\nLine 2\r\nLine 3");

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testFailed);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("ERROR: This is my display name \\t\\r\\n: This is my message \\t\\r\\n", msg),
                              msg => Assert.Equal("ERROR: Line 1\r\nLine 2\r\nLine 3", msg));
        }
コード例 #19
0
        public void LogsMessage()
        {
            var errorMessage = Substitute.For <IErrorMessage>();

            errorMessage.ExceptionType.Returns("ExceptionType");
            errorMessage.Message.Returns("This is my message \t\r\n");
            errorMessage.StackTrace.Returns("Line 1\r\nLine 2\r\nLine 3");

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(errorMessage);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("ERROR: ExceptionType: This is my message \\t\\r\\n", msg),
                              msg => Assert.Equal("ERROR: Line 1\r\nLine 2\r\nLine 3", msg));
        }
コード例 #20
0
        public void LogsTestNameAsWarning()
        {
            var testSkipped = Substitute.For <ITestSkipped>();

            testSkipped.TestDisplayName.Returns("This is my display name \t\r\n");
            testSkipped.Reason.Returns("This is my skip reason \t\r\n");

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId");

            visitor.OnMessage(testSkipped);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("MESSAGE[High]: ##teamcity[testIgnored name='This is my display name \t|r|n' message='This is my skip reason \t|r|n' flowId='myFlowId']", msg),
                              msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFinished name='This is my display name \t|r|n' duration='0' flowId='myFlowId']", msg)
                              );
        }
コード例 #21
0
        public static void NullStackTraceDoesNotLogStackTrace()
        {
            var testFailed = Substitute.For <ITestFailed>();

            testFailed.TestDisplayName.Returns("1");
            testFailed.Messages.Returns(new[] { "2" });
            testFailed.StackTraces.Returns(new[] { (string)null });
            testFailed.ExceptionTypes.Returns(new[] { "ExceptionType" });
            testFailed.ExceptionParentIndices.Returns(new[] { -1 });

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testFailed);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("ERROR: 1: ExceptionType : 2", msg));
        }
コード例 #22
0
        public static void LogsTestName()
        {
            var testStarting = Substitute.For <ITestStarting>();
            var test         = Mocks.Test(null, "???");

            testStarting.Test.Returns(test);
            var formatter = Substitute.For <TeamCityDisplayNameFormatter>();

            formatter.DisplayName(test).Returns("This is my display name \t\r\n");

            var logger = SpyLogger.Create();

            using (var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId", formatter))
            {
                visitor.OnMessage(testStarting);

                Assert.Single(logger.Messages, "MESSAGE[High]: ##teamcity[testStarted name='This is my display name \t|r|n' flowId='myFlowId']");
            }
        }
コード例 #23
0
        public void LogsTestNameWithExceptionAndStackTrace()
        {
            var testFailed = Substitute.For <ITestFailed>();

            testFailed.TestDisplayName.Returns("This is my display name \t\r\n");
            testFailed.ExecutionTime.Returns(1.2345M);
            testFailed.Message.Returns("This is my message \t\r\n");
            testFailed.StackTrace.Returns("Line 1\r\nLine 2\r\nLine 3");

            var logger  = SpyLogger.Create();
            var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId");

            visitor.OnMessage(testFailed);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFailed name='This is my display name \t|r|n' details='This is my message \t|r|n|r|nLine 1|r|nLine 2|r|nLine 3' flowId='myFlowId']", msg),
                              msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFinished name='This is my display name \t|r|n' duration='1234' flowId='myFlowId']", msg)
                              );
        }
コード例 #24
0
        public async Task ShouldReturnItemsAsync()
        {
            // Arrange
            var mockRepo = new Mock <IMyTimeRepo>();

            mockRepo.Setup(r => r.GetTimesAsync(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(new List <TimeModel>
            {
                new TimeModel {
                    Id = "id-1", UserId = "111", TimeGroup = "Test", Start = new DateTime(2020, 1, 1, 5, 10, 0), End = new DateTime(2020, 1, 1, 5, 12, 20), Notes = "Test Note One"
                },
                new TimeModel {
                    Id = "id-2", UserId = "111", TimeGroup = "Test", Start = new DateTime(2020, 1, 1, 6, 10, 0), End = new DateTime(2020, 1, 1, 7, 12, 20), Notes = "Test Note Two"
                }
            });

            var logger = new SpyLogger <TimeController>();

            var controller = new TimeController(mockRepo.Object, logger);

            // Act
            var items = await controller.GetByGroupAsync("Test");

            // Assert
            Assert.NotNull(items);

            var enumerator = items.GetEnumerator();

            Assert.True(enumerator.MoveNext());
            Assert.Equal("id-1", enumerator.Current.Id);
            Assert.Equal("111", enumerator.Current.UserId);
            Assert.Equal("Test", enumerator.Current.TimeGroup);
            Assert.Equal(new DateTime(2020, 1, 1, 5, 10, 0), enumerator.Current.Start);
            Assert.Equal(new DateTime(2020, 1, 1, 5, 12, 20), enumerator.Current.End);
            Assert.Equal("Test Note One", enumerator.Current.Notes);

            Assert.True(enumerator.MoveNext());
            Assert.Equal("id-2", enumerator.Current.Id);
            Assert.Equal("111", enumerator.Current.UserId);
            Assert.Equal("Test", enumerator.Current.TimeGroup);
            Assert.Equal(new DateTime(2020, 1, 1, 6, 10, 0), enumerator.Current.Start);
            Assert.Equal(new DateTime(2020, 1, 1, 7, 12, 20), enumerator.Current.End);
            Assert.Equal("Test Note Two", enumerator.Current.Notes);
        }
コード例 #25
0
        public static void LogsTestNameWithExceptionAndStackTrace()
        {
            var testFailed = Substitute.For <ITestFailed>();
            var test       = Mocks.Test(null, "This is my display name \t\r\n");

            testFailed.Test.Returns(test);
            testFailed.Messages.Returns(new[] { "This is my message \t\r\n" });
            testFailed.StackTraces.Returns(new[] { "Line 1\r\nLine 2\r\nLine 3" });
            testFailed.ExceptionTypes.Returns(new[] { "ExceptionType" });
            testFailed.ExceptionParentIndices.Returns(new[] { -1 });

            var logger  = SpyLogger.Create();
            var visitor = new StandardOutputVisitor(logger, null, false, null);

            visitor.OnMessage(testFailed);

            Assert.Collection(logger.Messages,
                              msg => Assert.Equal("ERROR: This is my display name \\t\\r\\n: ExceptionType : This is my message \\t\\r\\n", msg),
                              msg => Assert.Equal("ERROR: Line 1\r\nLine 2\r\nLine 3", msg));
        }
コード例 #26
0
        public async Task AddSecretStore_WithLogger_UsesLogger()
        {
            // Arrange
            var services  = new ServiceCollection();
            var spyLogger = new SpyLogger();

            services.AddLogging(logging => logging.AddProvider(new TestLoggerProvider(spyLogger)));

            const string secretName   = "MySecret";
            var          stubProvider = new InMemorySecretProvider((secretName, $"secret-{Guid.NewGuid()}"));

            // Act
            services.AddSecretStore(stores => stores.AddProvider(stubProvider));

            // Assert
            IServiceProvider serviceProvider = services.BuildServiceProvider();
            var secretProvider = serviceProvider.GetRequiredService <ISecretProvider>();
            await secretProvider.GetRawSecretAsync(secretName);

            Assert.True(spyLogger.IsCalled);
        }
コード例 #27
0
        public static void LogsTestNameAndOutput()
        {
            var testPassed = Substitute.For <ITestPassed>();
            var test       = Mocks.Test(null, "???");

            testPassed.Test.Returns(test);
            testPassed.ExecutionTime.Returns(1.2345M);
            testPassed.Output.Returns("This is\t\r\noutput");
            var formatter = Substitute.For <TeamCityDisplayNameFormatter>();

            formatter.DisplayName(test).Returns("This is my display name \t\r\n");

            var logger = SpyLogger.Create();

            using (var visitor = new TeamCityVisitor(logger, null, null, _ => "myFlowId", formatter))
            {
                visitor.OnMessage(testPassed);

                Assert.Collection(logger.Messages,
                                  msg => Assert.Equal("MESSAGE[High]: ##teamcity[testStdOut name='This is my display name \t|r|n' out='This is\t|r|noutput']", msg),
                                  msg => Assert.Equal("MESSAGE[High]: ##teamcity[testFinished name='This is my display name \t|r|n' duration='1234' flowId='myFlowId']", msg)
                                  );
            }
        }