Skip to content

Commit e662ebf

Browse files
authored
Merge pull request #1491 from nunit/net80-runner
Create net80 runner
2 parents 9456170 + fd9ff74 commit e662ebf

File tree

6 files changed

+128
-27
lines changed

6 files changed

+128
-27
lines changed

NUnitConsole.sln

+7
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "runners", "runners", "{F3E8
6666
ProjectSection(SolutionItems) = preProject
6767
nuget\runners\DotnetToolSettings.xml = nuget\runners\DotnetToolSettings.xml
6868
nuget\runners\nunit.console-runner-with-extensions.nuspec = nuget\runners\nunit.console-runner-with-extensions.nuspec
69+
nuget\runners\nunit.console-runner.net80.nuspec = nuget\runners\nunit.console-runner.net80.nuspec
6970
nuget\runners\nunit.console-runner.netcore.nuspec = nuget\runners\nunit.console-runner.netcore.nuspec
7071
nuget\runners\nunit.console-runner.nuspec = nuget\runners\nunit.console-runner.nuspec
7172
nuget\runners\nunit.console.nuget.addins = nuget\runners\nunit.console.nuget.addins
@@ -146,6 +147,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "InvalidTestNames", "src\Tes
146147
EndProject
147148
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppContextTest", "src\TestData\AppContextTest\AppContextTest.csproj", "{E43A3E4B-B050-471B-B43C-0DF60FD44376}"
148149
EndProject
150+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "net8.0", "net8.0", "{303CF83E-2A87-4882-8CAC-3EB59AAD81FC}"
151+
ProjectSection(SolutionItems) = preProject
152+
nuget\runners\net8.0\DotnetToolSettings.xml = nuget\runners\net8.0\DotnetToolSettings.xml
153+
EndProjectSection
154+
EndProject
149155
Global
150156
GlobalSection(SolutionConfigurationPlatforms) = preSolution
151157
Debug|Any CPU = Debug|Any CPU
@@ -258,6 +264,7 @@ Global
258264
{6B550F25-1CA5-4F3E-B631-1ECCD4CB94E4} = {2ECE1CFB-9436-4149-B7E4-1FB1786FDE9F}
259265
{58E18ACC-1F7E-4395-817E-E7EF943E0C77} = {2ECE1CFB-9436-4149-B7E4-1FB1786FDE9F}
260266
{E43A3E4B-B050-471B-B43C-0DF60FD44376} = {2ECE1CFB-9436-4149-B7E4-1FB1786FDE9F}
267+
{303CF83E-2A87-4882-8CAC-3EB59AAD81FC} = {F3E87D0F-6F06-4C0B-AE06-42C0834C3C6E}
261268
EndGlobalSection
262269
GlobalSection(ExtensibilityGlobals) = postSolution
263270
SolutionGuid = {D8E4FC26-5422-4C51-8BBC-D1AC0A578711}

build.cake

+9
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ FilePath[] AGENT_PDB_FILES_NETCORE = {
4545
PackageDefinition NUnitConsoleNuGetPackage;
4646
PackageDefinition NUnitConsoleRunnerNuGetPackage;
4747
PackageDefinition NUnitConsoleRunnerNetCorePackage;
48+
PackageDefinition NUnitConsoleRunnerNet80Package;
4849
PackageDefinition NUnitEnginePackage;
4950
PackageDefinition NUnitEngineApiPackage;
5051
PackageDefinition NUnitConsoleRunnerChocolateyPackage;
@@ -90,6 +91,14 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
9091
+ $"NUnit.ConsoleRunner.NetCore.{BuildSettings.PackageVersion}/nunit.exe"),
9192
tests: NetCoreRunnerTests),
9293

