From 8d9a36b9022c120000b975a8d02c70a2951d1545 Mon Sep 17 00:00:00 2001 From: Charlie Poole Date: Wed, 2 Oct 2024 22:30:33 -0700 Subject: [PATCH 1/2] Build Engine under .NET 6.0 and 8.0 --- src/NUnitEngine/nunit.engine.tests/Helpers/ShadowCopyUtils.cs | 2 ++ .../Integration/DirectoryWithNeededAssemblies.cs | 2 ++ .../Integration/MockAssemblyInDirectoryWithFramework.cs | 2 ++ .../Integration/RunnerInDirectoryWithoutFramework.cs | 2 ++ src/NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj | 4 ++-- src/NUnitEngine/nunit.engine/Runners/TestEventDispatcher.cs | 3 +++ src/NUnitEngine/nunit.engine/nunit.engine.csproj | 2 +- 7 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/NUnitEngine/nunit.engine.tests/Helpers/ShadowCopyUtils.cs b/src/NUnitEngine/nunit.engine.tests/Helpers/ShadowCopyUtils.cs index 771491452..dd1d3a9a0 100644 --- a/src/NUnitEngine/nunit.engine.tests/Helpers/ShadowCopyUtils.cs +++ b/src/NUnitEngine/nunit.engine.tests/Helpers/ShadowCopyUtils.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; @@ -40,3 +41,4 @@ from assemblyName in assemblyNames } } } +#endif \ No newline at end of file diff --git a/src/NUnitEngine/nunit.engine.tests/Integration/DirectoryWithNeededAssemblies.cs b/src/NUnitEngine/nunit.engine.tests/Integration/DirectoryWithNeededAssemblies.cs index 23afea7e2..547e42c3c 100644 --- a/src/NUnitEngine/nunit.engine.tests/Integration/DirectoryWithNeededAssemblies.cs +++ b/src/NUnitEngine/nunit.engine.tests/Integration/DirectoryWithNeededAssemblies.cs @@ -1,5 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt +#if NETFRAMEWORK using System; using System.IO; using NUnit.Engine.Tests.Helpers; @@ -31,3 +32,4 @@ public void Dispose() } } } +#endif \ No newline at end of file diff --git a/src/NUnitEngine/nunit.engine.tests/Integration/MockAssemblyInDirectoryWithFramework.cs b/src/NUnitEngine/nunit.engine.tests/Integration/MockAssemblyInDirectoryWithFramework.cs index 1e59a7939..d59b5cde8 100644 --- a/src/NUnitEngine/nunit.engine.tests/Integration/MockAssemblyInDirectoryWithFramework.cs +++ b/src/NUnitEngine/nunit.engine.tests/Integration/MockAssemblyInDirectoryWithFramework.cs @@ -1,5 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt +#if NETFRAMEWORK using System; using System.IO; using NUnit.Framework; @@ -25,3 +26,4 @@ public void Dispose() } } } +#endif \ No newline at end of file diff --git a/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs b/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs index b7f5ddf69..088a02a1e 100644 --- a/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs +++ b/src/NUnitEngine/nunit.engine.tests/Integration/RunnerInDirectoryWithoutFramework.cs @@ -1,5 +1,6 @@ // Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt +#if NETFRAMEWORK using System; using System.IO; using System.Threading; @@ -39,3 +40,4 @@ public void Dispose() } } } +#endif \ No newline at end of file diff --git a/src/NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj b/src/NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj index 23ac9be3f..3398bbcd8 100644 --- a/src/NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj +++ b/src/NUnitEngine/nunit.engine.tests/nunit.engine.tests.csproj @@ -2,7 +2,7 @@ NUnit.Engine.Tests - net462;netcoreapp3.1 + net462;netcoreapp3.1;net6.0;net8.0 Exe true ..\..\nunit.snk @@ -23,7 +23,7 @@ - + diff --git a/src/NUnitEngine/nunit.engine/Runners/TestEventDispatcher.cs b/src/NUnitEngine/nunit.engine/Runners/TestEventDispatcher.cs index 316d98381..ce623a191 100644 --- a/src/NUnitEngine/nunit.engine/Runners/TestEventDispatcher.cs +++ b/src/NUnitEngine/nunit.engine/Runners/TestEventDispatcher.cs @@ -33,6 +33,9 @@ public void OnTestEvent(string report) } } +#if NET6_0 || NET8_0 + [Obsolete] +#endif public override object InitializeLifetimeService() { return null; diff --git a/src/NUnitEngine/nunit.engine/nunit.engine.csproj b/src/NUnitEngine/nunit.engine/nunit.engine.csproj index ab802c56e..040bd46fe 100644 --- a/src/NUnitEngine/nunit.engine/nunit.engine.csproj +++ b/src/NUnitEngine/nunit.engine/nunit.engine.csproj @@ -2,7 +2,7 @@ NUnit.Engine - net462;netstandard2.0 + net462;netstandard2.0;net6.0;net8.0 true ..\..\nunit.snk portable From c21d773483e6195a16561fa822d13303ab9283d3 Mon Sep 17 00:00:00 2001 From: Charlie Poole Date: Fri, 4 Oct 2024 11:55:07 -0700 Subject: [PATCH 2/2] Fix packaging errors --- build.cake | 110 ++++++++++++++++++++++++++----- nuget/engine/nunit.engine.nuspec | 20 ++++++ 2 files changed, 115 insertions(+), 15 deletions(-) diff --git a/build.cake b/build.cake index ed7f68201..d310430b2 100644 --- a/build.cake +++ b/build.cake @@ -15,28 +15,31 @@ BuildSettings.Initialize( ////////////////////////////////////////////////////////////////////// // LISTS OF FILES USED IN CHECKING PACKAGES -////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////// +FilePath[] ConsoleFiles = { + "nunit3-console.dll", "nunit3-console.dll.config", "nunit3-console.exe", "nunit3-console.pdb", + "nunit3-console.deps.json", "nunit3-console.runtimeconfig.json", "nunit.console.nuget.addins" }; FilePath[] ENGINE_FILES = { - "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll" }; + "nunit.engine.dll", "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll" }; FilePath[] ENGINE_PDB_FILES = { - "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; + "nunit.engine.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; FilePath[] ENGINE_CORE_FILES = { - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll" }; + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll" }; FilePath[] ENGINE_CORE_PDB_FILES = { - "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; + "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; FilePath[] AGENT_FILES = { - "nunit-agent.exe", "nunit-agent.exe.config", - "nunit-agent-x86.exe", "nunit-agent-x86.exe.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"}; + "nunit-agent.exe", "nunit-agent.exe.config", + "nunit-agent-x86.exe", "nunit-agent-x86.exe.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll"}; FilePath[] AGENT_FILES_NETCORE = { - "nunit-agent.dll", "nunit-agent.dll.config", - "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", - "Microsoft.Extensions.DependencyModel.dll"}; + "nunit-agent.dll", "nunit-agent.dll.config", + "nunit.engine.core.dll", "nunit.engine.api.dll", "testcentric.engine.metadata.dll", + "Microsoft.Extensions.DependencyModel.dll"}; FilePath[] AGENT_PDB_FILES = { - "nunit-agent.pdb", "nunit-agent-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; + "nunit-agent.pdb", "nunit-agent-x86.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; FilePath[] AGENT_PDB_FILES_NETCORE = { - "nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; + "nunit-agent.pdb", "nunit.engine.core.pdb", "nunit.engine.api.pdb"}; ////////////////////////////////////////////////////////////////////// // INDIVIDUAL PACKAGE DEFINITIONS @@ -86,7 +89,12 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] { NUnitConsoleRunnerNetCorePackage = new DotNetToolPackage( id: "NUnit.ConsoleRunner.NetCore", source: BuildSettings.NuGetDirectory + "runners/nunit.console-runner.netcore.nuspec", - checks: new PackageCheck[] { HasFiles("nunit.exe") }, + checks: new PackageCheck[] + { + HasFiles("nunit.exe"), + HasSomeDirectory(".store/nunit.consolerunner.netcore/**/tools/net6.0/any") + .WithFiles(ENGINE_FILES).AndFiles(ConsoleFiles).AndFile("Microsoft.Extensions.DependencyModel.dll") + }, testRunner: new ConsoleRunnerSelfTester(BuildSettings.NuGetTestDirectory + $"NUnit.ConsoleRunner.NetCore.{BuildSettings.PackageVersion}/nunit.exe"), tests: NetCoreRunnerTests), @@ -94,7 +102,11 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] { NUnitConsoleRunnerNet80Package = new DotNetToolPackage( id: "NUnit.ConsoleRunner.Net80", source: BuildSettings.NuGetDirectory + "runners/nunit.console-runner.net80.nuspec", - checks: new PackageCheck[] { HasFiles("nunit-net80.exe") }, + checks: new PackageCheck[] { + HasFiles("nunit-net80.exe"), + HasSomeDirectory(".store/nunit.consolerunner.net80/**/tools/net8.0/any") + .WithFiles(ENGINE_FILES).AndFiles(ConsoleFiles).AndFile("Microsoft.Extensions.DependencyModel.dll") + }, testRunner: new ConsoleRunnerSelfTester(BuildSettings.NuGetTestDirectory + $"NUnit.ConsoleRunner.Net80.{BuildSettings.PackageVersion}/nunit-net80.exe"), tests: NetCoreRunnerTests), @@ -147,13 +159,19 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] { HasFiles("LICENSE.txt", "NOTICES.txt"), HasDirectory("lib/net462").WithFiles(ENGINE_FILES), HasDirectory("lib/netstandard2.0").WithFiles(ENGINE_FILES), + HasDirectory("lib/net6.0").WithFiles(ENGINE_FILES).AndFile("Microsoft.Extensions.DependencyModel.dll"), + HasDirectory("lib/net8.0").WithFiles(ENGINE_FILES).AndFile("Microsoft.Extensions.DependencyModel.dll"), HasDirectory("contentFiles/any/lib/net462").WithFile("nunit.engine.nuget.addins"), HasDirectory("contentFiles/any/lib/netstandard2.0").WithFile("nunit.engine.nuget.addins"), + HasDirectory("contentFiles/any/lib/net6.0").WithFile("nunit.engine.nuget.addins"), + HasDirectory("contentFiles/any/lib/net8.0").WithFile("nunit.engine.nuget.addins"), HasDirectory("contentFiles/any/agents/net462").WithFiles(AGENT_FILES).AndFile("nunit.agent.addins") }, symbols: new PackageCheck[] { HasDirectory("lib/net462").WithFiles(ENGINE_PDB_FILES), HasDirectory("lib/netstandard2.0").WithFiles(ENGINE_PDB_FILES), + HasDirectory("lib/net6.0").WithFiles(ENGINE_PDB_FILES), + HasDirectory("lib/net8.0").WithFiles(ENGINE_PDB_FILES), HasDirectory("contentFiles/any/agents/net462").WithFiles(AGENT_PDB_FILES) }), @@ -171,6 +189,68 @@ BuildSettings.Packages.AddRange(new PackageDefinition[] { }) }); +// Adhoc code to check content of a dotnet standalone executable +// TODO: Incorporate this in the recipe itself + +private static ExtendedDirectoryCheck HasSomeDirectory(string pattern) => new ExtendedDirectoryCheck(pattern); + +public class ExtendedDirectoryCheck : PackageCheck +{ + private string _directoryPattern; + private List _files = new List(); + + public ExtendedDirectoryCheck(string directoryPattern) + { + // Assume it has no wildcard - checked in ApplyTo method + _directoryPattern = directoryPattern; + } + + public ExtendedDirectoryCheck WithFiles(params FilePath[] files) + { + _files.AddRange(files); + return this; + } + + public ExtendedDirectoryCheck AndFiles(params FilePath[] files) + { + return WithFiles(files); + } + + public ExtendedDirectoryCheck WithFile(FilePath file) + { + _files.Add(file); + return this; + } + + public ExtendedDirectoryCheck AndFile(FilePath file) + { + return AndFiles(file); + } + + public override bool ApplyTo(DirectoryPath testDirPath) + { + if (_directoryPattern.Contains('*') || _directoryPattern.Contains('?')) // Wildcard + { + var absDirPattern = testDirPath.Combine(_directoryPattern).ToString(); + foreach (var dir in _context.GetDirectories(absDirPattern)) + { + // Use first one found + return CheckFilesExist(_files.Select(file => dir.CombineWithFilePath(file))); + } + } + else // No wildcard + { + var absDirPath = testDirPath.Combine(_directoryPattern); + if (!CheckDirectoryExists(absDirPath)) + return false; + + return CheckFilesExist(_files.Select(file => absDirPath.CombineWithFilePath(file))); + } + + return false; + } +} + ////////////////////////////////////////////////////////////////////// // TEST RUNNERS ////////////////////////////////////////////////////////////////////// diff --git a/nuget/engine/nunit.engine.nuspec b/nuget/engine/nunit.engine.nuspec index 54714f138..83f60a5cb 100644 --- a/nuget/engine/nunit.engine.nuspec +++ b/nuget/engine/nunit.engine.nuspec @@ -80,6 +80,26 @@ + + + + + + + + + + + + + + + + + + + +