Skip to content

Commit 3be17ab

Browse files
committed
New Package: NUnit.Agent.Core
1 parent bcbebb9 commit 3be17ab

File tree

5 files changed

+191
-34
lines changed

5 files changed

+191
-34
lines changed

NUnitConsole.sln

+6
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FakeExtensions", "src\TestD
167167
EndProject
168168
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DirectTestAgent", "src\NUnitCommon\DirectTestAgent\DirectTestAgent.csproj", "{0E415863-1621-41DB-9DB0-36B5664DFF35}"
169169
EndProject
170+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nunit.agent.core", "nunit.agent.core", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}"
171+
ProjectSection(SolutionItems) = preProject
172+
nuget\nunit.agent.core\nunit.agent.core.nuspec = nuget\nunit.agent.core\nunit.agent.core.nuspec
173+
EndProjectSection
174+
EndProject
170175
Global
171176
GlobalSection(SolutionConfigurationPlatforms) = preSolution
172177
Debug|Any CPU = Debug|Any CPU
@@ -344,6 +349,7 @@ Global
344349
{89258A3E-5B62-487A-9AE7-D7672CBF61F1} = {3B30D2E5-1587-4D68-B848-1BDDB3C24BFC}
345350
{608AA86D-4090-33CA-0031-BD324E5A766E} = {37D508B2-91E0-4B32-869B-DFF9E68EA213}
346351
{0E415863-1621-41DB-9DB0-36B5664DFF35} = {3B30D2E5-1587-4D68-B848-1BDDB3C24BFC}
352+
{02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {A972031D-2F61-4183-AF75-99EE1A9F6B32}
347353
EndGlobalSection
348354
GlobalSection(ExtensibilityGlobals) = postSolution
349355
SolutionGuid = {D8E4FC26-5422-4C51-8BBC-D1AC0A578711}

build.cake

+82-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Load the recipe
2-
#load nuget:?package=NUnit.Cake.Recipe&version=1.4.0-alpha.12
2+
#load nuget:?package=NUnit.Cake.Recipe&version=1.4.0
33
// Comment out above line and uncomment below for local tests of recipe changes
44
//#load ../NUnit.Cake.Recipe/recipe/*.cake
55

@@ -20,8 +20,9 @@ BuildSettings.Initialize(
2020

2121
PackageDefinition NUnitConsoleNuGetPackage;
2222
PackageDefinition NUnitConsoleRunnerNuGetPackage;
23-
PackageDefinition NUnitConsoleRunnerNetCorePackage;
23+
PackageDefinition NUnitConsoleRunnerDotNetToolPackage;
2424
PackageDefinition NUnitConsoleRunnerNet80Package;
25+
PackageDefinition NUnitAgentCorePackage;
2526
PackageDefinition NUnitEnginePackage;
2627
PackageDefinition NUnitEngineApiPackage;
2728
PackageDefinition NUnitExtensibilityApiPackage;
@@ -36,11 +37,11 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
3637
HasFiles("LICENSE.txt", "NOTICES.txt"),
3738
HasDirectory("tools").WithFiles(
3839
"nunit-console.exe", "nunit-console.exe.config", "nunit.engine.dll",
39-
"nunit.extensibility.dll", "nunit.extensibility.api.dll", "nunit.common.dll",
40+
"nunit.extensibility.dll", "nunit.extensibility.api.dll", "nunit.common.dll",
4041
"nunit.engine.api.dll", "testcentric.metadata.dll"),
4142
HasDirectory("tools/agents/net462").WithFiles(
4243
"nunit-agent-net462.exe", "nunit-agent-net462.exe.config", "nunit-agent-net462-x86.exe", "nunit-agent-net462-x86.exe.config",
43-
"nunit.agent.core.dll", "nunit.extensibility.dll", "nunit.extensibility.api.dll",
44+
"nunit.agent.core.dll", "nunit.extensibility.dll", "nunit.extensibility.api.dll",
4445
"nunit.common.dll", "nunit.engine.api.dll", "testcentric.metadata.dll"),
4546
HasDirectory("tools/agents/net8.0").WithFiles(
4647
"nunit-agent-net80.dll", "nunit-agent-net80.dll.config",
@@ -52,7 +53,7 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
5253
"nunit.engine.pdb", "nunit.extensibility.pdb", "nunit.extensibility.api.pdb",
5354
"nunit.common.pdb", "nunit.engine.api.pdb", "nunit-console.pdb"),
5455
HasDirectory("tools/agents/net462").WithFiles(
55-
"nunit-agent-net462.pdb", "nunit-agent-net462-x86.pdb", "nunit.agent.core.pdb",
56+
"nunit-agent-net462.pdb", "nunit-agent-net462-x86.pdb", "nunit.agent.core.pdb",
5657
"nunit.extensibility.pdb", "nunit.extensibility.api.pdb", "nunit.common.pdb", "nunit.engine.api.pdb"),
5758
HasDirectory("tools/agents/net8.0").WithFiles(
5859
"nunit-agent-net80.pdb", "nunit.agent.core.pdb", "nunit.extensibility.pdb", "nunit.extensibility.api.pdb",
@@ -68,15 +69,15 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
6869
source: BuildSettings.NuGetDirectory + "runners/nunit.console-runner-with-extensions.nuspec",
6970
checks: new PackageCheck[] { HasFile("LICENSE.txt") }),
7071

71-
NUnitConsoleRunnerNetCorePackage = new DotNetToolPackage(
72+
NUnitConsoleRunnerDotNetToolPackage = new DotNetToolPackage(
7273
id: "NUnit.ConsoleRunner.NetCore",
7374
source: BuildSettings.NuGetDirectory + "runners/nunit.console-runner.netcore.nuspec",
7475
checks: new PackageCheck[]
7576
{
7677
HasFiles("nunit.exe"),
7778
HasDirectory(".store/nunit.consolerunner.netcore/**/tools/net8.0/any").WithFiles(
7879
"nunit-netcore-console.dll", "nunit-netcore-console.dll.config",
79-
"nunit.engine.dll", "nunit.agent.core.dll", "nunit.extensibility.dll",
80+
"nunit.engine.dll", "nunit.agent.core.dll", "nunit.extensibility.dll",
8081
"nunit.extensibility.api.dll", "nunit.engine.api.dll", "testcentric.metadata.dll",
8182
"Microsoft.Extensions.DependencyModel.dll")
8283
},
@@ -104,6 +105,32 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
104105
+ $"nunit-console-runner-v4.{BuildSettings.PackageVersion}/tools/nunit-console.exe"),
105106
tests: StandardRunnerTests),
106107

108+
NUnitAgentCorePackage = new NuGetPackage(
109+
id: "NUnit.Agent.Core",
110+
source: BuildSettings.NuGetDirectory + "nunit.agent.core/nunit.agent.core.nuspec",
111+
checks: new PackageCheck[]
112+
{
113+
HasFiles("LICENSE.txt", "NOTICES.txt"),
114+
HasDirectory("lib/net462").WithFiles(
115+
"nunit.agent.core.dll", "nunit.extensibility.dll", "nunit.extensibility.api.dll",
116+
"nunit.common.dll", "nunit.engine.api.dll", "testcentric.metadata.dll"),
117+
HasDirectory("lib/net8.0").WithFiles(
118+
"nunit.agent.core.dll", "nunit.extensibility.dll", "nunit.extensibility.api.dll",
119+
"nunit.common.dll", "nunit.engine.api.dll", "testcentric.metadata.dll",
120+
"Microsoft.Extensions.DependencyModel.dll")
121+
},
122+
symbols: new PackageCheck[]
123+
{
124+
HasDirectory("lib/net462").WithFiles(
125+
"nunit.agent.core.pdb", "nunit.extensibility.pdb", "nunit.extensibility.api.pdb",
126+
"nunit.common.pdb", "nunit.engine.api.pdb"),
127+
HasDirectory("lib/net8.0").WithFiles(
128+
"nunit.agent.core.pdb", "nunit.extensibility.pdb", "nunit.extensibility.api.pdb",
129+
"nunit.common.pdb", "nunit.engine.api.pdb")
130+
},
131+
testRunner: new DirectTestAgentRunner(),
132+
tests: AgentCoreTests),
133+
107134
NUnitEnginePackage = new NuGetPackage(
108135
id: "NUnit.Engine",
109136
source: BuildSettings.NuGetDirectory + "engine/nunit.engine.nuspec",
@@ -140,7 +167,7 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
140167
},
141168
testRunner: new AgentRunner(
142169
BuildSettings.NuGetTestDirectory + $"NUnit.Engine.{BuildSettings.PackageVersion}/agents"),
143-
tests: AgentTests),
170+
tests: EngineTests),
144171