94+
NUnitConsoleRunnerNet80Package = new DotNetToolPackage(
95+
id: "NUnit.ConsoleRunner.Net80",
96+
source: BuildSettings.NuGetDirectory + "runners/nunit.console-runner.net80.nuspec",
97+
checks: new PackageCheck[] { HasFiles("nunit-net80.exe") },
98+
testRunner: new ConsoleRunnerSelfTester(BuildSettings.NuGetTestDirectory
99+
+ $"NUnit.ConsoleRunner.Net80.{BuildSettings.PackageVersion}/nunit-net80.exe"),
100+
tests: NetCoreRunnerTests),
101+
93102
NUnitConsoleRunnerChocolateyPackage = new ChocolateyPackage(
94103
id: "nunit-console-runner",
95104
source: BuildSettings.ChocolateyDirectory + "nunit-console-runner.nuspec",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<DotNetCliTool>
3+
<Commands>
4+
<Command Name="nunit-net80" EntryPoint="nunit3-console.dll" Runner="dotnet" />
5+
</Commands>
6+
</DotNetCliTool>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?xml version="1.0"?>
2+
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
3+
<metadata>
4+
<id>NUnit.ConsoleRunner.Net80</id>
5+
<title>NUnit Console Runner (.NET 8.0)</title>
6+
<version>$version$</version>
7+
<authors>Charlie Poole, Rob Prouse</authors>
8+
<owners>Charlie Poole, Rob Prouse</owners>
9+
<license type="file">LICENSE.txt</license>
10+
<projectUrl>https://nunit.org</projectUrl>
11+
<repository type="git" url="https://github.com/nunit/nunit-console"/>
12+
<iconUrl>https://cdn.rawgit.com/nunit/resources/master/images/icon/nunit_256.png</iconUrl>
13+
<icon>images\nunit_256.png</icon>
14+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
15+
<summary>.NET Core build of the console runner for the NUnit unit-testing framework.</summary>
16+
<description>
17+
This package includes the .NET 8.0 build of the NUnit console runner and test engine.
18+
19+
Any extensions, if needed, may be installed as separate packages.
20+
</description>
21+
<releaseNotes>https://docs.nunit.org/articles/nunit/release-notes/console-and-engine.html</releaseNotes>
22+
<language>en-US</language>
23+
<tags>nunit test testing tdd runner</tags>
24+
<copyright>Copyright (c) 2021-2024 Charlie Poole, Rob Prouse</copyright>
25+
<packageTypes>
26+
<packageType name="DotnetTool" />
27+
</packageTypes>
28+
</metadata>
29+
<files>
30+
<file src="../../LICENSE.txt" />
31+
<file src="../../NOTICES.txt" />
32+
33+
<file src="net8.0/nunit3-console.exe" target="tools/net8.0/any" />
34+
<file src="net8.0/nunit3-console.pdb" target="tools/net8.0/any" />
35+
<file src="net8.0/nunit3-console.dll" target="tools/net8.0/any" />
36+
<file src="net8.0/nunit3-console.dll.config" target="tools/net8.0/any" />
37+
<file src="net8.0/nunit3-console.deps.json" target="tools/net8.0/any" />
38+
<file src="net8.0/nunit3-console.runtimeconfig.json" target="tools/net8.0/any" />
39+
<file src="net8.0/nunit.engine.core.dll" target="tools/net8.0/any" />
40+
<file src="net8.0/nunit.engine.core.pdb" target="tools/net8.0/any" />
41+
<file src="net8.0/nunit.engine.dll" target="tools/net8.0/any" />
42+
<file src="net8.0/nunit.engine.pdb" target="tools/net8.0/any" />
43+
<file src="net8.0/nunit.engine.api.dll" target="tools/net8.0/any" />
44+
<file src="net8.0/nunit.engine.api.pdb" target="tools/net8.0/any" />
45+
<file src="net8.0/nunit.engine.api.xml" target="tools/net8.0/any" />
46+
<file src="net8.0/testcentric.engine.metadata.dll" target="tools/net8.0/any" />
47+
<file src="net8.0/Microsoft.Extensions.DependencyModel.dll" target="tools/net8.0/any" />
48+
<file src="../../nuget/runners/nunit.console.nuget.addins" target="tools/net8.0/any"/>
49+
<file src="../../nuget/runners/net8.0/DotnetToolSettings.xml" target="tools/net8.0/any"/>
50+
51+
<file src="../../nunit_256.png" target="images"/>
52+
</files>
53+
</package>

src/NUnitEngine/nunit.engine.core.tests/Services/DriverServiceTests.cs

+52-26
Original file line numberDiff line numberDiff line change
@@ -30,37 +30,63 @@ public void ServiceIsStarted()
3030
Assert.That(_driverService.Status, Is.EqualTo(ServiceStatus.Started), "Failed to start service");
3131
}
3232

