From a25dcade66901f61e43bf38dc175ccf4924781a4 Mon Sep 17 00:00:00 2001 From: Charlie Poole Date: Tue, 13 Aug 2024 08:45:49 -0700 Subject: [PATCH] Run all unit tests under NUnitLite --- build.cake | 22 +--------------- .../nunit3-console.tests/CommandLineTests.cs | 22 ++++++++-------- .../nunit3-console.tests/ConsoleMocks.cs | 1 + .../DefaultOptionsProviderTests.cs | 3 ++- .../OutputSpecificationTests.cs | 26 ++++++++++--------- .../nunit3-console.tests/Program.cs | 18 +++++++++++++ .../nunit3-console.tests.csproj | 7 ++++- .../nunit3-console/ConsoleOptions.cs | 7 ++--- .../nunit3-console/ConsoleRunner.cs | 1 + .../DefaultOptionsProvider.cs | 2 +- .../IDefaultOptionsProvider.cs | 2 +- .../{OptionsUtils => Options}/IFileSystem.cs | 0 .../{OptionsUtils => Options}/OptionParser.cs | 2 +- .../{OptionsUtils => Options}/Options.cs | 2 +- .../OutputSpecification.cs | 2 +- .../TestNameParser.cs | 2 +- src/NUnitConsole/nunit3-console/Program.cs | 3 ++- 17 files changed, 66 insertions(+), 56 deletions(-) create mode 100644 src/NUnitConsole/nunit3-console.tests/Program.cs rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/DefaultOptionsProvider.cs (93%) rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/IDefaultOptionsProvider.cs (83%) rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/IFileSystem.cs (100%) rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/OptionParser.cs (98%) rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/Options.cs (99%) rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/OutputSpecification.cs (98%) rename src/NUnitConsole/nunit3-console/{OptionsUtils => Options}/TestNameParser.cs (98%) diff --git a/build.cake b/build.cake index 4a6f57dff..0c2c623a4 100644 --- a/build.cake +++ b/build.cake @@ -10,8 +10,7 @@ BuildSettings.Initialize( githubRepository: "nunit-console", solutionFile: "NUnitConsole.sln", exemptFiles: new[] { "Options.cs", "ProcessUtils.cs", "ProcessUtilsTests.cs" }, - unitTests: "**/*.tests.exe|**/nunit3-console.tests.dll", - unitTestRunner: new CustomTestRunner()); + unitTests: "**/*.tests.exe"); ////////////////////////////////////////////////////////////////////// // PACKAGE TEST LISTS @@ -349,25 +348,6 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] { // TEST RUNNERS ////////////////////////////////////////////////////////////////////// -// Custom unit test runner to run console vs engine tests differently -// TODO: Use NUnitLite for all tests? -public class CustomTestRunner : TestRunner, IUnitTestRunner -{ - public int RunUnitTest(FilePath testPath) - { - // Run console tests under the just-built console - if (testPath.ToString().Contains("nunit3-console.tests.dll")) - { - return BuildSettings.Context.StartProcess( - BuildSettings.OutputDirectory + "net462/nunit3-console.exe", - $"\"{testPath}\" {BuildSettings.UnitTestArguments}"); - } - - // All other tests use NUnitLite - return new NUnitLiteRunner().RunUnitTest(testPath); - } -} - // Use the console runner we just built to run package tests public class ConsoleRunnerSelfTester : TestRunner, IPackageTestRunner { diff --git a/src/NUnitConsole/nunit3-console.tests/CommandLineTests.cs b/src/NUnitConsole/nunit3-console.tests/CommandLineTests.cs index dfc6eda3f..54af95333 100644 --- a/src/NUnitConsole/nunit3-console.tests/CommandLineTests.cs +++ b/src/NUnitConsole/nunit3-console.tests/CommandLineTests.cs @@ -3,11 +3,11 @@ using System; using System.IO; using System.Reflection; -using NUnit.Common; using System.Collections.Generic; -using NUnit.Framework; -using NUnit.Options; +using NUnit.Common; +using NUnit.ConsoleRunner.Options; +using NUnit.Framework; namespace NUnit.ConsoleRunner.Tests { @@ -403,7 +403,7 @@ public void ResultOptionWithFilePath() Assert.That(options.InputFiles.Count, Is.EqualTo(1), "assembly should be set"); Assert.That(options.InputFiles[0], Is.EqualTo("tests.dll")); - OutputSpecification spec = options.ResultOutputSpecifications[0]; + var spec = options.ResultOutputSpecifications[0]; Assert.That(spec.OutputPath, Is.EqualTo("results.xml")); Assert.That(spec.Format, Is.EqualTo("nunit3")); Assert.Null(spec.Transform); @@ -417,7 +417,7 @@ public void ResultOptionWithFilePathAndFormat() Assert.That(options.InputFiles.Count, Is.EqualTo(1), "assembly should be set"); Assert.That(options.InputFiles[0], Is.EqualTo("tests.dll")); - OutputSpecification spec = options.ResultOutputSpecifications[0]; + var spec = options.ResultOutputSpecifications[0]; Assert.That(spec.OutputPath, Is.EqualTo("results.xml")); Assert.That(spec.Format, Is.EqualTo("nunit2")); Assert.Null(spec.Transform); @@ -437,7 +437,7 @@ public void ResultOptionWithFilePathAndTransform() Assert.That(options.InputFiles.Count, Is.EqualTo(1), "assembly should be set"); Assert.That(options.InputFiles[0], Is.EqualTo("tests.dll")); - OutputSpecification spec = options.ResultOutputSpecifications[0]; + var spec = options.ResultOutputSpecifications[0]; Assert.That(spec.OutputPath, Is.EqualTo("results.xml")); Assert.That(spec.Format, Is.EqualTo("user")); var fullFilePath = Path.Combine(TestContext.CurrentContext.TestDirectory, transformFile); @@ -524,7 +524,7 @@ public void InvalidResultSpecRecordsError() { var options = ConsoleMocks.Options("test.dll", "-result:userspecifed.xml;format=nunit2;format=nunit3"); Assert.That(options.ResultOutputSpecifications, Has.Exactly(1).Items - .And.Exactly(1).Property(nameof(OutputSpecification.OutputPath)).EqualTo("TestResult.xml")); + .And.Exactly(1).Property(nameof(Options.OutputSpecification.OutputPath)).EqualTo("TestResult.xml")); Assert.That(options.ErrorMessages, Has.Exactly(1).Contains("conflicting format options").IgnoreCase); } @@ -538,7 +538,7 @@ public void MissingXsltFileRecordsError() new VirtualFileSystem(), "test.dll", $"-result:userspecifed.xml;transform={missingXslt}"); Assert.That(options.ResultOutputSpecifications, Has.Exactly(1).Items - .And.Exactly(1).Property(nameof(OutputSpecification.Transform)).Null); + .And.Exactly(1).Property(nameof(Options.OutputSpecification.Transform)).Null); Assert.That(options.ErrorMessages, Has.Exactly(1).Contains($"{missingXslt} could not be found").IgnoreCase); } @@ -559,7 +559,7 @@ public void ExploreOptionWithFilePath() Assert.That(options.InputFiles[0], Is.EqualTo("tests.dll")); Assert.That(options.Explore, Is.True); - OutputSpecification spec = options.ExploreOutputSpecifications[0]; + var spec = options.ExploreOutputSpecifications[0]; Assert.That(spec.OutputPath, Is.EqualTo("results.xml")); Assert.That(spec.Format, Is.EqualTo("nunit3")); Assert.Null(spec.Transform); @@ -574,7 +574,7 @@ public void ExploreOptionWithFilePathAndFormat() Assert.That(options.InputFiles[0], Is.EqualTo("tests.dll")); Assert.That(options.Explore, Is.True); - OutputSpecification spec = options.ExploreOutputSpecifications[0]; + var spec = options.ExploreOutputSpecifications[0]; Assert.That(spec.OutputPath, Is.EqualTo("results.xml")); Assert.That(spec.Format, Is.EqualTo("cases")); Assert.Null(spec.Transform); @@ -594,7 +594,7 @@ public void ExploreOptionWithFilePathAndTransform() Assert.That(options.InputFiles[0], Is.EqualTo("tests.dll")); Assert.That(options.Explore, Is.True); - OutputSpecification spec = options.ExploreOutputSpecifications[0]; + var spec = options.ExploreOutputSpecifications[0]; Assert.That(spec.OutputPath, Is.EqualTo("results.xml")); Assert.That(spec.Format, Is.EqualTo("user")); var fullFilePath = Path.Combine(TestContext.CurrentContext.TestDirectory, transformFile); diff --git a/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs b/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs index 8f26a6c4c..26ffdefb4 100644 --- a/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs +++ b/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs @@ -2,6 +2,7 @@ using NSubstitute; using NUnit.Common; +using NUnit.ConsoleRunner.Options; namespace NUnit.ConsoleRunner.Tests { diff --git a/src/NUnitConsole/nunit3-console.tests/DefaultOptionsProviderTests.cs b/src/NUnitConsole/nunit3-console.tests/DefaultOptionsProviderTests.cs index 51280294b..8584260d2 100644 --- a/src/NUnitConsole/nunit3-console.tests/DefaultOptionsProviderTests.cs +++ b/src/NUnitConsole/nunit3-console.tests/DefaultOptionsProviderTests.cs @@ -1,7 +1,8 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt using System; -using NUnit.Common; + +using NUnit.ConsoleRunner.Options; using NUnit.Framework; namespace NUnit.ConsoleRunner.Tests diff --git a/src/NUnitConsole/nunit3-console.tests/OutputSpecificationTests.cs b/src/NUnitConsole/nunit3-console.tests/OutputSpecificationTests.cs index d79e8af23..8d7bb3299 100644 --- a/src/NUnitConsole/nunit3-console.tests/OutputSpecificationTests.cs +++ b/src/NUnitConsole/nunit3-console.tests/OutputSpecificationTests.cs @@ -3,6 +3,8 @@ using System.IO; using NUnit.Framework; +using Spec = NUnit.ConsoleRunner.Options.OutputSpecification; + namespace NUnit.Common.Tests { public class OutputSpecificationTests @@ -11,7 +13,7 @@ public class OutputSpecificationTests public void SpecMayNotBeNull() { Assert.That( - () => new OutputSpecification(null, null), + () => new Spec(null, null), Throws.TypeOf()); } @@ -20,7 +22,7 @@ public void SpecMayNotBeNull() public void SpecOptionMustContainEqualSign() { Assert.That( - () => new OutputSpecification("MyFile.xml;transform.xslt", null), + () => new Spec("MyFile.xml;transform.xslt", null), Throws.TypeOf()); } @@ -28,14 +30,14 @@ public void SpecOptionMustContainEqualSign() public void SpecOptionMustContainJustOneEqualSign() { Assert.That( - () => new OutputSpecification("MyFile.xml;transform=xslt=transform.xslt", null), + () => new Spec("MyFile.xml;transform=xslt=transform.xslt", null), Throws.TypeOf()); } [Test] public void FileNameOnly() { - var spec = new OutputSpecification("MyFile.xml", null); + var spec = new Spec("MyFile.xml", null); Assert.That(spec.OutputPath, Is.EqualTo("MyFile.xml")); Assert.That(spec.Format, Is.EqualTo("nunit3")); Assert.Null(spec.Transform); @@ -44,7 +46,7 @@ public void FileNameOnly() [Test] public void FileNamePlusFormat() { - var spec = new OutputSpecification("MyFile.xml;format=nunit2", null); + var spec = new Spec("MyFile.xml;format=nunit2", null); Assert.That(spec.OutputPath, Is.EqualTo("MyFile.xml")); Assert.That(spec.Format, Is.EqualTo("nunit2")); Assert.Null(spec.Transform); @@ -54,7 +56,7 @@ public void FileNamePlusFormat() public void FileNamePlusTransform() { const string fileName = "transform.xslt"; - var spec = new OutputSpecification($"MyFile.xml;transform={fileName}", null); + var spec = new Spec($"MyFile.xml;transform={fileName}", null); Assert.That(spec.OutputPath, Is.EqualTo("MyFile.xml")); Assert.That(spec.Format, Is.EqualTo("user")); Assert.That(spec.Transform, Is.EqualTo(fileName)); @@ -64,7 +66,7 @@ public void FileNamePlusTransform() public void UserFormatMayBeIndicatedExplicitlyAfterTransform() { const string fileName = "transform.xslt"; - var spec = new OutputSpecification($"MyFile.xml;transform={fileName};format=user", null); + var spec = new Spec($"MyFile.xml;transform={fileName};format=user", null); Assert.That(spec.OutputPath, Is.EqualTo("MyFile.xml")); Assert.That(spec.Format, Is.EqualTo("user")); Assert.That(spec.Transform, Is.EqualTo(fileName)); @@ -74,7 +76,7 @@ public void UserFormatMayBeIndicatedExplicitlyAfterTransform() public void UserFormatMayBeIndicatedExplicitlyBeforeTransform() { const string fileName = "transform.xslt"; - var spec = new OutputSpecification($"MyFile.xml;format=user;transform={fileName}", null); + var spec = new Spec($"MyFile.xml;format=user;transform={fileName}", null); Assert.That(spec.OutputPath, Is.EqualTo("MyFile.xml")); Assert.That(spec.Format, Is.EqualTo("user")); Assert.That(spec.Transform, Is.EqualTo(fileName)); @@ -84,7 +86,7 @@ public void UserFormatMayBeIndicatedExplicitlyBeforeTransform() public void MultipleFormatSpecifiersNotAllowed() { Assert.That( - () => new OutputSpecification("MyFile.xml;format=nunit2;format=nunit3", null), + () => new Spec("MyFile.xml;format=nunit2;format=nunit3", null), Throws.TypeOf()); } @@ -92,7 +94,7 @@ public void MultipleFormatSpecifiersNotAllowed() public void MultipleTransformSpecifiersNotAllowed() { Assert.That( - () => new OutputSpecification("MyFile.xml;transform=transform1.xslt;transform=transform2.xslt", null), + () => new Spec("MyFile.xml;transform=transform1.xslt;transform=transform2.xslt", null), Throws.TypeOf()); } @@ -100,7 +102,7 @@ public void MultipleTransformSpecifiersNotAllowed() public void TransformWithNonUserFormatNotAllowed() { Assert.That( - () => new OutputSpecification("MyFile.xml;format=nunit2;transform=transform.xslt", null), + () => new Spec("MyFile.xml;format=nunit2;transform=transform.xslt", null), Throws.TypeOf()); } @@ -112,7 +114,7 @@ public void TransformWithNonUserFormatNotAllowed() public void TransformFolderIsUsedToSpecifyTransform(string transformFolder) { const string fileName = "transform.xslt"; - var spec = new OutputSpecification($"MyFile.xml;transform=transform.xslt", transformFolder); + var spec = new Spec($"MyFile.xml;transform=transform.xslt", transformFolder); var expectedTransform = Path.Combine(transformFolder ?? "", fileName); Assert.That(spec.Transform, Is.EqualTo(expectedTransform)); } diff --git a/src/NUnitConsole/nunit3-console.tests/Program.cs b/src/NUnitConsole/nunit3-console.tests/Program.cs new file mode 100644 index 000000000..37bd398c2 --- /dev/null +++ b/src/NUnitConsole/nunit3-console.tests/Program.cs @@ -0,0 +1,18 @@ +// Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt + +using System.Reflection; + +namespace NUnit.Engine.Tests +{ + class Program + { + static int Main(string[] args) + { +#if NETFRAMEWORK + return new NUnitLite.TextRunner(typeof(Program).Assembly).Execute(args); +#else + return new NUnitLite.TextRunner(typeof(Program).GetTypeInfo().Assembly).Execute(args); +#endif + } + } +} diff --git a/src/NUnitConsole/nunit3-console.tests/nunit3-console.tests.csproj b/src/NUnitConsole/nunit3-console.tests/nunit3-console.tests.csproj index 6c94f3fb9..f740358e0 100644 --- a/src/NUnitConsole/nunit3-console.tests/nunit3-console.tests.csproj +++ b/src/NUnitConsole/nunit3-console.tests/nunit3-console.tests.csproj @@ -3,6 +3,8 @@ NUnit.ConsoleRunner.Tests net462;net6.0;net8.0 + Exe + NUnit.Engine.Tests.Program 1685 Full @@ -16,6 +18,7 @@ + @@ -42,7 +45,9 @@ - + + + diff --git a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs index fa16fa3db..5eba632c4 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleOptions.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleOptions.cs @@ -5,10 +5,11 @@ using System.IO; using System.Text; using System.Text.RegularExpressions; -using NUnit.Options; -using NUnit.ConsoleRunner.OptionsUtils; -namespace NUnit.Common +using NUnit.Common; +using NUnit.ConsoleRunner.Options; + +namespace NUnit.ConsoleRunner { /// /// ConsoleOptions encapsulates the option settings for diff --git a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs index 4ddb88b0c..dd778af77 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs @@ -5,6 +5,7 @@ using System.IO; using System.Xml; using NUnit.Common; +using NUnit.ConsoleRunner.Options; using NUnit.ConsoleRunner.Utilities; using NUnit.Engine; using NUnit.Engine.Extensibility; diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/DefaultOptionsProvider.cs b/src/NUnitConsole/nunit3-console/Options/DefaultOptionsProvider.cs similarity index 93% rename from src/NUnitConsole/nunit3-console/OptionsUtils/DefaultOptionsProvider.cs rename to src/NUnitConsole/nunit3-console/Options/DefaultOptionsProvider.cs index 70d0e6f13..33bdd1e16 100644 --- a/src/NUnitConsole/nunit3-console/OptionsUtils/DefaultOptionsProvider.cs +++ b/src/NUnitConsole/nunit3-console/Options/DefaultOptionsProvider.cs @@ -1,6 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt -namespace NUnit.Common +namespace NUnit.ConsoleRunner.Options { using System; diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/IDefaultOptionsProvider.cs b/src/NUnitConsole/nunit3-console/Options/IDefaultOptionsProvider.cs similarity index 83% rename from src/NUnitConsole/nunit3-console/OptionsUtils/IDefaultOptionsProvider.cs rename to src/NUnitConsole/nunit3-console/Options/IDefaultOptionsProvider.cs index 8362735cf..543378afc 100644 --- a/src/NUnitConsole/nunit3-console/OptionsUtils/IDefaultOptionsProvider.cs +++ b/src/NUnitConsole/nunit3-console/Options/IDefaultOptionsProvider.cs @@ -1,6 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt -namespace NUnit.Common +namespace NUnit.ConsoleRunner.Options { internal interface IDefaultOptionsProvider { diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/IFileSystem.cs b/src/NUnitConsole/nunit3-console/Options/IFileSystem.cs similarity index 100% rename from src/NUnitConsole/nunit3-console/OptionsUtils/IFileSystem.cs rename to src/NUnitConsole/nunit3-console/Options/IFileSystem.cs diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/OptionParser.cs b/src/NUnitConsole/nunit3-console/Options/OptionParser.cs similarity index 98% rename from src/NUnitConsole/nunit3-console/OptionsUtils/OptionParser.cs rename to src/NUnitConsole/nunit3-console/Options/OptionParser.cs index e15a00f2c..956346b59 100644 --- a/src/NUnitConsole/nunit3-console/OptionsUtils/OptionParser.cs +++ b/src/NUnitConsole/nunit3-console/Options/OptionParser.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; using NUnit.Common; -namespace NUnit.ConsoleRunner.OptionsUtils +namespace NUnit.ConsoleRunner.Options { internal class OptionParser { diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/Options.cs b/src/NUnitConsole/nunit3-console/Options/Options.cs similarity index 99% rename from src/NUnitConsole/nunit3-console/OptionsUtils/Options.cs rename to src/NUnitConsole/nunit3-console/Options/Options.cs index d9d4db7af..1d7dc20ce 100644 --- a/src/NUnitConsole/nunit3-console/OptionsUtils/Options.cs +++ b/src/NUnitConsole/nunit3-console/Options/Options.cs @@ -182,7 +182,7 @@ using MessageLocalizerConverter = System.Converter; #endif -namespace NUnit.Options +namespace NUnit.ConsoleRunner.Options { static class StringCoda { diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/OutputSpecification.cs b/src/NUnitConsole/nunit3-console/Options/OutputSpecification.cs similarity index 98% rename from src/NUnitConsole/nunit3-console/OptionsUtils/OutputSpecification.cs rename to src/NUnitConsole/nunit3-console/Options/OutputSpecification.cs index 9c46d7f97..2390025bc 100644 --- a/src/NUnitConsole/nunit3-console/OptionsUtils/OutputSpecification.cs +++ b/src/NUnitConsole/nunit3-console/Options/OutputSpecification.cs @@ -4,7 +4,7 @@ using System.IO; using System.Text; -namespace NUnit.Common +namespace NUnit.ConsoleRunner.Options { /// /// OutputSpecification encapsulates a file output path and format diff --git a/src/NUnitConsole/nunit3-console/OptionsUtils/TestNameParser.cs b/src/NUnitConsole/nunit3-console/Options/TestNameParser.cs similarity index 98% rename from src/NUnitConsole/nunit3-console/OptionsUtils/TestNameParser.cs rename to src/NUnitConsole/nunit3-console/Options/TestNameParser.cs index a6026de1a..77840b686 100644 --- a/src/NUnitConsole/nunit3-console/OptionsUtils/TestNameParser.cs +++ b/src/NUnitConsole/nunit3-console/Options/TestNameParser.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; -namespace NUnit.Common +namespace NUnit.ConsoleRunner.Options { /// /// TestNameParser is used to parse the arguments to the diff --git a/src/NUnitConsole/nunit3-console/Program.cs b/src/NUnitConsole/nunit3-console/Program.cs index bfc4a9413..5a12026b2 100644 --- a/src/NUnitConsole/nunit3-console/Program.cs +++ b/src/NUnitConsole/nunit3-console/Program.cs @@ -7,9 +7,10 @@ using System.Linq; using System.Reflection; using System.Text; + using NUnit.Common; +using NUnit.ConsoleRunner.Options; using NUnit.Engine; -using NUnit.Options; namespace NUnit.ConsoleRunner {