145172
NUnitEngineApiPackage = new NuGetPackage(
146173
id: "NUnit.Engine.Api",
@@ -169,8 +196,9 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] {
169196
})
170197
});
171198

199+
172200
//////////////////////////////////////////////////////////////////////
173-
// PACKAGE TEST RUNNER
201+
// CONSOLE PACKAGE TEST RUNNER
174202
//////////////////////////////////////////////////////////////////////
175203

176204
// Use the console runner we just built to run package tests
@@ -190,6 +218,51 @@ public class ConsoleRunnerSelfTester : TestRunner, IPackageTestRunner
190218
}
191219
}
192220

221+
//////////////////////////////////////////////////////////////////////
222+
// AGENT CORE PACKAGE TEST RUNNER
223+
//////////////////////////////////////////////////////////////////////
224+
225+
public class DirectTestAgentRunner : TestRunner, IPackageTestRunner
226+
{
227+
public int RunPackageTest(string arguments, bool redirectOutput)
228+
{
229+
// First argument must be relative path to a test assembly.
230+
// It's immediate directory name is the name of the runtime.
231+
string testAssembly = arguments.Trim();
232+
testAssembly = BuildSettings.OutputDirectory + (testAssembly[0] == '"'
233+
? testAssembly.Substring(1, testAssembly.IndexOf('"', 1) - 1)
234+
: testAssembly.Substring(0, testAssembly.IndexOf(' ')));
235+
236+
if (!System.IO.File.Exists(testAssembly))
237+
throw new FileNotFoundException($"File not found: {testAssembly}");
238+
239+
string testRuntime = System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(testAssembly));
240+
string agentRuntime = testRuntime;
241+
242+
if (agentRuntime.EndsWith("-windows"))
243+
agentRuntime = agentRuntime.Substring(0, 6);
244+
245+
// Avoid builds we don't have
246+
if (agentRuntime == "net35")
247+
agentRuntime = "net20";
248+
else if (agentRuntime == "net5.0")
249+
agentRuntime = "net6.0";
250+
251+
var executablePath = BuildSettings.OutputDirectory + $"{agentRuntime}/DirectTestAgent.exe";
252+
253+
if (!System.IO.File.Exists(executablePath))
254+
throw new FileNotFoundException($"File not found: {executablePath}");
255+
256+
Console.WriteLine($"Trying to run {executablePath} with arguments {arguments}");
257+
258+
return BuildSettings.Context.StartProcess(executablePath, new ProcessSettings()
259+
{
260+
Arguments = arguments,
261+
WorkingDirectory = BuildSettings.OutputDirectory
262+
});
263+
}
264+
}
265+
193266
//////////////////////////////////////////////////////////////////////
194267
// EXECUTION
195268
//////////////////////////////////////////////////////////////////////
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.Agent.Core</id>
5+
<title>NUnit Agent Core Version 4 (No Extensions)</title>
6+
<version>$version$</version>
7+
<authors>Charlie Poole</authors>
8+
<owners>Charlie Poole</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+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
13+
<summary>Support assembly for use in creating pluggable agents.</summary>
14+
<description>
15+
This package is used by the nunit team to create pluggable agents. It is available for use by others creating such agents, although it's use is not required so long as all the necessary interfaces are implemented correctly.
16+
</description>
17+
<releaseNotes>https://docs.nunit.org/articles/nunit/release-notes/console-and-engine.html</releaseNotes>
18+
<language>en-US</language>
19+
<tags>nunit test testing tdd pluggable agent</tags>
20+
<copyright>Copyright (c) 2025 Charlie Poole</copyright>
21+
</metadata>
22+
<files>
23+
<file src="../../LICENSE.txt" />
24+
<file src="../../NOTICES.txt" />
25+
26+
<file src="net462/nunit.engine.api.dll" target="lib/net462" />
27+
<file src="net462/nunit.engine.api.pdb" target="lib/net462" />
28+
<file src="net462/nunit.engine.api.xml" target="lib/net462" />
29+
<file src="net462/nunit.agent.core.dll" target="lib/net462" />
30+
<file src="net462/nunit.agent.core.pdb" target="lib/net462" />
31+
<file src="net462/nunit.extensibility.dll" target="lib/net462" />
32+
<file src="net462/nunit.extensibility.pdb" target="lib/net462" />
33+
<file src="net462/nunit.extensibility.api.dll" target="lib/net462" />
34+
<file src="net462/nunit.extensibility.api.pdb" target="lib/net462" />
35+
<file src="net462/nunit.common.dll" target="lib/net462" />
36+
<file src="net462/nunit.common.pdb" target="lib/net462" />
37+
<file src="net462/testcentric.metadata.dll" target="lib/net462" />
38+
39+
<file src="net8.0/nunit.engine.api.dll" target="lib/net8.0" />
40+
<file src="net8.0/nunit.engine.api.pdb" target="lib/net8.0" />
41+
<file src="net8.0/nunit.engine.api.xml" target="lib/net8.0" />
42+
<file src="net8.0/nunit.agent.core.dll" target="lib/net8.0" />
43+
<file src="net8.0/nunit.agent.core.pdb" target="lib/net8.0" />
44+
<file src="net8.0/nunit.extensibility.dll" target="lib/net8.0" />
45+
<file src="net8.0/nunit.extensibility.pdb" target="lib/net8.0" />
46+
<file src="net8.0/nunit.extensibility.api.dll" target="lib/net8.0" />
47+
<file src="net8.0/nunit.extensibility.api.pdb" target="lib/net8.0" />
48+
<file src="net8.0/nunit.common.dll" target="lib/net8.0" />
49+
<file src="net8.0/nunit.common.pdb" target="lib/net8.0" />
50+
<file src="net8.0/testcentric.metadata.dll" target="lib/net8.0" />
51+
<file src="net8.0/Microsoft.Extensions.DependencyModel.dll" target="lib/net8.0" />
52+
</files>
53+
</package>

