diff --git a/src/NUnit.TestAdapter.Tests.Acceptance/NUnit.TestAdapter.Tests.Acceptance.csproj b/src/NUnit.TestAdapter.Tests.Acceptance/NUnit.TestAdapter.Tests.Acceptance.csproj index 6f506ceb..c41ad1b1 100644 --- a/src/NUnit.TestAdapter.Tests.Acceptance/NUnit.TestAdapter.Tests.Acceptance.csproj +++ b/src/NUnit.TestAdapter.Tests.Acceptance/NUnit.TestAdapter.Tests.Acceptance.csproj @@ -1,4 +1,4 @@ - + net48 @@ -13,7 +13,10 @@ - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/NUnitTestAdapter/NUnit.TestAdapter.csproj b/src/NUnitTestAdapter/NUnit.TestAdapter.csproj index d0928ace..64224c2a 100644 --- a/src/NUnitTestAdapter/NUnit.TestAdapter.csproj +++ b/src/NUnitTestAdapter/NUnit.TestAdapter.csproj @@ -33,8 +33,8 @@ - - + + diff --git a/src/NUnitTestAdapterTests/NUnit.TestAdapter.Tests.csproj b/src/NUnitTestAdapterTests/NUnit.TestAdapter.Tests.csproj index 95d09aaa..96f81507 100644 --- a/src/NUnitTestAdapterTests/NUnit.TestAdapter.Tests.csproj +++ b/src/NUnitTestAdapterTests/NUnit.TestAdapter.Tests.csproj @@ -12,10 +12,13 @@ - + - + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/NUnitTestAdapterTests/NUnitEventListenerTests.cs b/src/NUnitTestAdapterTests/NUnitEventListenerTests.cs index 19aa58ea..ed818074 100644 --- a/src/NUnitTestAdapterTests/NUnitEventListenerTests.cs +++ b/src/NUnitTestAdapterTests/NUnitEventListenerTests.cs @@ -22,14 +22,11 @@ // *********************************************************************** using System; -using System.Collections.Generic; #if NET462 using System.Runtime.Remoting; #endif -using System.Xml; using Microsoft.VisualStudio.TestPlatform.ObjectModel; -using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging; using NSubstitute; @@ -41,214 +38,219 @@ using VSTestResult = Microsoft.VisualStudio.TestPlatform.ObjectModel.TestResult; -namespace NUnit.VisualStudio.TestAdapter.Tests +namespace NUnit.VisualStudio.TestAdapter.Tests; + +public class NUnitEventListenerTests { - public class NUnitEventListenerTests + private NUnitEventListener listener; + private FakeFrameworkHandle testLog; + private NUnitEventTestCase fakeTestNode; + private INUnit3TestExecutor executor; + private IAdapterSettings settings; + + [SetUp] + public void SetUp() { - private NUnitEventListener listener; - private FakeFrameworkHandle testLog; - private NUnitEventTestCase fakeTestNode; - private INUnit3TestExecutor executor; - private IAdapterSettings settings; - - [SetUp] - public void SetUp() - { - testLog = new FakeFrameworkHandle(); - settings = Substitute.For(); - executor = Substitute.For(); - executor.Settings.Returns(settings); - executor.FrameworkHandle.Returns(testLog); - settings.CollectSourceInformation.Returns(true); - using var testConverter = new TestConverterForXml(new TestLogger(new MessageLoggerStub()), FakeTestData.AssemblyPath, settings); - fakeTestNode = new NUnitEventTestCase(FakeTestData.GetTestNode()); - - // Ensure that the converted testcase is cached - testConverter.ConvertTestCase(fakeTestNode); - Assert.That(testConverter.GetCachedTestCase("123"), Is.Not.Null); - - listener = new NUnitEventListener(testConverter, executor); - } + testLog = new FakeFrameworkHandle(); + settings = Substitute.For(); + executor = Substitute.For(); + executor.Settings.Returns(settings); + executor.FrameworkHandle.Returns(testLog); + settings.CollectSourceInformation.Returns(true); + using var testConverter = new TestConverterForXml(new TestLogger(new MessageLoggerStub()), FakeTestData.AssemblyPath, settings); + fakeTestNode = new NUnitEventTestCase(FakeTestData.GetTestNode()); + + // Ensure that the converted testcase is cached + testConverter.ConvertTestCase(fakeTestNode); + Assert.That(testConverter.GetCachedTestCase("123"), Is.Not.Null); + + listener = new NUnitEventListener(testConverter, executor); + } - #region TestStarted Tests + #region TestStarted Tests - [Test] - public void TestStarted_CallsRecordStartCorrectly() - { - listener.OnTestEvent(""); - Assert.That(testLog.Events, Has.Count.EqualTo(1)); - Assert.That( - testLog.Events[0].EventType, - Is.EqualTo(FakeFrameworkHandle.EventType.RecordStart)); + [Test] + public void TestStarted_CallsRecordStartCorrectly() + { + listener.OnTestEvent(""); + Assert.That(testLog.Events, Has.Count.EqualTo(1)); + Assert.That( + testLog.Events[0].EventType, + Is.EqualTo(FakeFrameworkHandle.EventType.RecordStart)); - VerifyTestCase(testLog.Events[0].TestCase); - } + VerifyTestCase(testLog.Events[0].TestCase); + } - #endregion + #endregion - #region TestFinished Tests + #region TestFinished Tests - [Test] - public void TestFinished_CallsRecordEnd_Then_RecordResult() + [Test] + public void TestFinished_CallsRecordEnd_Then_RecordResult() + { + listener.TestFinished(new NUnitTestEventTestCase(FakeTestData.GetResultNode().AsString())); + Assert.That(testLog.Events, Has.Count.EqualTo(2)); + Assert.Multiple(() => { - listener.TestFinished(new NUnitTestEventTestCase(FakeTestData.GetResultNode().AsString())); - Assert.That(testLog.Events, Has.Count.EqualTo(2)); - Assert.Multiple(() => - { - Assert.That(testLog.Events[0].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordEnd)); - Assert.That( - testLog.Events[1].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordResult)); - }); - } + Assert.That(testLog.Events[0].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordEnd)); + Assert.That( + testLog.Events[1].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordResult)); + }); + } - [Test] - public void TestFinished_CallsRecordEndCorrectly() - { - listener.TestFinished(new NUnitTestEventTestCase(FakeTestData.GetResultNode().AsString())); - Assume.That(testLog.Events.Count, Is.EqualTo(2)); - Assume.That(testLog.Events[0].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordEnd)); + [Test] + public void TestFinished_CallsRecordEndCorrectly() + { + listener.TestFinished(new NUnitTestEventTestCase(FakeTestData.GetResultNode().AsString())); + Assume.That(testLog.Events.Count, Is.EqualTo(2)); + Assume.That(testLog.Events[0].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordEnd)); - VerifyTestCase(testLog.Events[0].TestCase); - Assert.That(testLog.Events[0].TestOutcome, Is.EqualTo(TestOutcome.Passed)); - } + VerifyTestCase(testLog.Events[0].TestCase); + Assert.That(testLog.Events[0].TestOutcome, Is.EqualTo(TestOutcome.Passed)); + } - /// - /// Issue516. - /// - [TestCase(null)] - [TestCase("")] - [TestCase(" ")] - [TestCase("\t")] - [TestCase("\r")] - [TestCase("\n")] - [TestCase("\r\n")] - public void TestFinished_DoNotSendWhiteSpaceToMessages(string data) - { - var testcase = Substitute.For(); - testcase.Name.Returns($"Test1({data})"); - testcase.FullName.Returns($"Issue516.Tests.Test1({data})"); - testcase.Output.Returns($"{data}"); - settings.ConsoleOut.Returns(1); - listener.TestFinished(testcase); - Assert.That(testLog.Events, Is.Empty); - } + /// + /// Issue516. + /// + [TestCase(null)] + [TestCase("")] + [TestCase(" ")] + [TestCase("\t")] + [TestCase("\r")] + [TestCase("\n")] + [TestCase("\r\n")] + public void TestFinished_DoNotSendWhiteSpaceToMessages(string data) + { + var testcase = Substitute.For(); + testcase.Name.Returns($"Test1({data})"); + testcase.FullName.Returns($"Issue516.Tests.Test1({data})"); + testcase.Output.Returns($"{data}"); + settings.ConsoleOut.Returns(1); + listener.TestFinished(testcase); + Assert.That(testLog.Events, Is.Empty); + } - [Test] - public void TestFinished_CallsRecordResultCorrectly() - { - listener.TestFinished(new NUnitTestEventTestCase(FakeTestData.GetResultNode().AsString())); - Assume.That(testLog.Events.Count, Is.EqualTo(2)); - Assume.That(testLog.Events[1].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordResult)); + [Test] + public void TestFinished_CallsRecordResultCorrectly() + { + listener.TestFinished(new NUnitTestEventTestCase(FakeTestData.GetResultNode().AsString())); + Assume.That(testLog.Events.Count, Is.EqualTo(2)); + Assume.That(testLog.Events[1].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.RecordResult)); - VerifyTestResult(testLog.Events[1].TestResult); - } + VerifyTestResult(testLog.Events[1].TestResult); + } - // [TestCase(ResultState.Success, TestOutcome.Passed, null)] - // [TestCase(ResultState.Failure, TestOutcome.Failed, "My failure message")] - // [TestCase(ResultState.Error, TestOutcome.Failed, "Error!")] - // [TestCase(ResultState.Cancelled, TestOutcome.None, null)] - // [TestCase(ResultState.Inconclusive, TestOutcome.None, null)] - // [TestCase(ResultState.NotRunnable, TestOutcome.Failed, "No constructor")] - // [TestCase(ResultState.Skipped, TestOutcome.Skipped, null)] - // [TestCase(ResultState.Ignored, TestOutcome.Skipped, "my reason")] - // public void TestFinished_OutcomesAreCorrectlyTranslated(ResultState resultState, TestOutcome outcome, string message) - // { - // fakeNUnitResult.SetResult(resultState, message, null); - // listener.TestFinished(fakeNUnitResult); - // Assume.That(testLog.Events.Count, Is.EqualTo(2)); - // Assume.That( - // testLog.Events[0].EventType, - // Is.EqualTo(FakeFrameworkHandle.EventType.RecordEnd)); - // Assume.That( - // testLog.Events[1].EventType, - // Is.EqualTo(FakeFrameworkHandle.EventType.RecordResult)); - - // Assert.AreEqual(outcome, testLog.Events[0].TestOutcome); - // Assert.AreEqual(outcome, testLog.Events[1].TestResult.Outcome); - // Assert.AreEqual(message, testLog.Events[1].TestResult.ErrorMessage); - // } - - #endregion - - #region TestOutput Tests - - [TestCase(NUnitTestEventTestOutput.Streams.Error, TestMessageLevel.Warning, TestName = "TestOutput with 'Error' stream is send as message level Warning")] - [TestCase(NUnitTestEventTestOutput.Streams.Progress, TestMessageLevel.Informational, TestName = "TestOutput with 'Progress' stream is send as message level Informational")] - [TestCase(NUnitTestEventTestOutput.Streams.NoIdea, TestMessageLevel.Informational, TestName = "TestOutput with 'NoIdea' stream is send as message level Informational")] - public void TestOutput_SendsMessageWithCorrectMessageLevel(NUnitTestEventTestOutput.Streams streamType, TestMessageLevel expectedTestMessageLevel) - { - var outPutXml = @$""; - var testOutput = new NUnitTestEventTestOutput(XmlHelper.CreateXmlNode(outPutXml)); + // [TestCase(ResultState.Success, TestOutcome.Passed, null)] + // [TestCase(ResultState.Failure, TestOutcome.Failed, "My failure message")] + // [TestCase(ResultState.Error, TestOutcome.Failed, "Error!")] + // [TestCase(ResultState.Cancelled, TestOutcome.None, null)] + // [TestCase(ResultState.Inconclusive, TestOutcome.None, null)] + // [TestCase(ResultState.NotRunnable, TestOutcome.Failed, "No constructor")] + // [TestCase(ResultState.Skipped, TestOutcome.Skipped, null)] + // [TestCase(ResultState.Ignored, TestOutcome.Skipped, "my reason")] + // public void TestFinished_OutcomesAreCorrectlyTranslated(ResultState resultState, TestOutcome outcome, string message) + // { + // fakeNUnitResult.SetResult(resultState, message, null); + // listener.TestFinished(fakeNUnitResult); + // Assume.That(testLog.Events.Count, Is.EqualTo(2)); + // Assume.That( + // testLog.Events[0].EventType, + // Is.EqualTo(FakeFrameworkHandle.EventType.RecordEnd)); + // Assume.That( + // testLog.Events[1].EventType, + // Is.EqualTo(FakeFrameworkHandle.EventType.RecordResult)); + + // Assert.AreEqual(outcome, testLog.Events[0].TestOutcome); + // Assert.AreEqual(outcome, testLog.Events[1].TestResult.Outcome); + // Assert.AreEqual(message, testLog.Events[1].TestResult.ErrorMessage); + // } + + #endregion + + #region TestOutput Tests + + [TestCase(NUnitTestEventTestOutput.Streams.Error, TestMessageLevel.Warning, TestName = "TestOutput with 'Error' stream is send as message level Warning")] + [TestCase(NUnitTestEventTestOutput.Streams.Progress, TestMessageLevel.Informational, TestName = "TestOutput with 'Progress' stream is send as message level Informational")] + [TestCase(NUnitTestEventTestOutput.Streams.NoIdea, TestMessageLevel.Informational, TestName = "TestOutput with 'NoIdea' stream is send as message level Informational")] + public void TestOutput_SendsMessageWithCorrectMessageLevel(NUnitTestEventTestOutput.Streams streamType, TestMessageLevel expectedTestMessageLevel) + { + var outPutXml = @$""; + var testOutput = new NUnitTestEventTestOutput(XmlHelper.CreateXmlNode(outPutXml)); - listener.TestOutput(testOutput); - Assume.That(testLog.Events.Count, Is.EqualTo(1)); - Assume.That(testLog.Events[0].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.SendMessage)); + listener.TestOutput(testOutput); + Assume.That(testLog.Events.Count, Is.EqualTo(1)); + Assume.That(testLog.Events[0].EventType, Is.EqualTo(FakeFrameworkHandle.EventType.SendMessage)); - Assert.That(testLog.Events[0].Message.Level, Is.EqualTo(expectedTestMessageLevel)); - } + Assert.That(testLog.Events[0].Message.Level, Is.EqualTo(expectedTestMessageLevel)); + } - #endregion + #endregion - #region Listener Lifetime Tests + #region Listener Lifetime Tests #if NET462 - [Test] - public void Listener_LeaseLifetimeWillNotExpire() - { - testLog = new FakeFrameworkHandle(); - var adapterSettings = Substitute.For(); - adapterSettings.CollectSourceInformation.Returns(true); - var discoveryConverter = Substitute.For(); - using var testConverter = new TestConverter(new TestLogger(new MessageLoggerStub()), FakeTestData.AssemblyPath, adapterSettings, discoveryConverter); - var executor = Substitute.For(); - var localInstance = (MarshalByRefObject)Activator.CreateInstance(typeof(NUnitEventListener), testConverter, executor); + [Test] + public void Listener_LeaseLifetimeWillNotExpire() + { + testLog = new FakeFrameworkHandle(); + var adapterSettings = Substitute.For(); + adapterSettings.CollectSourceInformation.Returns(true); + var discoveryConverter = Substitute.For(); + using var testConverter = new TestConverter(new TestLogger(new MessageLoggerStub()), FakeTestData.AssemblyPath, adapterSettings, discoveryConverter); + var executor = Substitute.For(); + var localInstance = (MarshalByRefObject)Activator.CreateInstance(typeof(NUnitEventListener), testConverter, executor); - RemotingServices.Marshal(localInstance); + RemotingServices.Marshal(localInstance); - var lifetime = ((MarshalByRefObject)localInstance).GetLifetimeService(); + var lifetime = ((MarshalByRefObject)localInstance).GetLifetimeService(); - // A null lifetime (as opposed to an ILease) means the object has an infinite lifetime - Assert.That(lifetime, Is.Null); - } + // A null lifetime (as opposed to an ILease) means the object has an infinite lifetime + Assert.That(lifetime, Is.Null); + } #endif - #endregion + #endregion - #region Helper Methods + #region Helper Methods - private void VerifyTestCase(TestCase ourCase) + private void VerifyTestCase(TestCase ourCase) + { + Assert.That(ourCase, Is.Not.Null, "TestCase not set"); + Assert.Multiple(() => + { + Assert.That(ourCase.DisplayName, Is.EqualTo(FakeTestData.DisplayName)); + Assert.That(ourCase.FullyQualifiedName, Is.EqualTo(FakeTestData.FullyQualifiedName)); + Assert.That(ourCase.Source, Is.EqualTo(FakeTestData.AssemblyPath)); + }); + if (ourCase.CodeFilePath != null) // Unavailable if not running under VS { - Assert.That(ourCase, Is.Not.Null, "TestCase not set"); Assert.Multiple(() => { - Assert.That(ourCase.DisplayName, Is.EqualTo(FakeTestData.DisplayName)); - Assert.That(ourCase.FullyQualifiedName, Is.EqualTo(FakeTestData.FullyQualifiedName)); - Assert.That(ourCase.Source, Is.EqualTo(FakeTestData.AssemblyPath)); + Assert.That(ourCase.CodeFilePath, Is.SamePath(FakeTestData.CodeFile)); + Assert.That(ourCase.LineNumber, Is.EqualTo(FakeTestData.LineNumber)); }); - if (ourCase.CodeFilePath != null) // Unavailable if not running under VS - { - Assert.Multiple(() => - { - Assert.That(ourCase.CodeFilePath, Is.SamePath(FakeTestData.CodeFile)); - Assert.That(ourCase.LineNumber, Is.EqualTo(FakeTestData.LineNumber)); - }); - } } + } - private void VerifyTestResult(VSTestResult ourResult) + private void VerifyTestResult(VSTestResult ourResult) + { + Assert.That(ourResult, Is.Not.Null, "TestResult not set"); + VerifyTestCase(ourResult.TestCase); + Assert.Multiple(() => { - Assert.That(ourResult, Is.Not.Null, "TestResult not set"); - VerifyTestCase(ourResult.TestCase); - Assert.Multiple(() => - { - Assert.That(ourResult.ComputerName, Is.EqualTo(Environment.MachineName)); - Assert.That(ourResult.Outcome, Is.EqualTo(TestOutcome.Passed)); - Assert.That(ourResult.ErrorMessage, Is.EqualTo(null)); - Assert.That(ourResult.Duration, Is.EqualTo(TimeSpan.FromSeconds(1.234))); - }); - } + Assert.That(ourResult.ComputerName, Is.EqualTo(Environment.MachineName)); + Assert.That(ourResult.Outcome, Is.EqualTo(TestOutcome.Passed)); + Assert.That(ourResult.ErrorMessage, Is.EqualTo(null)); + Assert.That(ourResult.Duration, Is.EqualTo(TimeSpan.FromSeconds(1.234))); + }); + } + + #endregion - #endregion + [TearDown] + public void TearDown() + { + listener.Dispose(); } } \ No newline at end of file