diff --git a/package-tests.cake b/package-tests.cake index 8050d442a..9bfdfe3b3 100644 --- a/package-tests.cake +++ b/package-tests.cake @@ -158,7 +158,7 @@ StandardRunnerTests.Add(new PackageTest( StandardRunnerTests.Add(new PackageTest( 1, "NUnit301Test", "Run a test under NUnit 3.0.1 using 2009 API", - "testdata/NUnit3.0/net462/NUnit3.0.1.dll", + "testdata/NUnit3.0.1/net462/NUnit3.0.1.dll", new ExpectedResult("Passed") { Assemblies = new[] { new ExpectedAssemblyResult("NUnit3.0.1.dll", "net462") } @@ -167,7 +167,7 @@ StandardRunnerTests.Add(new PackageTest( StandardRunnerTests.Add(new PackageTest( 1, "NUnit32Test", "Run a test under NUnit 3.2 using 20018 API", - "testdata/NUnit3.0/net462/NUnit3.2.dll", + "testdata/NUnit3.2/net462/NUnit3.2.dll", new ExpectedResult("Passed") { Assemblies = new[] { new ExpectedAssemblyResult("NUnit3.2.dll", "net462") } @@ -176,7 +176,7 @@ StandardRunnerTests.Add(new PackageTest( StandardRunnerTests.Add(new PackageTest( 1, "NUnit310Test", "Run a test under NUnit 3.10 using 2018 API", - "testdata/NUnit3.0/net462/NUnit3.10.dll", + "testdata/NUnit3.10/net462/NUnit3.10.dll", new ExpectedResult("Passed") { Assemblies = new[] { new ExpectedAssemblyResult("NUnit3.10.dll", "net462") } diff --git a/src/NUnitEngine/nunit.engine.api/Extensibility/IFrameworkDriver.cs b/src/NUnitEngine/nunit.engine.api/Extensibility/IFrameworkDriver.cs index 3f8f190bb..46ed1f841 100644 --- a/src/NUnitEngine/nunit.engine.api/Extensibility/IFrameworkDriver.cs +++ b/src/NUnitEngine/nunit.engine.api/Extensibility/IFrameworkDriver.cs @@ -18,7 +18,7 @@ public interface IFrameworkDriver /// Gets and sets the unique identifier for this driver, /// used to ensure that test ids are unique across drivers. /// - string ID { get; set; } + string ID { get; } /// /// Loads the tests in an assembly. diff --git a/src/NUnitEngine/nunit.engine.core.tests/Drivers/NUnitFrameworkDriverTests.cs b/src/NUnitEngine/nunit.engine.core.tests/Drivers/NUnitFrameworkDriverTests.cs index 76cfa2339..d317e9b4f 100644 --- a/src/NUnitEngine/nunit.engine.core.tests/Drivers/NUnitFrameworkDriverTests.cs +++ b/src/NUnitEngine/nunit.engine.core.tests/Drivers/NUnitFrameworkDriverTests.cs @@ -126,14 +126,41 @@ public void RunTestsAction_WithoutLoad_ThrowsInvalidOperationException() } #if NETFRAMEWORK - //[Test] - public void RunTestsAction_WithInvalidFilterElement_ThrowsNUnitEngineException() + // Nested Class tests Api Selection in the driver + public class ApiSelectionTests() + { + [TestCase("4.2.2", "2018")] + [TestCase("3.14.0", "2018")] + [TestCase("3.2.0", "2018")] + [TestCase("3.0.1", "2009")] + [TestCase("3.0.0", "2009")] + public void CorrectApiIsSelected(string nunitVersion, string apiVersion) + { + var driver = new NUnitFrameworkDriver(AppDomain.CurrentDomain, "99", new AssemblyName() + { + Name = "nunit.framework", + Version = new Version(nunitVersion) + }); + + Assert.That(driver.API, Is.EqualTo(apiVersion)); + } + } + + [Test] + public void RunTestsAction_WithInvalidFilterElement_ThrowsException() { _driver.Load(_mockAssemblyPath, _settings); var invalidFilter = "foo"; var ex = Assert.Catch(() => _driver.Run(new NullListener(), invalidFilter)); - Assert.That(ex, Is.TypeOf()); + + if (_whichApi == "2018") + { + Assert.That(ex, Is.TypeOf()); + Assert.That(ex.InnerException, Is.TypeOf()); + } + else + Assert.That(ex, Is.TypeOf()); } private class CallbackEventHandler : System.Web.UI.ICallbackEventHandler diff --git a/src/NUnitEngine/nunit.engine.core.tests/Drivers/NotRunnableFrameworkDriverTests.cs b/src/NUnitEngine/nunit.engine.core.tests/Drivers/NotRunnableFrameworkDriverTests.cs index 0119e74ed..4bd37a513 100644 --- a/src/NUnitEngine/nunit.engine.core.tests/Drivers/NotRunnableFrameworkDriverTests.cs +++ b/src/NUnitEngine/nunit.engine.core.tests/Drivers/NotRunnableFrameworkDriverTests.cs @@ -14,7 +14,6 @@ namespace NUnit.Engine.Drivers // Functional tests of the NUnitFrameworkDriver calling into the framework. public abstract class NotRunnableFrameworkDriverTests { - private const string DRIVER_ID = "99"; private const string EXPECTED_ID = "99-1"; protected string? _expectedRunState; @@ -95,7 +94,6 @@ public void Run(string filePath, string expectedType) private IFrameworkDriver GetDriver(string filePath) { IFrameworkDriver driver = CreateDriver(filePath); - driver.ID = DRIVER_ID; return driver; } @@ -126,7 +124,7 @@ public InvalidAssemblyFrameworkDriverTests() protected override IFrameworkDriver CreateDriver(string filePath) { - return new InvalidAssemblyFrameworkDriver(filePath, _expectedReason ?? "Not Specified"); + return new InvalidAssemblyFrameworkDriver(filePath, "99", _expectedReason ?? "Not Specified"); } } @@ -142,7 +140,7 @@ public SkippedAssemblyFrameworkDriverTests() protected override IFrameworkDriver CreateDriver(string filePath) { - return new SkippedAssemblyFrameworkDriver(filePath); + return new SkippedAssemblyFrameworkDriver(filePath, "99"); } } } diff --git a/src/NUnitEngine/nunit.engine.core.tests/Runners/TestAgentRunnerTests.cs b/src/NUnitEngine/nunit.engine.core.tests/Runners/TestAgentRunnerTests.cs index 1d9edf5fb..b02f94a7a 100644 --- a/src/NUnitEngine/nunit.engine.core.tests/Runners/TestAgentRunnerTests.cs +++ b/src/NUnitEngine/nunit.engine.core.tests/Runners/TestAgentRunnerTests.cs @@ -69,7 +69,7 @@ public void Run() CheckPackageLoading(); } - //[Test] + [Test] public void RunAsync() { var asyncResult = _runner.RunAsync(null, TestFilter.Empty); diff --git a/src/NUnitEngine/nunit.engine.core.tests/Services/DriverServiceTests.cs b/src/NUnitEngine/nunit.engine.core.tests/Services/DriverServiceTests.cs index 5cfc5b2a4..538263071 100644 --- a/src/NUnitEngine/nunit.engine.core.tests/Services/DriverServiceTests.cs +++ b/src/NUnitEngine/nunit.engine.core.tests/Services/DriverServiceTests.cs @@ -7,7 +7,7 @@ using NUnit.Engine.Drivers; using NUnit.Engine.Extensibility; -namespace NUnit.Engine.Services.Tests +namespace NUnit.Engine.Services { [TestFixture] public class DriverServiceTests @@ -30,11 +30,10 @@ public void CorrectDriverIsUsed(string fileName, bool skipNonTestAssemblies, Typ static TestCaseData[] DriverSelectionTestCases = new[] { - // TODO: make commented tests work new TestCaseData("mock-assembly.dll", false, typeof(NUnitFrameworkDriver)), new TestCaseData("mock-assembly.dll", true, typeof(NUnitFrameworkDriver)), - //new TestCaseData("notest-assembly.dll", false, typeof(NUnitFrameworkDriver)), - //new TestCaseData"notest-assembly.dll", true, typeof(SkippedAssemblyFrameworkDriver)) + new TestCaseData("notest-assembly.dll", false, typeof(NUnitFrameworkDriver)).Ignore("Assembly not present"), + new TestCaseData("notest-assembly.dll", true, typeof(SkippedAssemblyFrameworkDriver)).Ignore("Assembly not present"), // Invalid cases should work with all target runtimes new TestCaseData("mock-assembly.pdb", false, typeof(InvalidAssemblyFrameworkDriver)), diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/DriverService.cs b/src/NUnitEngine/nunit.engine.core/Drivers/DriverService.cs index 8a88c1a98..48d33c8d3 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/DriverService.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/DriverService.cs @@ -54,10 +54,10 @@ public DriverService() public IFrameworkDriver GetDriver(AppDomain domain, TestPackage package, string assemblyPath, string? targetFramework, bool skipNonTestAssemblies) { if (!File.Exists(assemblyPath)) - return new InvalidAssemblyFrameworkDriver(assemblyPath, "File not found: " + assemblyPath); + return new InvalidAssemblyFrameworkDriver(assemblyPath, package.ID, "File not found: " + assemblyPath); if (!PathUtils.IsAssemblyFileType(assemblyPath)) - return new InvalidAssemblyFrameworkDriver(assemblyPath, "File type is not supported"); + return new InvalidAssemblyFrameworkDriver(assemblyPath, package.ID, "File type is not supported"); if (targetFramework != null) { @@ -70,9 +70,9 @@ public IFrameworkDriver GetDriver(AppDomain domain, TestPackage package, string if (platform == "Silverlight" || platform == ".NETPortable" || platform == ".NETStandard" || platform == ".NETCompactFramework") if (skipNonTestAssemblies) - return new SkippedAssemblyFrameworkDriver(assemblyPath); + return new SkippedAssemblyFrameworkDriver(assemblyPath, "X"); else - return new InvalidAssemblyFrameworkDriver(assemblyPath, platform + + return new InvalidAssemblyFrameworkDriver(assemblyPath, package.ID, platform + " test assemblies are not supported by this version of the engine"); } @@ -84,7 +84,7 @@ public IFrameworkDriver GetDriver(AppDomain domain, TestPackage package, string { foreach (var attr in assemblyDef.CustomAttributes) if (attr.AttributeType.FullName == "NUnit.Framework.NonTestAssemblyAttribute") - return new SkippedAssemblyFrameworkDriver(assemblyPath); + return new SkippedAssemblyFrameworkDriver(assemblyPath, package.ID); } foreach (var factory in _factories) @@ -108,14 +108,14 @@ public IFrameworkDriver GetDriver(AppDomain domain, TestPackage package, string } catch (BadImageFormatException ex) { - return new InvalidAssemblyFrameworkDriver(assemblyPath, ex.Message); + return new InvalidAssemblyFrameworkDriver(assemblyPath, package.ID, ex.Message); } if (skipNonTestAssemblies) - return new SkippedAssemblyFrameworkDriver(assemblyPath); + return new SkippedAssemblyFrameworkDriver(assemblyPath, package.ID); else - return new InvalidAssemblyFrameworkDriver(assemblyPath, string.Format("No suitable tests found in '{0}'.\n" + - "Either assembly contains no tests or proper test driver has not been found.", assemblyPath)); + return new InvalidAssemblyFrameworkDriver(assemblyPath, package.ID, + $"No suitable tests found in '{assemblyPath}'.\r\nEither assembly contains no tests or proper test driver has not been found."); } } } diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/NUnit3DriverFactory.cs b/src/NUnitEngine/nunit.engine.core/Drivers/NUnit3DriverFactory.cs index 1e3e44f2f..7205e8d0a 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/NUnit3DriverFactory.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/NUnit3DriverFactory.cs @@ -46,6 +46,7 @@ public IFrameworkDriver GetDriver(AppDomain domain, string id, AssemblyName refe /// public IFrameworkDriver GetDriver(string id, AssemblyName reference) { + Guard.ArgumentNotNullOrEmpty(id, nameof(id)); Guard.ArgumentValid(IsSupportedTestFramework(reference), "Invalid framework", "reference"); log.Info("Using NUnitFrameworkDriver"); return new NUnitFrameworkDriver(id, reference); diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi.cs b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi.cs index d84a05cf3..8af86e081 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi.cs @@ -21,13 +21,18 @@ public interface NUnitFrameworkApi int CountTestCases(string filter); /// - /// Executes the tests in an assembly. + /// Executes the tests in an assembly synchronously. /// /// An ITestEventHandler that receives progress notices /// A XML string representing the filter that controls which tests are executed /// An Xml string representing the result string Run(ITestEventListener? listener, string filter); + /// + /// Executes the tests in an assembly asynchronously. + /// + /// A callback that receives XML progress notices + /// A filter that controls which tests are executed void RunAsync(Action callback, string filter); /// diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2009.cs b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2009.cs index 170a3daca..4fb9b40fa 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2009.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2009.cs @@ -1,5 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt +#if NETFRAMEWORK using System; using System.Collections.Generic; using System.IO; @@ -10,7 +11,6 @@ namespace NUnit.Engine.Drivers { -#if NETFRAMEWORK /// /// This is the original NUnit 3 API, which only works for .NET Framework. /// As far as I can discover, it first appeared in pre-release 2.9.1, @@ -27,15 +27,15 @@ class NUnitFrameworkApi2009 : NUnitFrameworkApi const string CONTROLLER_TYPE = "NUnit.Framework.Api.FrameworkController"; - string _driverId; + private readonly string _driverId; - AppDomain _testDomain; - AssemblyName _nunitRef; + private readonly AppDomain _testDomain; + private readonly AssemblyName _nunitRef; - string? _testAssemblyPath; + private string? _testAssemblyPath; - object? _frameworkController; - Type? _frameworkControllerType; + private object? _frameworkController; + private Type? _frameworkControllerType; public NUnitFrameworkApi2009(AppDomain testDomain, string driverId, AssemblyName nunitRef) { @@ -60,11 +60,19 @@ public string Load(string testAssemblyPath, IDictionary settings var requestedRuntime = settings.ContainsKey(EnginePackageSettings.RequestedRuntimeFramework) ? settings[EnginePackageSettings.RequestedRuntimeFramework] : null; - var idPrefix = string.IsNullOrEmpty(_driverId) ? "" : _driverId + "-"; + var idPrefix = _driverId + "-"; try { - _frameworkController = CreateObject(CONTROLLER_TYPE, _testAssemblyPath, idPrefix, settings); + _frameworkController = _testDomain.CreateInstanceAndUnwrap( + _nunitRef.FullName, + CONTROLLER_TYPE, + false, + 0, + null, + new object[] { _testAssemblyPath, idPrefix, settings }, + null, + null).ShouldNotBeNull(); } catch (BadImageFormatException ex) when (requestedRuntime != null) { @@ -144,8 +152,10 @@ private object CreateObject(string typeName, params object?[]? args) { try { - return _testDomain.CreateInstanceAndUnwrap( - _nunitRef.FullName, typeName, false, 0, null, args, null, null)!; + return _testDomain.CreateInstanceAndUnwrap( + _nunitRef.FullName, typeName, false, 0, null, args, null, null)!; + //return _testDomain.CreateInstanceAndUnwrap( + // _nunitRef.FullName, typeName, false, 0, null, args, null, null)!; } catch (TargetInvocationException ex) { @@ -153,5 +163,5 @@ private object CreateObject(string typeName, params object?[]? args) } } } -#endif } +#endif diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2018.cs b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2018.cs index b6da7a9ac..8d5778764 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2018.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkApi2018.cs @@ -4,12 +4,9 @@ using System.Collections.Generic; using System.IO; using System.Reflection; -using System.Runtime.Remoting; using System.Runtime.Serialization; using NUnit.Common; -using NUnit.Engine.Extensibility; using NUnit.Engine.Internal; -using TestCentric.Metadata; namespace NUnit.Engine.Drivers { @@ -34,14 +31,20 @@ public class NUnitFrameworkApi2018 : NUnitFrameworkApi const string CONTROLLER_TYPE = "NUnit.Framework.Api.FrameworkController"; - private string _driverId; + private readonly string _driverId; - AssemblyName _nunitRef; - string? _testAssemblyPath; + private readonly AssemblyName _nunitRef; - object? _frameworkController; - Type? _frameworkControllerType; + private object? _frameworkController; + private Type? _frameworkControllerType; +#if NETCOREAPP + private TestAssemblyLoadContext? _assemblyLoadContext; + //private Assembly? _testAssembly; + private Assembly? _frameworkAssembly; +#endif + + private string? _testAssemblyPath; public NUnitFrameworkApi2018(string driverId, AssemblyName nunitRef) { @@ -49,27 +52,9 @@ public NUnitFrameworkApi2018(string driverId, AssemblyName nunitRef) Guard.ArgumentNotNull(nunitRef, nameof(nunitRef)); _driverId = driverId; -#if NETFRAMEWORK - //if (RemotingServices.IsTransparentProxy(driver)) - //{ - // // We need to replace nunitRef with a reference valid in the current domain. - // var frameworkRef = AssemblyNameReference.Parse(nunitRef.FullName); - // var frameworkDef = new DefaultAssemblyResolver().Resolve(frameworkRef); - // frameworkDef.MainModule. - //} - //if (_nunitRef == null) - _nunitRef = nunitRef; -#else _nunitRef = nunitRef; -#endif } -#if NETCOREAPP - TestAssemblyLoadContext? _assemblyLoadContext; - Assembly? _testAssembly; - Assembly? _frameworkAssembly; -#endif - public string Load(string testAssemblyPath, IDictionary settings) { Guard.ArgumentNotNull(testAssemblyPath, nameof(testAssemblyPath)); @@ -81,10 +66,6 @@ public string Load(string testAssemblyPath, IDictionary settings var idPrefix = string.IsNullOrEmpty(_driverId) ? "" : _driverId + "-"; #if NETFRAMEWORK - // Normally, the caller should check for an invalid requested runtime, but we make sure here - var requestedRuntime = settings.ContainsKey(EnginePackageSettings.RequestedRuntimeFramework) - ? settings[EnginePackageSettings.RequestedRuntimeFramework] : null; - try { _frameworkController = AppDomain.CurrentDomain.CreateInstanceAndUnwrap( @@ -97,14 +78,6 @@ public string Load(string testAssemblyPath, IDictionary settings null, null).ShouldNotBeNull(); } - catch (BadImageFormatException ex) when (requestedRuntime != null) - { - throw new NUnitEngineException($"Requested runtime {requestedRuntime} is not suitable for use with test assembly {_testAssemblyPath}", ex); - } - catch (SerializationException ex) - { - throw new NUnitEngineException("The NUnit 3 driver cannot support this test assembly. Use a platform specific runner.", ex); - } catch (Exception ex) { string msg = $"Failed to load {_nunitRef.FullName}\r\n Codebase: {_nunitRef.CodeBase}"; @@ -119,10 +92,10 @@ public string Load(string testAssemblyPath, IDictionary settings #else _assemblyLoadContext = new TestAssemblyLoadContext(testAssemblyPath); - _testAssembly = LoadAssembly(testAssemblyPath); + var testAssembly = LoadAssembly(testAssemblyPath); _frameworkAssembly = LoadAssembly(_nunitRef); - _frameworkController = CreateInstance(CONTROLLER_TYPE, _testAssembly, idPrefix, settings); + _frameworkController = CreateInstance(CONTROLLER_TYPE, testAssembly, idPrefix, settings); if (_frameworkController == null) { log.Error(INVALID_FRAMEWORK_MESSAGE); @@ -148,7 +121,7 @@ public string Run(ITestEventListener? listener, string filter) { CheckLoadWasCalled(); log.Info("Running {0} - see separate log file", Path.GetFileName(_testAssemblyPath.ShouldNotBeNull())); - Action? callback = /*listener != null ? listener.OnTestEvent :*/ (Action?)null; + Action? callback = null; return (string)ExecuteMethod(RUN_METHOD, new[] { typeof(Action), typeof(string) }, callback, filter); } @@ -177,20 +150,7 @@ private void CheckLoadWasCalled() throw new InvalidOperationException(LOAD_MESSAGE); } -#if NETFRAMEWORK - //private ObjectHandle? CreateInstance(string typeName, params object?[]? args) - //{ - // try - // { - // return _testDomain.CreateInstance( - // _nunitRef.FullName, typeName, false, 0, null, args, null, null)!; - // } - // catch (TargetInvocationException ex) - // { - // throw new NUnitEngineException("The NUnit 3 driver encountered an error while executing reflected code.", ex.InnerException); - // } - //} -#else +#if NETCOREAPP private object CreateInstance(string typeName, params object?[]? args) { var type = _frameworkAssembly.ShouldNotBeNull().GetType(typeName, throwOnError: true)!; diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkDriver.cs b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkDriver.cs index 2d37c30ab..5c082e7cc 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkDriver.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/NUnitFrameworkDriver.cs @@ -2,12 +2,10 @@ using System; using System.Collections.Generic; -using System.IO; using System.Reflection; using NUnit.Common; using NUnit.Engine.Internal; using NUnit.Engine.Extensibility; -using NUnit.Engine.Runners; namespace NUnit.Engine.Drivers { @@ -17,6 +15,7 @@ namespace NUnit.Engine.Drivers /// public class NUnitFrameworkDriver : IFrameworkDriver { + static readonly Version MINIMUM_NUNIT_VERSION = new Version(3, 2, 0); static readonly ILogger log = InternalTrace.GetLogger(nameof(NUnitFrameworkDriver)); readonly NUnitFrameworkApi _api; @@ -28,10 +27,35 @@ public class NUnitFrameworkDriver : IFrameworkDriver /// The application domain in which to create the FrameworkController /// An AssemblyName referring to the test framework. public NUnitFrameworkDriver(AppDomain testDomain, string id, AssemblyName nunitRef) - : this(testDomain, nunitRef.Version >= new Version(3,2,0) ? "2018" : "2009", id, nunitRef) { } + { + Guard.ArgumentNotNull(testDomain, nameof(testDomain)); + Guard.ArgumentNotNullOrEmpty(id, nameof(id)); + Guard.ArgumentNotNull(nunitRef, nameof(nunitRef)); + + ID = id; + + if (nunitRef.Version >= MINIMUM_NUNIT_VERSION) + { + API = "2018"; + _api = (NUnitFrameworkApi)testDomain.CreateInstanceFromAndUnwrap( + Assembly.GetExecutingAssembly().Location, + "NUnit.Engine.Drivers.NUnitFrameworkApi2018", + false, + 0, + null, + new object[] { ID, nunitRef }, + null, + null).ShouldNotBeNull(); + } + else + { + API = "2009"; + _api = new NUnitFrameworkApi2009(testDomain, ID, nunitRef); + } + } /// - /// Internal generic constructor used directly by our tests. + /// Internal generic constructor used by our tests. /// /// The application domain in which to create the FrameworkController /// An AssemblyName referring to the test framework. @@ -44,11 +68,12 @@ internal NUnitFrameworkDriver(AppDomain testDomain, string api, string id, Assem Guard.ArgumentNotNull(nunitRef, nameof(nunitRef)); ID = id; + API = api; _api = api == "2018" ? (NUnitFrameworkApi)testDomain.CreateInstanceFromAndUnwrap( Assembly.GetExecutingAssembly().Location, - $"NUnit.Engine.Drivers.NUnitFrameworkApi{api}", + typeof(NUnitFrameworkApi2018).FullName!, false, 0, null, @@ -57,12 +82,6 @@ internal NUnitFrameworkDriver(AppDomain testDomain, string api, string id, Assem null).ShouldNotBeNull() : new NUnitFrameworkApi2009(testDomain, ID, nunitRef); } - - private Assembly? TestDomain_AssemblyResolve(object? sender, ResolveEventArgs args) - { - //var fileName = args.Name; - return null; - } #else /// /// Construct an NUnitFrameworkDriver @@ -74,16 +93,22 @@ public NUnitFrameworkDriver(string id, AssemblyName nunitRef) Guard.ArgumentNotNull(nunitRef, nameof(nunitRef)); ID = id; + API = "2018"; _api = new NUnitFrameworkApi2018(ID, nunitRef); } #endif + /// + /// String naming the API in use, for use by tests + /// + internal string API { get; } = string.Empty; + /// /// An id prefix that will be passed to the test framework and used as part of the /// test ids created. /// - public string ID { get; set; } = string.Empty; + public string ID { get; } = string.Empty; /// /// Loads the tests in an assembly. diff --git a/src/NUnitEngine/nunit.engine.core/Drivers/NotRunnableFrameworkDriver.cs b/src/NUnitEngine/nunit.engine.core/Drivers/NotRunnableFrameworkDriver.cs index 6967be78f..e7ceab661 100644 --- a/src/NUnitEngine/nunit.engine.core/Drivers/NotRunnableFrameworkDriver.cs +++ b/src/NUnitEngine/nunit.engine.core/Drivers/NotRunnableFrameworkDriver.cs @@ -36,16 +36,17 @@ public abstract class NotRunnableFrameworkDriver : IFrameworkDriver protected string _label; #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable. - public NotRunnableFrameworkDriver(string assemblyPath, string message) + public NotRunnableFrameworkDriver(string assemblyPath, string id, string message) #pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable. { _name = Escape(Path.GetFileName(assemblyPath)); _fullname = Escape(Path.GetFullPath(assemblyPath)); _message = Escape(message); _type = new List { ".dll", ".exe" }.Contains(Path.GetExtension(assemblyPath)) ? "Assembly" : "Unknown"; + ID = id; } - public string ID { get; set; } + public string ID { get; } public string Load(string assemblyPath, IDictionary settings) @@ -90,21 +91,13 @@ private string GetLoadResult() _type, TestID, _name, _fullname, _runstate, _message); } - private string TestID - { - get - { - return string.IsNullOrEmpty(ID) - ? "1" - : ID + "-1"; - } - } + private string TestID => ID + "-1"; } public class InvalidAssemblyFrameworkDriver :NotRunnableFrameworkDriver { - public InvalidAssemblyFrameworkDriver(string assemblyPath, string message) - : base(assemblyPath, message) + public InvalidAssemblyFrameworkDriver(string assemblyPath, string id, string message) + : base(assemblyPath, id, message) { _runstate = "NotRunnable"; _result = "Failed"; @@ -114,8 +107,8 @@ public InvalidAssemblyFrameworkDriver(string assemblyPath, string message) public class SkippedAssemblyFrameworkDriver : NotRunnableFrameworkDriver { - public SkippedAssemblyFrameworkDriver(string assemblyPath) - : base(assemblyPath, "Skipping non-test assembly") + public SkippedAssemblyFrameworkDriver(string assemblyPath, string id) + : base(assemblyPath, id, "Skipping non-test assembly") { _runstate = "Runnable"; _result = "Skipped"; diff --git a/src/NUnitEngine/nunit.engine.core/Runners/TestAgentRunner.cs b/src/NUnitEngine/nunit.engine.core/Runners/TestAgentRunner.cs index 83cde05df..5f2fe6dfc 100644 --- a/src/NUnitEngine/nunit.engine.core/Runners/TestAgentRunner.cs +++ b/src/NUnitEngine/nunit.engine.core/Runners/TestAgentRunner.cs @@ -115,8 +115,6 @@ public virtual TestEngineResult Load() _driver = DriverService.GetDriver(TestDomain, assemblyPackage, testFile, targetFramework, skipNonTestAssemblies); - _driver.ID = assemblyPackage.ID; - try { return new TestEngineResult(_driver.Load(testFile, assemblyPackage.Settings)); diff --git a/src/NUnitEngine/nunit.engine/Runners/TestEngineRunner.cs b/src/NUnitEngine/nunit.engine/Runners/TestEngineRunner.cs index bd9e2188e..521e5e36d 100644 --- a/src/NUnitEngine/nunit.engine/Runners/TestEngineRunner.cs +++ b/src/NUnitEngine/nunit.engine/Runners/TestEngineRunner.cs @@ -3,7 +3,6 @@ using System; using System.ComponentModel; using NUnit.Common; -using NUnit.Engine.Internal; namespace NUnit.Engine.Runners { diff --git a/src/TestData/NUnit3.0.1/NUnit3.0.1.csproj b/src/TestData/NUnit3.0.1/NUnit3.0.1.csproj index ede18b3e3..a88c94326 100644 --- a/src/TestData/NUnit3.0.1/NUnit3.0.1.csproj +++ b/src/TestData/NUnit3.0.1/NUnit3.0.1.csproj @@ -3,11 +3,11 @@ NUnit.TestData net462 - ../../../bin/$(Configuration)/testdata/nunit3.0 + ../../../bin/$(Configuration)/testdata/nunit3.0.1 - + diff --git a/src/TestData/NUnit3.10/NUnit3.10.csproj b/src/TestData/NUnit3.10/NUnit3.10.csproj index ede18b3e3..ac6ddfb5f 100644 --- a/src/TestData/NUnit3.10/NUnit3.10.csproj +++ b/src/TestData/NUnit3.10/NUnit3.10.csproj @@ -3,11 +3,11 @@ NUnit.TestData net462 - ../../../bin/$(Configuration)/testdata/nunit3.0 + ../../../bin/$(Configuration)/testdata/nunit3.10 - + diff --git a/src/TestData/NUnit3.2/NUnit3.2.csproj b/src/TestData/NUnit3.2/NUnit3.2.csproj index ede18b3e3..d0a9e0376 100644 --- a/src/TestData/NUnit3.2/NUnit3.2.csproj +++ b/src/TestData/NUnit3.2/NUnit3.2.csproj @@ -3,11 +3,11 @@ NUnit.TestData net462 - ../../../bin/$(Configuration)/testdata/nunit3.0 + ../../../bin/$(Configuration)/testdata/nunit3.2 - +