From df4c3b01fe8caa168b1c83535b9fb9ca885d55f9 Mon Sep 17 00:00:00 2001 From: Chris Maddock Date: Sun, 9 May 2021 14:33:33 +0100 Subject: [PATCH 1/2] Make core engine internals visible to main engine --- .../nunit.engine.core/Properties/AssemblyInfo.cs | 7 +++++++ src/NUnitEngine/nunit.engine/nunit.engine.csproj | 1 - 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/NUnitEngine/nunit.engine.core/Properties/AssemblyInfo.cs b/src/NUnitEngine/nunit.engine.core/Properties/AssemblyInfo.cs index 2f3f43e40..dd529677a 100644 --- a/src/NUnitEngine/nunit.engine.core/Properties/AssemblyInfo.cs +++ b/src/NUnitEngine/nunit.engine.core/Properties/AssemblyInfo.cs @@ -13,6 +13,13 @@ // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] +[assembly: InternalsVisibleTo("nunit.engine, PublicKey=" + + "002400000480000094000000060200000024000052534131000400000100010031eea370b1984b" + + "fa6d1ea760e1ca6065cee41a1a279ca234933fe977a096222c0e14f9e5a17d5689305c6d7f1206" + + "a85a53c48ca010080799d6eeef61c98abd18767827dc05daea6b6fbd2e868410d9bee5e972a004" + + "ddd692dec8fa404ba4591e847a8cf35de21c2d3723bc8d775a66b594adeb967537729fe2a446b5" + + "48cd57a6")] + [assembly: InternalsVisibleTo("nunit.engine.tests, PublicKey="+ "002400000480000094000000060200000024000052534131000400000100010031eea370b1984b" + "fa6d1ea760e1ca6065cee41a1a279ca234933fe977a096222c0e14f9e5a17d5689305c6d7f1206"+ diff --git a/src/NUnitEngine/nunit.engine/nunit.engine.csproj b/src/NUnitEngine/nunit.engine/nunit.engine.csproj index 1ecf5c6b7..cecef1388 100644 --- a/src/NUnitEngine/nunit.engine/nunit.engine.csproj +++ b/src/NUnitEngine/nunit.engine/nunit.engine.csproj @@ -15,7 +15,6 @@ - From cbcdab1b905f172619dd9d8ed34e215364e03a59 Mon Sep 17 00:00:00 2001 From: Chris Maddock Date: Sun, 9 May 2021 17:15:04 +0100 Subject: [PATCH 2/2] Add ITestPackage interface, move TestPackage to nunit.engine.core, Refactor --- .../nunit3-console.tests/ConsoleMocks.cs | 17 ++++ .../MakeTestPackageTests.cs | 27 ++++-- .../nunit3-console/ConsoleRunner.cs | 12 +-- .../Extensibility/IProject.cs | 4 +- .../IRuntimeFrameworkService.cs | 2 +- .../nunit.engine.api/ITestEngine.cs | 23 ++++- .../nunit.engine.api/ITestPackage.cs | 91 +++++++++++++++++++ .../Agents/RemoteTestAgent.cs | 2 +- .../nunit.engine.core/Agents/TestAgent.cs | 2 +- .../Transports/ITestAgentTransport.cs | 2 +- .../Remoting/TestAgentRemotingTransport.cs | 2 +- .../Transports/Tcp/TestAgentTcpTransport.cs | 2 +- .../nunit.engine.core/ITestAgent.cs | 2 +- .../nunit.engine.core/ITestRunnerFactory.cs | 4 +- .../Internal/ResultHelper.cs | 4 +- .../Internal/TestPackageExtensions.cs | 13 ++- .../Runners/AbstractTestRunner.cs | 8 +- .../Runners/AggregatingTestRunner.cs | 4 +- .../Runners/DirectTestRunner.cs | 7 +- .../Runners/LocalTestRunner.cs | 2 +- .../Runners/MultipleTestDomainRunner.cs | 4 +- .../Runners/TestDomainRunner.cs | 2 +- .../Services/DomainManager.cs | 14 +-- .../Services/InProcessTestRunnerFactory.cs | 4 +- .../TestPackage.cs | 10 +- .../Api/TestPackageTests.cs | 2 +- .../Runners/TestEngineRunnerTests.cs | 2 +- .../AgentStoreTests.DummyTestAgent.cs | 2 +- .../Services/DomainManagerTests.cs | 2 +- .../Services/Fakes/FakeProjectService.cs | 2 +- .../Services/Fakes/FakeRuntimeService.cs | 2 +- .../RunnerSelectionTests.cs | 2 +- .../WorkingDirectoryTests.cs | 8 +- .../Remoting/TestAgentRemotingProxy.cs | 2 +- .../Transports/Tcp/TestAgentTcpProxy.cs | 2 +- .../nunit.engine/IProjectService.cs | 6 +- .../nunit.engine/Runners/MasterTestRunner.cs | 8 +- .../Runners/MultipleTestProcessRunner.cs | 4 +- .../nunit.engine/Runners/ProcessRunner.cs | 2 +- .../nunit.engine/Services/AgentLease.cs | 2 +- .../nunit.engine/Services/AgentProcess.cs | 2 +- .../Services/DefaultTestRunnerFactory.cs | 8 +- .../nunit.engine/Services/ProjectService.cs | 4 +- .../Services/RuntimeFrameworkService.cs | 7 +- .../nunit.engine/Services/TestAgency.cs | 2 +- src/NUnitEngine/nunit.engine/TestEngine.cs | 26 +++++- 46 files changed, 263 insertions(+), 98 deletions(-) create mode 100644 src/NUnitEngine/nunit.engine.api/ITestPackage.cs rename src/NUnitEngine/{nunit.engine.api => nunit.engine.core}/TestPackage.cs (94%) diff --git a/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs b/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs index 8f26a6c4c..414b5776a 100644 --- a/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs +++ b/src/NUnitConsole/nunit3-console.tests/ConsoleMocks.cs @@ -1,5 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt +using System.Text; using NSubstitute; using NUnit.Common; @@ -13,5 +14,21 @@ public static ConsoleOptions Options(params string[] args) var mockDefaultsProvider = Substitute.For(); return new ConsoleOptions(mockDefaultsProvider, mockFileSystem, args); } + + public class ExtendedTextWriter : NUnit.ConsoleRunner.ExtendedTextWriter + { + public override Encoding Encoding { get; } + public override void Write(ColorStyle style, string value) { } + + public override void WriteLine(ColorStyle style, string value) { } + + public override void WriteLabel(string label, object option) { } + + public override void WriteLabel(string label, object option, ColorStyle valueStyle) { } + + public override void WriteLabelLine(string label, object option) { } + + public override void WriteLabelLine(string label, object option, ColorStyle valueStyle) { } + } } } diff --git a/src/NUnitConsole/nunit3-console.tests/MakeTestPackageTests.cs b/src/NUnitConsole/nunit3-console.tests/MakeTestPackageTests.cs index f529e1c51..a39386805 100644 --- a/src/NUnitConsole/nunit3-console.tests/MakeTestPackageTests.cs +++ b/src/NUnitConsole/nunit3-console.tests/MakeTestPackageTests.cs @@ -1,6 +1,9 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt +using System; using System.IO; +using NUnit.Common; +using NUnit.Engine; using NUnit.Framework; namespace NUnit.ConsoleRunner.Tests @@ -11,7 +14,7 @@ public class MakeTestPackageTests public void SingleAssembly() { var options = ConsoleMocks.Options("test.dll"); - var package = ConsoleRunner.MakeTestPackage(options); + var package = CreatePackage(options); Assert.That(package.SubPackages.Count, Is.EqualTo(1)); Assert.That(package.SubPackages[0].FullName, Is.EqualTo(Path.GetFullPath("test.dll"))); @@ -22,7 +25,7 @@ public void MultipleAssemblies() { var names = new [] { "test1.dll", "test2.dll", "test3.dll" }; var options = ConsoleMocks.Options(names); - var package = ConsoleRunner.MakeTestPackage(options); + var package = CreatePackage(options); Assert.That(package.SubPackages.Count, Is.EqualTo(3)); Assert.That(package.SubPackages[0].FullName, Is.EqualTo(Path.GetFullPath("test1.dll"))); @@ -61,7 +64,7 @@ public void MultipleAssemblies() public void WhenOptionIsSpecified_PackageIncludesSetting(string option, string key, object val) { var options = ConsoleMocks.Options("test.dll", option); - var package = ConsoleRunner.MakeTestPackage(options); + var package = CreatePackage(options); Assert.That(package.Settings.ContainsKey(key), "Setting not included for {0}", option); Assert.That(package.Settings[key], Is.EqualTo(val), "NumberOfTestWorkers not set correctly for {0}", option); @@ -72,7 +75,7 @@ public void WhenOptionIsSpecified_PackageIncludesSetting(string option, string k public void WhenDebugging_NumberOfTestWorkersDefaultsToZero() { var options = ConsoleMocks.Options("test.dll", "--debug"); - var package = ConsoleRunner.MakeTestPackage(options); + var package = CreatePackage(options); Assert.That(package.Settings["DebugTests"], Is.EqualTo(true)); Assert.That(package.Settings["NumberOfTestWorkers"], Is.EqualTo(0)); @@ -82,7 +85,7 @@ public void WhenDebugging_NumberOfTestWorkersDefaultsToZero() public void WhenDebugging_NumberOfTestWorkersMayBeOverridden() { var options = ConsoleMocks.Options("test.dll", "--debug", "--workers=3"); - var package = ConsoleRunner.MakeTestPackage(options); + var package = CreatePackage(options); Assert.That(package.Settings["DebugTests"], Is.EqualTo(true)); Assert.That(package.Settings["NumberOfTestWorkers"], Is.EqualTo(3)); @@ -93,10 +96,22 @@ public void WhenDebugging_NumberOfTestWorkersMayBeOverridden() public void WhenNoOptionsAreSpecified_PackageContainsOnlyTwoSettings() { var options = ConsoleMocks.Options("test.dll"); - var package = ConsoleRunner.MakeTestPackage(options); + var package = CreatePackage(options); Assert.That(package.Settings.Keys, Is.EquivalentTo(new string[] { "WorkDirectory", "DisposeRunners" })); } + private static ITestPackage CreatePackage(ConsoleOptions options) + { + ITestPackage package; + using (var engine = new TestEngine()) + { + var consoleRunner = new ConsoleRunner(engine, options, new ConsoleMocks.ExtendedTextWriter()); + package = consoleRunner.MakeTestPackage(options); + } + + return package; + } + } } diff --git a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs index c7365b9a3..cf35817a5 100644 --- a/src/NUnitConsole/nunit3-console/ConsoleRunner.cs +++ b/src/NUnitConsole/nunit3-console/ConsoleRunner.cs @@ -85,7 +85,7 @@ public int Execute() DisplayTestFiles(); - TestPackage package = MakeTestPackage(_options); + var package = MakeTestPackage(_options); // We display the filters at this point so that any exception message // thrown by CreateTestFilter will be understandable. @@ -107,7 +107,7 @@ private void DisplayTestFiles() _outWriter.WriteLine(); } - private int ExploreTests(TestPackage package, TestFilter filter) + private int ExploreTests(ITestPackage package, TestFilter filter) { XmlNode result; @@ -130,7 +130,7 @@ private int ExploreTests(TestPackage package, TestFilter filter) return ConsoleRunner.OK; } - private int RunTests(TestPackage package, TestFilter filter) + private int RunTests(ITestPackage package, TestFilter filter) { var writer = new ColorConsoleWriter(!_options.NoColor); @@ -364,9 +364,9 @@ private IResultWriter GetResultWriter(OutputSpecification spec) } // This is public static for ease of testing - public static TestPackage MakeTestPackage(ConsoleOptions options) + public ITestPackage MakeTestPackage(ConsoleOptions options) { - TestPackage package = new TestPackage(options.InputFiles); + var package = _engine.CreatePackage(options.InputFiles); if (options.ProcessModelSpecified) package.AddSetting(EnginePackageSettings.ProcessModel, options.ProcessModel); @@ -453,7 +453,7 @@ public static TestPackage MakeTestPackage(ConsoleOptions options) /// /// Sets test parameters, handling backwards compatibility. /// - private static void AddTestParametersSetting(TestPackage testPackage, IDictionary testParameters) + private static void AddTestParametersSetting(ITestPackage testPackage, IDictionary testParameters) { testPackage.AddSetting(FrameworkPackageSettings.TestParametersDictionary, testParameters); diff --git a/src/NUnitEngine/nunit.engine.api/Extensibility/IProject.cs b/src/NUnitEngine/nunit.engine.api/Extensibility/IProject.cs index 95c5399c1..2ab449fb0 100644 --- a/src/NUnitEngine/nunit.engine.api/Extensibility/IProject.cs +++ b/src/NUnitEngine/nunit.engine.api/Extensibility/IProject.cs @@ -33,7 +33,7 @@ public interface IProject /// specified in the project format. /// /// A TestPackage - TestPackage GetTestPackage(); + ITestPackage GetTestPackage(); /// /// Gets a TestPackage for a specific configuration @@ -43,6 +43,6 @@ public interface IProject /// /// The name of the config to use /// A TestPackage for the named configuration. - TestPackage GetTestPackage(string configName); + ITestPackage GetTestPackage(string configName); } } diff --git a/src/NUnitEngine/nunit.engine.api/IRuntimeFrameworkService.cs b/src/NUnitEngine/nunit.engine.api/IRuntimeFrameworkService.cs index 0e48ebe6d..a40684118 100644 --- a/src/NUnitEngine/nunit.engine.api/IRuntimeFrameworkService.cs +++ b/src/NUnitEngine/nunit.engine.api/IRuntimeFrameworkService.cs @@ -32,6 +32,6 @@ public interface IRuntimeFrameworkService /// /// A TestPackage /// The selected RuntimeFramework - string SelectRuntimeFramework(TestPackage package); + string SelectRuntimeFramework(ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine.api/ITestEngine.cs b/src/NUnitEngine/nunit.engine.api/ITestEngine.cs index 198306d3f..ded43b35a 100644 --- a/src/NUnitEngine/nunit.engine.api/ITestEngine.cs +++ b/src/NUnitEngine/nunit.engine.api/ITestEngine.cs @@ -1,6 +1,7 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt using System; +using System.Collections.Generic; using System.Xml; namespace NUnit.Engine @@ -46,12 +47,30 @@ public interface ITestEngine : IDisposable /// void Initialize(); + /// + /// Construct a top-level ITestPackage that wraps one or more + /// test files, contained as subpackages. + /// + /// + /// Semantically equivalent to the array method. + /// + ITestPackage CreatePackage(IList testFiles); + + /// + /// Construct a top-level ITestPackage that wraps one or more + /// test files, contained as subpackages. + /// + /// + /// Semantically equivalent to the IList method. + /// + ITestPackage CreatePackage(params string[] testFiles); + /// /// Returns a test runner instance for use by clients in discovering, /// exploring and executing tests. /// - /// The TestPackage for which the runner is intended. + /// The ITestPackage for which the runner is intended. /// An ITestRunner. - ITestRunner GetRunner(TestPackage package); + ITestRunner GetRunner(ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine.api/ITestPackage.cs b/src/NUnitEngine/nunit.engine.api/ITestPackage.cs new file mode 100644 index 000000000..5dc94d906 --- /dev/null +++ b/src/NUnitEngine/nunit.engine.api/ITestPackage.cs @@ -0,0 +1,91 @@ +// Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt + + +using System.Collections.Generic; + +namespace NUnit.Engine +{ + /// + /// ITestPackage holds information about a set of test files to + /// be loaded by a TestRunner. Each ITestPackage represents + /// tests for one or more test files. + /// + /// Upon construction, a package is given an ID (string), which + /// remains unchanged for the lifetime of the ITestPackage instance. + /// The package ID is passed to the test framework for use in generating + /// test IDs. + /// + /// A runner that reloads test assemblies and wants the ids to remain stable + /// should avoid creating a new package but should instead use the original + /// package, changing settings as needed. This gives the best chance for the + /// tests in the reloaded assembly to match those originally loaded. + /// + public interface ITestPackage + { + /// + /// Every test package gets a unique ID used to prefix test IDs within that package. + /// + /// + /// The generated ID is only unique for packages created within the same application domain. + /// For that reason, NUnit pre-creates all test packages that will be needed. + /// + string ID { get; } + + /// + /// Gets the name of the package + /// + string Name { get; } + + /// + /// Gets the path to the file containing tests. It may be + /// an assembly or a recognized project type. + /// + string FullName { get; } + + /// + /// Gets the list of SubPackages contained in this package + /// + IList SubPackages { get; } + + /// + /// Gets the settings dictionary for this package. + /// + IDictionary Settings { get; } + + /// + /// Add a subpackage to the package. + /// + /// The subpackage to be added + void AddSubPackage(ITestPackage subPackage); + + /// + /// Add a subpackage to the package, specifying its name. This is + /// the only way to add a named subpackage to the top-level package. + /// + /// The name of the subpackage to be added + ITestPackage AddSubPackage(string packageName); + + /// + /// Add a setting to a package and all of its subpackages. + /// + /// The name of the setting + /// The value of the setting + /// + /// Once a package is created, subpackages may have been created + /// as well. If you add a setting directly to the Settings dictionary + /// of the package, the subpackages are not updated. This method is + /// used when the settings are intended to be reflected to all the + /// subpackages under the package. + /// + void AddSetting(string name, object value); + + /// + /// Return the value of a setting or a default, which + /// is specified by the caller. + /// + /// The name of the setting + /// The default value + /// + T GetSetting(string name, T defaultSetting); + } +} \ No newline at end of file diff --git a/src/NUnitEngine/nunit.engine.core/Agents/RemoteTestAgent.cs b/src/NUnitEngine/nunit.engine.core/Agents/RemoteTestAgent.cs index a038d8cc1..c83b5d847 100644 --- a/src/NUnitEngine/nunit.engine.core/Agents/RemoteTestAgent.cs +++ b/src/NUnitEngine/nunit.engine.core/Agents/RemoteTestAgent.cs @@ -36,7 +36,7 @@ public override void Stop() Transport.Stop(); } - public override ITestEngineRunner CreateRunner(TestPackage package) + public override ITestEngineRunner CreateRunner(ITestPackage package) { return Services.GetService().MakeTestRunner(package); } diff --git a/src/NUnitEngine/nunit.engine.core/Agents/TestAgent.cs b/src/NUnitEngine/nunit.engine.core/Agents/TestAgent.cs index 97060d39f..b006ada96 100644 --- a/src/NUnitEngine/nunit.engine.core/Agents/TestAgent.cs +++ b/src/NUnitEngine/nunit.engine.core/Agents/TestAgent.cs @@ -50,7 +50,7 @@ public TestAgent(Guid agentId, IServiceLocator services) /// /// Creates a test runner /// - public abstract ITestEngineRunner CreateRunner(TestPackage package); + public abstract ITestEngineRunner CreateRunner(ITestPackage package); public bool WaitForStop(int timeout) { diff --git a/src/NUnitEngine/nunit.engine.core/Communication/Transports/ITestAgentTransport.cs b/src/NUnitEngine/nunit.engine.core/Communication/Transports/ITestAgentTransport.cs index 78d409fac..9d103b0cf 100644 --- a/src/NUnitEngine/nunit.engine.core/Communication/Transports/ITestAgentTransport.cs +++ b/src/NUnitEngine/nunit.engine.core/Communication/Transports/ITestAgentTransport.cs @@ -11,6 +11,6 @@ namespace NUnit.Engine.Communication.Transports public interface ITestAgentTransport : ITransport { TestAgent Agent { get; } - ITestEngineRunner CreateRunner(TestPackage package); + ITestEngineRunner CreateRunner(ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine.core/Communication/Transports/Remoting/TestAgentRemotingTransport.cs b/src/NUnitEngine/nunit.engine.core/Communication/Transports/Remoting/TestAgentRemotingTransport.cs index ac8486355..a21fda881 100644 --- a/src/NUnitEngine/nunit.engine.core/Communication/Transports/Remoting/TestAgentRemotingTransport.cs +++ b/src/NUnitEngine/nunit.engine.core/Communication/Transports/Remoting/TestAgentRemotingTransport.cs @@ -95,7 +95,7 @@ public void Stop() }); } - public ITestEngineRunner CreateRunner(TestPackage package) + public ITestEngineRunner CreateRunner(ITestPackage package) { _runner = Agent.CreateRunner(package); return this; diff --git a/src/NUnitEngine/nunit.engine.core/Communication/Transports/Tcp/TestAgentTcpTransport.cs b/src/NUnitEngine/nunit.engine.core/Communication/Transports/Tcp/TestAgentTcpTransport.cs index bd8f913e3..4bfb31ea5 100644 --- a/src/NUnitEngine/nunit.engine.core/Communication/Transports/Tcp/TestAgentTcpTransport.cs +++ b/src/NUnitEngine/nunit.engine.core/Communication/Transports/Tcp/TestAgentTcpTransport.cs @@ -64,7 +64,7 @@ public void Stop() Agent.StopSignal.Set(); } - public ITestEngineRunner CreateRunner(TestPackage package) + public ITestEngineRunner CreateRunner(ITestPackage package) { return Agent.CreateRunner(package); } diff --git a/src/NUnitEngine/nunit.engine.core/ITestAgent.cs b/src/NUnitEngine/nunit.engine.core/ITestAgent.cs index 66c70b997..68995e4be 100644 --- a/src/NUnitEngine/nunit.engine.core/ITestAgent.cs +++ b/src/NUnitEngine/nunit.engine.core/ITestAgent.cs @@ -28,6 +28,6 @@ public interface ITestAgent /// /// Creates a test runner /// - ITestEngineRunner CreateRunner(TestPackage package); + ITestEngineRunner CreateRunner(ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine.core/ITestRunnerFactory.cs b/src/NUnitEngine/nunit.engine.core/ITestRunnerFactory.cs index 2b3b9ebfe..6288e8c9d 100644 --- a/src/NUnitEngine/nunit.engine.core/ITestRunnerFactory.cs +++ b/src/NUnitEngine/nunit.engine.core/ITestRunnerFactory.cs @@ -14,7 +14,7 @@ public interface ITestRunnerFactory /// /// The test package to be loaded by the runner /// A TestRunner - ITestEngineRunner MakeTestRunner(TestPackage package); + ITestEngineRunner MakeTestRunner(ITestPackage package); /// /// Return true if the provided runner is suitable for reuse in loading @@ -24,6 +24,6 @@ public interface ITestRunnerFactory /// An ITestRunner to possibly be used. /// The TestPackage to be loaded. /// True if the runner may be reused for the provided package. - bool CanReuse(ITestEngineRunner runner, TestPackage package); + bool CanReuse(ITestEngineRunner runner, ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine.core/Internal/ResultHelper.cs b/src/NUnitEngine/nunit.engine.core/Internal/ResultHelper.cs index 14007a2cf..c236d583b 100644 --- a/src/NUnitEngine/nunit.engine.core/Internal/ResultHelper.cs +++ b/src/NUnitEngine/nunit.engine.core/Internal/ResultHelper.cs @@ -54,7 +54,7 @@ public static TestEngineResult Aggregate(this TestEngineResult result, string el /// A new TestEngineResult with xml nodes for each assembly or project. /// The for which we are aggregating. /// A TestEngineResult with a single top-level element. - public static TestEngineResult MakeProjectResult(this TestEngineResult result, TestPackage package) + public static TestEngineResult MakeProjectResult(this TestEngineResult result, ITestPackage package) { return Aggregate(result, TEST_SUITE_ELEMENT, PROJECT_SUITE_TYPE, package.ID, package.Name, package.FullName); } @@ -65,7 +65,7 @@ public static TestEngineResult MakeProjectResult(this TestEngineResult result, T /// A new TestEngineResult with xml nodes for each assembly or project. /// The for which we are aggregating. /// A TestEngineResult with a single top-level element. - public static TestEngineResult MakeTestRunResult(this TestEngineResult result, TestPackage package) + public static TestEngineResult MakeTestRunResult(this TestEngineResult result, ITestPackage package) { return Aggregate(result, TEST_RUN_ELEMENT, package.ID, package.Name, package.FullName); } diff --git a/src/NUnitEngine/nunit.engine.core/Internal/TestPackageExtensions.cs b/src/NUnitEngine/nunit.engine.core/Internal/TestPackageExtensions.cs index 535561eba..2e85b19ea 100644 --- a/src/NUnitEngine/nunit.engine.core/Internal/TestPackageExtensions.cs +++ b/src/NUnitEngine/nunit.engine.core/Internal/TestPackageExtensions.cs @@ -1,37 +1,36 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt -using System; using System.Collections.Generic; namespace NUnit.Engine.Internal { - public delegate bool TestPackageSelectorDelegate(TestPackage p); + public delegate bool TestPackageSelectorDelegate(ITestPackage p); /// /// Extension methods for use with TestPackages /// public static class TestPackageExtensions { - public static bool IsAssemblyPackage(this TestPackage package) + public static bool IsAssemblyPackage(this ITestPackage package) { return package.FullName != null && PathUtils.IsAssemblyFileType(package.FullName); } - public static bool HasSubPackages(this TestPackage package) + public static bool HasSubPackages(this ITestPackage package) { return package.SubPackages.Count > 0; } - public static IList Select(this TestPackage package, TestPackageSelectorDelegate selector) + public static IList Select(this ITestPackage package, TestPackageSelectorDelegate selector) { - var selection = new List(); + var selection = new List(); AccumulatePackages(package, selection, selector); return selection; } - private static void AccumulatePackages(TestPackage package, IList selection, TestPackageSelectorDelegate selector) + private static void AccumulatePackages(ITestPackage package, IList selection, TestPackageSelectorDelegate selector) { if (selector(package)) selection.Add(package); diff --git a/src/NUnitEngine/nunit.engine.core/Runners/AbstractTestRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/AbstractTestRunner.cs index dd98eef2e..18b34b0bf 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/AbstractTestRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/AbstractTestRunner.cs @@ -14,7 +14,7 @@ namespace NUnit.Engine.Runners /// public abstract class AbstractTestRunner : ITestEngineRunner { - public AbstractTestRunner(IServiceLocator services, TestPackage package) + public AbstractTestRunner(IServiceLocator services, ITestPackage package) { Services = services; TestRunnerFactory = Services.GetService(); @@ -24,14 +24,14 @@ public AbstractTestRunner(IServiceLocator services, TestPackage package) /// /// Our Service Context /// - protected IServiceLocator Services { get; private set; } + protected IServiceLocator Services { get; } - protected ITestRunnerFactory TestRunnerFactory { get; private set; } + protected ITestRunnerFactory TestRunnerFactory { get; } /// /// The TestPackage for which this is the runner /// - protected TestPackage TestPackage { get; set; } + protected ITestPackage TestPackage { get; } /// /// The result of the last call to LoadPackage diff --git a/src/NUnitEngine/nunit.engine.core/Runners/AggregatingTestRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/AggregatingTestRunner.cs index 97b3e8c38..31eb6fac7 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/AggregatingTestRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/AggregatingTestRunner.cs @@ -65,7 +65,7 @@ public IList Runners } } - public AggregatingTestRunner(IServiceLocator services, TestPackage package) : base(services, package) + public AggregatingTestRunner(IServiceLocator services, ITestPackage package) : base(services, package) { } @@ -222,7 +222,7 @@ protected override void Dispose(bool disposing) throw new NUnitEngineUnloadException(_unloadExceptions); } - protected virtual ITestEngineRunner CreateRunner(TestPackage package) + protected virtual ITestEngineRunner CreateRunner(ITestPackage package) { return TestRunnerFactory.MakeTestRunner(package); } diff --git a/src/NUnitEngine/nunit.engine.core/Runners/DirectTestRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/DirectTestRunner.cs index 83b90f3ac..98528f6e3 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/DirectTestRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/DirectTestRunner.cs @@ -43,7 +43,7 @@ public abstract class DirectTestRunner : AbstractTestRunner protected AppDomain TestDomain { get; set; } - public DirectTestRunner(IServiceLocator services, TestPackage package) : base(services, package) + public DirectTestRunner(IServiceLocator services, ITestPackage package) : base(services, package) { // Bypass the resolver if not in the default AppDomain. This prevents trying to use the resolver within // NUnit's own automated tests (in a test AppDomain) which does not make sense anyway. @@ -101,6 +101,9 @@ protected override TestEngineResult LoadPackage() // found in the terminal nodes. var packagesToLoad = TestPackage.Select(p => !p.HasSubPackages()); + var testPackage = new TestPackage(); + testPackage.Select(p => !p.HasSubPackages()); + var driverService = Services.GetService(); _drivers.Clear(); @@ -129,7 +132,7 @@ protected override TestEngineResult LoadPackage() return result; } - private static string LoadDriver(IFrameworkDriver driver, string testFile, TestPackage subPackage) + private static string LoadDriver(IFrameworkDriver driver, string testFile, ITestPackage subPackage) { try { diff --git a/src/NUnitEngine/nunit.engine.core/Runners/LocalTestRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/LocalTestRunner.cs index ddd246136..c32c7a816 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/LocalTestRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/LocalTestRunner.cs @@ -9,7 +9,7 @@ namespace NUnit.Engine.Runners /// public class LocalTestRunner : DirectTestRunner { - public LocalTestRunner(IServiceLocator services, TestPackage package) : base(services, package) + public LocalTestRunner(IServiceLocator services, ITestPackage package) : base(services, package) { TestDomain = AppDomain.CurrentDomain; } diff --git a/src/NUnitEngine/nunit.engine.core/Runners/MultipleTestDomainRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/MultipleTestDomainRunner.cs index 99af3c72d..3c2372846 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/MultipleTestDomainRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/MultipleTestDomainRunner.cs @@ -14,9 +14,9 @@ public class MultipleTestDomainRunner : AggregatingTestRunner /// /// The services. /// The package. - public MultipleTestDomainRunner(IServiceLocator services, TestPackage package) : base(services, package) { } + public MultipleTestDomainRunner(IServiceLocator services, ITestPackage package) : base(services, package) { } - protected override ITestEngineRunner CreateRunner(TestPackage package) + protected override ITestEngineRunner CreateRunner(ITestPackage package) { return new TestDomainRunner(Services, package); } diff --git a/src/NUnitEngine/nunit.engine.core/Runners/TestDomainRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/TestDomainRunner.cs index 6d926f7cc..31270fbf1 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/TestDomainRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/TestDomainRunner.cs @@ -13,7 +13,7 @@ public class TestDomainRunner : DirectTestRunner { private DomainManager _domainManager; - public TestDomainRunner(IServiceLocator services, TestPackage package) : base(services, package) + public TestDomainRunner(IServiceLocator services, ITestPackage package) : base(services, package) { _domainManager = Services.GetService(); } diff --git a/src/NUnitEngine/nunit.engine.core/Services/DomainManager.cs b/src/NUnitEngine/nunit.engine.core/Services/DomainManager.cs index a646af39a..334d1765a 100644 --- a/src/NUnitEngine/nunit.engine.core/Services/DomainManager.cs +++ b/src/NUnitEngine/nunit.engine.core/Services/DomainManager.cs @@ -30,7 +30,7 @@ public class DomainManager : Service /// Construct an application domain for running a test package /// /// The TestPackage to be run - public AppDomain CreateDomain( TestPackage package ) + public AppDomain CreateDomain(ITestPackage package) { AppDomainSetup setup = CreateAppDomainSetup(package); @@ -71,7 +71,7 @@ public AppDomain CreateDomain( TestPackage package ) } // Made separate and internal for testing - AppDomainSetup CreateAppDomainSetup(TestPackage package) + AppDomainSetup CreateAppDomainSetup(ITestPackage package) { AppDomainSetup setup = new AppDomainSetup(); @@ -180,7 +180,7 @@ private void UnloadOnThread() /// /// The package /// The ApplicationBase - public static string GetApplicationBase(TestPackage package) + public static string GetApplicationBase(ITestPackage package) { Guard.ArgumentNotNull(package, "package"); @@ -203,7 +203,7 @@ public static string GetApplicationBase(TestPackage package) return appBase; } - public static string GetConfigFile(string appBase, TestPackage package) + public static string GetConfigFile(string appBase, ITestPackage package) { Guard.ArgumentNotNullOrEmpty(appBase, "appBase"); Guard.ArgumentNotNull(package, "package"); @@ -241,7 +241,7 @@ private static bool IsExecutable(string fileName) return ext == ".dll" || ext == ".exe"; } - public static string GetCommonAppBase(IList packages) + private static string GetCommonAppBase(IList packages) { var assemblies = new List(); foreach (var package in packages) @@ -271,7 +271,7 @@ public static string GetPrivateBinPath(string basePath, string fileName) return GetPrivateBinPath(basePath, new string[] { fileName }); } - public static string GetPrivateBinPath(string appBase, TestPackage package) + public static string GetPrivateBinPath(string appBase, ITestPackage package) { var binPath = package.GetSetting(EnginePackageSettings.PrivateBinPath, string.Empty); @@ -285,7 +285,7 @@ public static string GetPrivateBinPath(string appBase, TestPackage package) return binPath; } - public static string GetPrivateBinPath(string basePath, IList packages) + private static string GetPrivateBinPath(string basePath, IList packages) { var assemblies = new List(); foreach (var package in packages) diff --git a/src/NUnitEngine/nunit.engine.core/Services/InProcessTestRunnerFactory.cs b/src/NUnitEngine/nunit.engine.core/Services/InProcessTestRunnerFactory.cs index 4aa458db9..fc58bdb2f 100644 --- a/src/NUnitEngine/nunit.engine.core/Services/InProcessTestRunnerFactory.cs +++ b/src/NUnitEngine/nunit.engine.core/Services/InProcessTestRunnerFactory.cs @@ -20,7 +20,7 @@ public class InProcessTestRunnerFactory : Service, ITestRunnerFactory /// /// The TestPackage to be loaded and run /// An ITestEngineRunner - public virtual ITestEngineRunner MakeTestRunner(TestPackage package) + public virtual ITestEngineRunner MakeTestRunner(ITestPackage package) { #if !NETFRAMEWORK return new LocalTestRunner(ServiceContext, package); @@ -35,7 +35,7 @@ public virtual ITestEngineRunner MakeTestRunner(TestPackage package) #endif } - public virtual bool CanReuse(ITestEngineRunner runner, TestPackage package) + public virtual bool CanReuse(ITestEngineRunner runner, ITestPackage package) { return false; } diff --git a/src/NUnitEngine/nunit.engine.api/TestPackage.cs b/src/NUnitEngine/nunit.engine.core/TestPackage.cs similarity index 94% rename from src/NUnitEngine/nunit.engine.api/TestPackage.cs rename to src/NUnitEngine/nunit.engine.core/TestPackage.cs index b0d74bd83..f86ae2f5e 100644 --- a/src/NUnitEngine/nunit.engine.api/TestPackage.cs +++ b/src/NUnitEngine/nunit.engine.core/TestPackage.cs @@ -23,7 +23,7 @@ namespace NUnit.Engine /// tests in the reloaded assembly to match those originally loaded. /// [Serializable] - public class TestPackage + public class TestPackage : ITestPackage { /// /// Construct a top-level TestPackage that wraps one or more @@ -90,7 +90,7 @@ public string Name /// /// Gets the list of SubPackages contained in this package /// - public IList SubPackages { get; } = new List(); + public IList SubPackages { get; } = new List(); /// /// Gets the settings dictionary for this package. @@ -101,7 +101,7 @@ public string Name /// Add a subpackage to the package. /// /// The subpackage to be added - public void AddSubPackage(TestPackage subPackage) + public void AddSubPackage(ITestPackage subPackage) { SubPackages.Add(subPackage); @@ -114,9 +114,9 @@ public void AddSubPackage(TestPackage subPackage) /// the only way to add a named subpackage to the top-level package. /// /// The name of the subpackage to be added - public TestPackage AddSubPackage(string packageName) + public ITestPackage AddSubPackage(string packageName) { - var subPackage = new TestPackage() { FullName = Path.GetFullPath(packageName) }; + var subPackage = new TestPackage { FullName = Path.GetFullPath(packageName) }; SubPackages.Add(subPackage); return subPackage; diff --git a/src/NUnitEngine/nunit.engine.tests/Api/TestPackageTests.cs b/src/NUnitEngine/nunit.engine.tests/Api/TestPackageTests.cs index 44f7d7f0f..b0a2dc2ad 100644 --- a/src/NUnitEngine/nunit.engine.tests/Api/TestPackageTests.cs +++ b/src/NUnitEngine/nunit.engine.tests/Api/TestPackageTests.cs @@ -38,7 +38,7 @@ public void HasSubPackageForEachFile() Assert.That(_package.SubPackages.Count, Is.EqualTo(_fileNames.Length)); for (int i = 0; i < _fileNames.Length; i++) { - TestPackage subPackage = _package.SubPackages[i]; + var subPackage = _package.SubPackages[i]; string fileName = _fileNames[i]; Assert.That(subPackage.Name, Is.EqualTo(fileName)); diff --git a/src/NUnitEngine/nunit.engine.tests/Runners/TestEngineRunnerTests.cs b/src/NUnitEngine/nunit.engine.tests/Runners/TestEngineRunnerTests.cs index bd02c8204..4a071b9e7 100644 --- a/src/NUnitEngine/nunit.engine.tests/Runners/TestEngineRunnerTests.cs +++ b/src/NUnitEngine/nunit.engine.tests/Runners/TestEngineRunnerTests.cs @@ -25,7 +25,7 @@ namespace NUnit.Engine.Runners.Tests //[TestFixture(typeof(MultipleTestProcessRunner), 1)] //[TestFixture(typeof(MultipleTestProcessRunner), 3)] //[Platform(Exclude = "Mono", Reason = "Currently causing long delays or hangs under Mono")] - public class TestEngineRunnerTests where TRunner : AbstractTestRunner + internal class TestEngineRunnerTests where TRunner : AbstractTestRunner { protected TestPackage _package; protected ServiceContext _services; diff --git a/src/NUnitEngine/nunit.engine.tests/Services/AgentStoreTests.DummyTestAgent.cs b/src/NUnitEngine/nunit.engine.tests/Services/AgentStoreTests.DummyTestAgent.cs index 409e1d023..ae05d0a04 100644 --- a/src/NUnitEngine/nunit.engine.tests/Services/AgentStoreTests.DummyTestAgent.cs +++ b/src/NUnitEngine/nunit.engine.tests/Services/AgentStoreTests.DummyTestAgent.cs @@ -16,7 +16,7 @@ public DummyTestAgent(Guid id) public Guid Id { get; } - public ITestEngineRunner CreateRunner(TestPackage package) + public ITestEngineRunner CreateRunner(ITestPackage package) { throw new NotImplementedException(); } diff --git a/src/NUnitEngine/nunit.engine.tests/Services/DomainManagerTests.cs b/src/NUnitEngine/nunit.engine.tests/Services/DomainManagerTests.cs index 046d7e0f2..c402ade03 100644 --- a/src/NUnitEngine/nunit.engine.tests/Services/DomainManagerTests.cs +++ b/src/NUnitEngine/nunit.engine.tests/Services/DomainManagerTests.cs @@ -13,7 +13,7 @@ public class DomainManagerTests private DomainManager _domainManager; // We use a named subpackage because that's what is normally // used by the Domain Manager - private TestPackage _package = new TestPackage(MockAssembly.AssemblyPath).SubPackages[0]; + private readonly ITestPackage _package = new TestPackage(MockAssembly.AssemblyPath).SubPackages[0]; [SetUp] public void CreateDomainManager() diff --git a/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeProjectService.cs b/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeProjectService.cs index 65f0ed0d3..7ea63f61f 100644 --- a/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeProjectService.cs +++ b/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeProjectService.cs @@ -22,7 +22,7 @@ public void Add(string projectName, params string[] assemblies) _projects.Add(projectName, assemblies); } - void IProjectService.ExpandProjectPackage(TestPackage package) + void IProjectService.ExpandProjectPackage(ITestPackage package) { if (_projects.ContainsKey(package.Name)) { diff --git a/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeRuntimeService.cs b/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeRuntimeService.cs index 9b181e991..6a80007e1 100644 --- a/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeRuntimeService.cs +++ b/src/NUnitEngine/nunit.engine.tests/Services/Fakes/FakeRuntimeService.cs @@ -9,7 +9,7 @@ bool IRuntimeFrameworkService.IsAvailable(string framework) return true; } - string IRuntimeFrameworkService.SelectRuntimeFramework(TestPackage package) + string IRuntimeFrameworkService.SelectRuntimeFramework(ITestPackage package) { return string.Empty; } diff --git a/src/NUnitEngine/nunit.engine.tests/Services/TestRunnerFactoryTests/RunnerSelectionTests.cs b/src/NUnitEngine/nunit.engine.tests/Services/TestRunnerFactoryTests/RunnerSelectionTests.cs index 9618bb976..5ccf7f3e8 100644 --- a/src/NUnitEngine/nunit.engine.tests/Services/TestRunnerFactoryTests/RunnerSelectionTests.cs +++ b/src/NUnitEngine/nunit.engine.tests/Services/TestRunnerFactoryTests/RunnerSelectionTests.cs @@ -42,7 +42,7 @@ public void SetUp() } [TestCaseSource(nameof(TestCases))] - public void RunnerSelectionTest(TestPackage package, RunnerResult expected) + public void RunnerSelectionTest(ITestPackage package, RunnerResult expected) { var masterRunner = new MasterTestRunner(_services, package); var runner = masterRunner.GetEngineRunner(); diff --git a/src/NUnitEngine/nunit.engine.tests/WorkingDirectoryTests.cs b/src/NUnitEngine/nunit.engine.tests/WorkingDirectoryTests.cs index 9e7c7ed3c..6291ec4a8 100644 --- a/src/NUnitEngine/nunit.engine.tests/WorkingDirectoryTests.cs +++ b/src/NUnitEngine/nunit.engine.tests/WorkingDirectoryTests.cs @@ -23,10 +23,14 @@ public void ResetWorkingDir() Directory.SetCurrentDirectory(_origWorkingDir); } - [Test] + [Test, Platform("Net")] //https://github.com/nunit/nunit-console/issues/946 public void EngineCanBeCreatedFromAnyWorkingDirectory() { - Assert.That(() => TestEngineActivator.CreateInstance(), Throws.Nothing); + Assert.That(() => + { + var engine = TestEngineActivator.CreateInstance(); + engine.Dispose(); + }, Throws.Nothing); } } } diff --git a/src/NUnitEngine/nunit.engine/Communication/Transports/Remoting/TestAgentRemotingProxy.cs b/src/NUnitEngine/nunit.engine/Communication/Transports/Remoting/TestAgentRemotingProxy.cs index fa17a0745..2d9248dce 100644 --- a/src/NUnitEngine/nunit.engine/Communication/Transports/Remoting/TestAgentRemotingProxy.cs +++ b/src/NUnitEngine/nunit.engine/Communication/Transports/Remoting/TestAgentRemotingProxy.cs @@ -23,7 +23,7 @@ public TestAgentRemotingProxy(ITestAgent remoteAgent, Guid id) public Guid Id { get; private set; } - public ITestEngineRunner CreateRunner(TestPackage package) + public ITestEngineRunner CreateRunner(ITestPackage package) { return _remoteAgent.CreateRunner(package); } diff --git a/src/NUnitEngine/nunit.engine/Communication/Transports/Tcp/TestAgentTcpProxy.cs b/src/NUnitEngine/nunit.engine/Communication/Transports/Tcp/TestAgentTcpProxy.cs index efb1862d8..dc1b2995d 100644 --- a/src/NUnitEngine/nunit.engine/Communication/Transports/Tcp/TestAgentTcpProxy.cs +++ b/src/NUnitEngine/nunit.engine/Communication/Transports/Tcp/TestAgentTcpProxy.cs @@ -24,7 +24,7 @@ public TestAgentTcpProxy(Socket socket, Guid id) public Guid Id { get; } - public ITestEngineRunner CreateRunner(TestPackage package) + public ITestEngineRunner CreateRunner(ITestPackage package) { SendCommandMessage("CreateRunner", package); diff --git a/src/NUnitEngine/nunit.engine/IProjectService.cs b/src/NUnitEngine/nunit.engine/IProjectService.cs index 2b3c6fce6..4e00062dc 100644 --- a/src/NUnitEngine/nunit.engine/IProjectService.cs +++ b/src/NUnitEngine/nunit.engine/IProjectService.cs @@ -20,12 +20,12 @@ public interface IProjectService bool CanLoadFrom(string path); /// - /// Expands a TestPackage based on a known project format, populating it + /// Expands an ITestPackage based on a known project format, populating it /// with the project contents and any settings the project provides. /// Note that the package file path must be checked to ensure that it is /// a known project format before calling this method. /// - /// The TestPackage to be expanded - void ExpandProjectPackage(TestPackage package); + /// The ITestPackage to be expanded + void ExpandProjectPackage(ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine/Runners/MasterTestRunner.cs b/src/NUnitEngine/nunit.engine/Runners/MasterTestRunner.cs index 41734a93d..a88a9c39d 100644 --- a/src/NUnitEngine/nunit.engine/Runners/MasterTestRunner.cs +++ b/src/NUnitEngine/nunit.engine/Runners/MasterTestRunner.cs @@ -47,7 +47,7 @@ public class MasterTestRunner : ITestRunner private const int WAIT_FOR_CANCEL_TO_COMPLETE = 5000; - public MasterTestRunner(IServiceLocator services, TestPackage package) + public MasterTestRunner(IServiceLocator services, ITestPackage package) { if (services == null) throw new ArgumentNullException("services"); if (package == null) throw new ArgumentNullException("package"); @@ -72,7 +72,7 @@ public MasterTestRunner(IServiceLocator services, TestPackage package) /// /// The TestPackage for which this is the runner /// - protected TestPackage TestPackage { get; set; } + protected ITestPackage TestPackage { get; set; } /// /// The result of the last call to LoadPackage @@ -326,7 +326,7 @@ private TestEngineResult PrepareResult(TestEngineResult result) return topLevelResult; } - private void EnsurePackagesAreExpanded(TestPackage package) + private void EnsurePackagesAreExpanded(ITestPackage package) { if (package == null) throw new ArgumentNullException("package"); @@ -341,7 +341,7 @@ private void EnsurePackagesAreExpanded(TestPackage package) } } - private bool IsProjectPackage(TestPackage package) + private bool IsProjectPackage(ITestPackage package) { if (package == null) throw new ArgumentNullException("package"); diff --git a/src/NUnitEngine/nunit.engine/Runners/MultipleTestProcessRunner.cs b/src/NUnitEngine/nunit.engine/Runners/MultipleTestProcessRunner.cs index 7af28769c..cf41f1de1 100644 --- a/src/NUnitEngine/nunit.engine/Runners/MultipleTestProcessRunner.cs +++ b/src/NUnitEngine/nunit.engine/Runners/MultipleTestProcessRunner.cs @@ -16,7 +16,7 @@ public class MultipleTestProcessRunner : AggregatingTestRunner /// /// The services. /// The package. - public MultipleTestProcessRunner(IServiceLocator services, TestPackage package) : base(services, package) + public MultipleTestProcessRunner(IServiceLocator services, ITestPackage package) : base(services, package) { } @@ -29,7 +29,7 @@ public override int LevelOfParallelism } } - protected override ITestEngineRunner CreateRunner(TestPackage package) + protected override ITestEngineRunner CreateRunner(ITestPackage package) { return new ProcessRunner(Services, package); } diff --git a/src/NUnitEngine/nunit.engine/Runners/ProcessRunner.cs b/src/NUnitEngine/nunit.engine/Runners/ProcessRunner.cs index a98aa3fc3..e9255a409 100644 --- a/src/NUnitEngine/nunit.engine/Runners/ProcessRunner.cs +++ b/src/NUnitEngine/nunit.engine/Runners/ProcessRunner.cs @@ -28,7 +28,7 @@ public class ProcessRunner : AbstractTestRunner private ITestEngineRunner _remoteRunner; private TestAgency _agency; - public ProcessRunner(IServiceLocator services, TestPackage package) : base(services, package) + public ProcessRunner(IServiceLocator services, ITestPackage package) : base(services, package) { _agency = Services.GetService(); } diff --git a/src/NUnitEngine/nunit.engine/Services/AgentLease.cs b/src/NUnitEngine/nunit.engine/Services/AgentLease.cs index e91561a7e..53f0c81d3 100644 --- a/src/NUnitEngine/nunit.engine/Services/AgentLease.cs +++ b/src/NUnitEngine/nunit.engine/Services/AgentLease.cs @@ -12,6 +12,6 @@ public interface IAgentLease : IDisposable /// /// Creates a test runner on the acquired agent. /// - ITestEngineRunner CreateRunner(TestPackage package); + ITestEngineRunner CreateRunner(ITestPackage package); } } diff --git a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs index aafad242c..d4c2efd96 100644 --- a/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs +++ b/src/NUnitEngine/nunit.engine/Services/AgentProcess.cs @@ -14,7 +14,7 @@ public class AgentProcess : Process { private static readonly Logger log = InternalTrace.GetLogger(typeof(AgentProcess)); - public AgentProcess(TestAgency agency, TestPackage package, Guid agentId) + public AgentProcess(TestAgency agency, ITestPackage package, Guid agentId) { // Get target runtime string runtimeSetting = package.GetSetting(EnginePackageSettings.TargetRuntimeFramework, ""); diff --git a/src/NUnitEngine/nunit.engine/Services/DefaultTestRunnerFactory.cs b/src/NUnitEngine/nunit.engine/Services/DefaultTestRunnerFactory.cs index 2bc61544c..5a1589396 100644 --- a/src/NUnitEngine/nunit.engine/Services/DefaultTestRunnerFactory.cs +++ b/src/NUnitEngine/nunit.engine/Services/DefaultTestRunnerFactory.cs @@ -33,7 +33,7 @@ public override void StartService() /// /// The TestPackage to be loaded and run /// A TestRunner - public override ITestEngineRunner MakeTestRunner(TestPackage package) + public override ITestEngineRunner MakeTestRunner(ITestPackage package) { #if !NETFRAMEWORK if (package.SubPackages.Count > 1) @@ -50,7 +50,7 @@ public override ITestEngineRunner MakeTestRunner(TestPackage package) default: case ProcessModel.Default: bool isNested = false; - foreach (TestPackage subPackage in package.SubPackages) + foreach (var subPackage in package.SubPackages) { if (subPackage.SubPackages.Count > 0) { @@ -78,7 +78,7 @@ public override ITestEngineRunner MakeTestRunner(TestPackage package) // TODO: Review this method once used by a gui - the implementation is // overly simplistic. It is not currently used by any known runner. - public override bool CanReuse(ITestEngineRunner runner, TestPackage package) + public override bool CanReuse(ITestEngineRunner runner, ITestPackage package) { ProcessModel processModel = GetTargetProcessModel(package); @@ -101,7 +101,7 @@ public override bool CanReuse(ITestEngineRunner runner, TestPackage package) /// /// A TestPackage /// The string representation of the process model or "Default" if none was specified. - private ProcessModel GetTargetProcessModel(TestPackage package) + private ProcessModel GetTargetProcessModel(ITestPackage package) { return (ProcessModel)System.Enum.Parse( typeof(ProcessModel), diff --git a/src/NUnitEngine/nunit.engine/Services/ProjectService.cs b/src/NUnitEngine/nunit.engine/Services/ProjectService.cs index 10d0628f5..0f51cad63 100644 --- a/src/NUnitEngine/nunit.engine/Services/ProjectService.cs +++ b/src/NUnitEngine/nunit.engine/Services/ProjectService.cs @@ -34,7 +34,7 @@ public bool CanLoadFrom(string path) /// a known project format before calling this method. /// /// The TestPackage to be expanded - public void ExpandProjectPackage(TestPackage package) + public void ExpandProjectPackage(ITestPackage package) { Guard.ArgumentNotNull(package, "package"); Guard.ArgumentValid(package.SubPackages.Count == 0, "Package is already expanded", "package"); @@ -52,7 +52,7 @@ public void ExpandProjectPackage(TestPackage package) else Guard.ArgumentValid(project.ConfigNames.Contains(activeConfig), $"Requested configuration {activeConfig} was not found", "package"); - TestPackage tempPackage = project.GetTestPackage(activeConfig); + var tempPackage = project.GetTestPackage(activeConfig); // Add info about the configurations to the project package tempPackage.Settings[EnginePackageSettings.ActiveConfig] = activeConfig; diff --git a/src/NUnitEngine/nunit.engine/Services/RuntimeFrameworkService.cs b/src/NUnitEngine/nunit.engine/Services/RuntimeFrameworkService.cs index 362213e33..0a949f256 100644 --- a/src/NUnitEngine/nunit.engine/Services/RuntimeFrameworkService.cs +++ b/src/NUnitEngine/nunit.engine/Services/RuntimeFrameworkService.cs @@ -92,7 +92,7 @@ private static bool RuntimesMatch(RuntimeType requested, RuntimeType available) /// /// A TestPackage /// A string representing the selected RuntimeFramework - public string SelectRuntimeFramework(TestPackage package) + public string SelectRuntimeFramework(ITestPackage package) { // Evaluate package target framework ApplyImageData(package); @@ -101,7 +101,7 @@ public string SelectRuntimeFramework(TestPackage package) return targetFramework.ToString(); } - private RuntimeFramework SelectRuntimeFrameworkInner(TestPackage package) + private RuntimeFramework SelectRuntimeFrameworkInner(ITestPackage package) { foreach (var subPackage in package.SubPackages) { @@ -200,8 +200,7 @@ public RuntimeFramework GetBestAvailableFramework(RuntimeFramework target) /// Use Mono.Cecil to get information about all assemblies and /// apply it to the package using special internal keywords. /// - /// - private static void ApplyImageData(TestPackage package) + private static void ApplyImageData(ITestPackage package) { string packageName = package.FullName; diff --git a/src/NUnitEngine/nunit.engine/Services/TestAgency.cs b/src/NUnitEngine/nunit.engine/Services/TestAgency.cs index 88f066dfb..b73e25d63 100644 --- a/src/NUnitEngine/nunit.engine/Services/TestAgency.cs +++ b/src/NUnitEngine/nunit.engine/Services/TestAgency.cs @@ -50,7 +50,7 @@ public void Register(ITestAgent agent) _agentStore.Register(agent); } - public ITestAgent GetAgent(TestPackage package) + public ITestAgent GetAgent(ITestPackage package) { // Target Runtime must be specified by this point string runtimeSetting = package.GetSetting(EnginePackageSettings.TargetRuntimeFramework, ""); diff --git a/src/NUnitEngine/nunit.engine/TestEngine.cs b/src/NUnitEngine/nunit.engine/TestEngine.cs index 421335c74..efba3514a 100644 --- a/src/NUnitEngine/nunit.engine/TestEngine.cs +++ b/src/NUnitEngine/nunit.engine/TestEngine.cs @@ -1,10 +1,8 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt -using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; -using System.Reflection; -using System.Runtime.InteropServices; using NUnit.Engine.Internal; using NUnit.Engine.Services; @@ -73,13 +71,33 @@ public void Initialize() Services.ServiceManager.StartServices(); } + /// + /// Creates a new test package + /// + /// A list of either test assemblies or project files, which will + /// be added to the ITestPackage as sub-packages + public ITestPackage CreatePackage(IList testFiles) + { + return new TestPackage(testFiles); + } + + /// + /// Creates a new test package + /// + /// A list of either test assemblies or project files, which will + /// be added to the ITestPackage as sub-packages + public ITestPackage CreatePackage(params string[] testFiles) + { + return new TestPackage(testFiles); + } + /// /// Returns a test runner for use by clients that need to load the /// tests once and run them multiple times. If necessary, the /// services are initialized first. /// /// An ITestRunner. - public ITestRunner GetRunner(TestPackage package) + public ITestRunner GetRunner(ITestPackage package) { if(!Services.ServiceManager.ServicesInitialized) Initialize();