33+
[TestCaseSource(nameof(DriverSelectionTestCases))]
34+
public void CorrectDriverIsUsed(string fileName, bool skipNonTestAssemblies, Type expectedType)
35+
{
36+
var driver = _driverService.GetDriver(AppDomain.CurrentDomain, Path.Combine(TestContext.CurrentContext.TestDirectory, fileName), null, skipNonTestAssemblies);
37+
Assert.That(driver, Is.InstanceOf(expectedType));
38+
}
3339

34-
#if NET5_0_OR_GREATER
35-
[TestCase("mock-assembly.dll", false, typeof(NUnitNetCore31Driver))]
36-
[TestCase("mock-assembly.dll", true, typeof(NUnitNetCore31Driver))]
37-
//[TestCase("notest-assembly.dll", false, typeof(NUnitNetCore31Driver))]
40+
static TestCaseData[] DriverSelectionTestCases = new[]
41+
{
42+
#if NETFRAMEWORK
43+
new TestCaseData("mock-assembly.dll", false, typeof(NUnit3FrameworkDriver)),
44+
new TestCaseData("mock-assembly.dll", true, typeof(NUnit3FrameworkDriver)),
45+
new TestCaseData("notest-assembly.dll", false, typeof(NUnit3FrameworkDriver)),
46+
#elif NET5_0_OR_GREATER
47+
new TestCaseData("mock-assembly.dll", false, typeof(NUnitNetCore31Driver)),
48+
new TestCaseData("mock-assembly.dll", true, typeof(NUnitNetCore31Driver)),
49+
//new TestCaseData("notest-assembly.dll", false, typeof(NUnitNetCore31Driver)),
3850
#elif NETCOREAPP3_1
39-
[TestCase("mock-assembly.dll", false, typeof(NUnitNetCore31Driver))]
40-
[TestCase("mock-assembly.dll", true, typeof(NUnitNetCore31Driver))]
41-
[TestCase("notest-assembly.dll", false, typeof(NUnitNetCore31Driver))]
51+
new TestCaseData("mock-assembly.dll", false, typeof(NUnitNetCore31Driver)),
52+
new TestCaseData("mock-assembly.dll", true, typeof(NUnitNetCore31Driver)),
53+
new TestCaseData("notest-assembly.dll", false, typeof(NUnitNetCore31Driver)),
54+
// TODO: This is never used. We need to test net standard driver in some way, possibly
55+
// by forcing it's use in a separate test.
4256
#elif NETCOREAPP2_1
43-
[TestCase("mock-assembly.dll", false, typeof(NUnitNetStandardDriver))]
44-
[TestCase("mock-assembly.dll", true, typeof(NUnitNetStandardDriver))]
45-
[TestCase("notest-assembly.dll", false, typeof(NUnitNetStandardDriver))]
46-
#else
47-
[TestCase("mock-assembly.dll", false, typeof(NUnit3FrameworkDriver))]
48-
[TestCase("mock-assembly.dll", true, typeof(NUnit3FrameworkDriver))]
49-
[TestCase("notest-assembly.dll", false, typeof(NUnit3FrameworkDriver))]
50-
#endif
51-
[TestCase("mock-assembly.pdb", false, typeof(InvalidAssemblyFrameworkDriver))]
52-
[TestCase("mock-assembly.pdb", true, typeof(InvalidAssemblyFrameworkDriver))]
53-
[TestCase("junk.dll", false, typeof(InvalidAssemblyFrameworkDriver))]
54-
[TestCase("junk.dll", true, typeof(InvalidAssemblyFrameworkDriver))]
55-
[TestCase("nunit.engine.core.dll", false, typeof(InvalidAssemblyFrameworkDriver))]
56-
[TestCase("nunit.engine.core.dll", true, typeof(SkippedAssemblyFrameworkDriver))]
57-
#if !NET5_0_OR_GREATER // Not yet working
58-
[TestCase("notest-assembly.dll", true, typeof(SkippedAssemblyFrameworkDriver))]
57+
new TestCaseData("mock-assembly.dll", false, typeof(NUnitNetStandardDriver)),
58+
new TestCaseData("mock-assembly.dll", true, typeof(NUnitNetStandardDriver)),
59+
new TestCaseData("notest-assembly.dll", false, typeof(NUnitNetStandardDriver)),
5960
#endif
60-
public void CorrectDriverIsUsed(string fileName, bool skipNonTestAssemblies, Type expectedType)
61+
// Invalid cases should work with all target runtimes
62+
new TestCaseData("mock-assembly.pdb", false, typeof(InvalidAssemblyFrameworkDriver)),
63+
new TestCaseData("mock-assembly.pdb", true, typeof(InvalidAssemblyFrameworkDriver)),
64+
new TestCaseData("junk.dll", false, typeof(InvalidAssemblyFrameworkDriver)),
65+
new TestCaseData("junk.dll", true, typeof(InvalidAssemblyFrameworkDriver)),
66+
new TestCaseData("nunit.engine.core.dll", false, typeof(InvalidAssemblyFrameworkDriver)),
67+
new TestCaseData("nunit.engine.core.dll", true, typeof(SkippedAssemblyFrameworkDriver))
68+
//#if !NET5_0_OR_GREATER // Not yet working
69+
// new TestCaseData"notest-assembly.dll", true, typeof(SkippedAssemblyFrameworkDriver))
70+
//#endif
71+
};
72+
73+
[Test]
74+
public void EnsureWeHaveSomeValidTestCases()
6175
{
62-
var driver = _driverService.GetDriver(AppDomain.CurrentDomain, Path.Combine(TestContext.CurrentContext.TestDirectory, fileName), null, skipNonTestAssemblies);
63-
Assert.That(driver, Is.InstanceOf(expectedType));
76+
// We currently build these tests for net462, net 8.0, net 6.0 and net core 3.1.
77+
// This test is needed because of the conditional compilation used in generating
78+
// the test cases. If the test project is updated to add a new target runtime,
79+
// and no test cases are added for that runtime, this test will fail.
80+
foreach (var testcase in DriverSelectionTestCases)
81+
{
82+
// Third argument is the Type of the driver
83+
var driverType = testcase.Arguments[2] as Type;
84+
if (!(driverType.BaseType == typeof(NotRunnableFrameworkDriver)))
85+
break;
86+
87+
// All expected drivers derive from NotRunnableFrameworkDriver
88+
Assert.Fail("Only invalid test cases were provided for this runtime. Update DriverServiceTests.cs to include some valid cases.");
89+
}
6490
}
6591
}
6692
}

src/NUnitEngine/nunit.engine/Services/RuntimeLocators/NetCoreRuntimeLocator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private static IEnumerable<string> GetRuntimeList()
7070
}
7171
catch (Exception)
7272
{
73-
// Failed to start dotnet command. Assume no versions are installed and just r eturn just return
73+
// Failed to start dotnet command. Assume no versions are installed and just return
7474
yield break;
7575
}
7676

0 commit comments

Comments
 (0)