package-tests.cake

+50-23
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,6 @@ var StandardRunnerTests = new List<PackageTest>();
44
// Tests run for the NETCORE runner package
55
var NetCoreRunnerTests = new List<PackageTest>();
66

7-
// Tests run directly against the agents themselves
8-
var AgentTests = new List<PackageTest>()
9-
{
10-
new PackageTest(1, "Net462AgentTest")
11-
{
12-
Description = "Run mock-assembly.dll under .NET 4.6.2",
13-
Arguments = "testdata/net462/mock-assembly.dll",
14-
ExpectedResult = new MockAssemblyExpectedResult("net-4.6.2")
15-
},
16-
new PackageTest(1, "Net462X86AgentTest")
17-
{
18-
Description = "Run mock-assembly-x86.dll under .NET 4.6.2",
19-
Arguments = "testdata/net462/mock-assembly-x86.dll --x86",
20-
ExpectedResult = new MockAssemblyX86ExpectedResult("net-4.6.2")
21-
},
22-
new PackageTest(1, "Net80AgentTest")
23-
{
24-
Description = "Run mock-assembly.dll under .NET 8.0",
25-
Arguments = "testdata/net8.0/mock-assembly.dll --trace:Debug",
26-
ExpectedResult = new MockAssemblyExpectedResult("netcore-8.0")
27-
}
28-
};
29-
307
// Method for adding to both lists
318
void AddToBothLists(PackageTest test)
329
{
@@ -526,3 +503,53 @@ AddToBothLists(new PackageTest(1, "AppContextBaseDirectory_NET80")
526503
Assemblies = new ExpectedAssemblyResult[] { new ExpectedAssemblyResult("AppContextTest.dll", "netcore-8.0") }
527504
}
528505
});
506+
507+
// NOTE: Tests for NUnit.Engine and NUnit.Agent.Core here are quite limited. At this
508+
// point, the main purpose they serve is to demonstrate that we are ABLE to run
509+
// the tests without using the console runner.
510+
//
511+
// That's because multiple packages are created by this build script and these tests
512+
// really just repetitions of tests we perform for the console runner package.
513+
// When either of these packages is moved to a separate repository, the tests will
514+
// become more meaningful and will then be expanded.
515+
516+
// Tests for NUnit.Engine package
517+
var EngineTests = new List<PackageTest>()
518+
{
519+
new PackageTest(1, "Net462AgentTest")
520+
{
521+
Description = "Run mock-assembly.dll under .NET 4.6.2",
522+
Arguments = "testdata/net462/mock-assembly.dll",
523+
ExpectedResult = new MockAssemblyExpectedResult("net-4.6.2")
524+
},
525+
new PackageTest(1, "Net462X86AgentTest")
526+
{
527+
Description = "Run mock-assembly-x86.dll under .NET 4.6.2",
528+
Arguments = "testdata/net462/mock-assembly-x86.dll --x86",
529+
ExpectedResult = new MockAssemblyX86ExpectedResult("net-4.6.2")
530+
},
531+
new PackageTest(1, "Net80AgentTest")
532+
{
533+
Description = "Run mock-assembly.dll under .NET 8.0",
534+
Arguments = "testdata/net8.0/mock-assembly.dll --trace:Debug",
535+
ExpectedResult = new MockAssemblyExpectedResult("netcore-8.0")
536+
}
537+
};
538+
539+
// Tests for NUnit.Agent.Core package
540+
var AgentCoreTests = new List<PackageTest>()
541+
{
542+
new PackageTest(1, "Net462AgentTest")
543+
{
544+
Description = "Run mock-assembly.dll under .NET 4.6.2",
545+
Arguments = "testdata/net462/mock-assembly.dll",
546+
ExpectedResult = new MockAssemblyExpectedResult("net-4.6.2")
547+
},
548+
new PackageTest(1, "Net80AgentTest")
549+
{
550+
Description = "Run mock-assembly.dll under .NET 8.0",
551+
Arguments = "testdata/net8.0/mock-assembly.dll --trace:Debug",
552+
ExpectedResult = new MockAssemblyExpectedResult("netcore-8.0")
553+
}
554+
};
555+

src/NUnitCommon/nunit.agent.core.tests/AgentDirectRunnerTests.cs

-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ private static void RunTestUnderTestBed(string testAssembly)
2929
#else
3030
string agentExe = Path.ChangeExtension(agentAssembly, ".exe");
3131
#endif
32-
MockAssembly.DisplayCounts();
33-
3432
var startInfo = new ProcessStartInfo(agentExe);
3533
startInfo.Arguments = testAssembly;
3634
startInfo.RedirectStandardOutput = true;

0 commit comments

Comments
 (0)