|
@@ -1,8 +1,10 @@
|
|
|
using System;
|
|
|
+using System.Collections.Generic;
|
|
|
using System.Diagnostics;
|
|
|
using System.IO;
|
|
|
using System.IO.Compression;
|
|
|
using System.Linq;
|
|
|
+using System.Runtime.CompilerServices;
|
|
|
using System.Runtime.InteropServices;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Xml.Linq;
|
|
@@ -10,8 +12,10 @@ using Nuke.Common;
|
|
|
using Nuke.Common.Tooling;
|
|
|
using Nuke.Common.Tools.DotNet;
|
|
|
using Nuke.Common.Tools.Npm;
|
|
|
+using Nuke.Common.Utilities;
|
|
|
using static Nuke.Common.EnvironmentInfo;
|
|
|
using static Nuke.Common.IO.PathConstruction;
|
|
|
+using static Nuke.Common.Tools.DotMemoryUnit.DotMemoryUnitTasks;
|
|
|
using static Nuke.Common.Tools.DotNet.DotNetTasks;
|
|
|
using static Serilog.Log;
|
|
|
using MicroCom.CodeGenerator;
|
|
@@ -183,6 +187,31 @@ partial class Build : NukeBuild
|
|
|
});
|
|
|
|
|
|
void RunCoreTest(string projectName)
|
|
|
+ {
|
|
|
+ RunCoreTest(projectName, (project, tfm) =>
|
|
|
+ {
|
|
|
+ DotNetTest(c => ApplySetting(c, project,tfm));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ void RunCoreDotMemoryUnit(string projectName)
|
|
|
+ {
|
|
|
+ RunCoreTest(projectName, (project, tfm) =>
|
|
|
+ {
|
|
|
+ var testSettings = ApplySetting(new DotNetTestSettings(), project, tfm);
|
|
|
+ var testToolPath = GetToolPathInternal(new DotNetTasks(), testSettings);
|
|
|
+ var testArgs = GetArguments(testSettings).JoinSpace();
|
|
|
+ DotMemoryUnit($"{testToolPath} --propagate-exit-code -- {testArgs:nq}");
|
|
|
+ });
|
|
|
+
|
|
|
+ [UnsafeAccessor(UnsafeAccessorKind.Method, Name = nameof(GetToolPathInternal))]
|
|
|
+ extern static string GetToolPathInternal(ToolTasks tasks, ToolOptions options);
|
|
|
+
|
|
|
+ [UnsafeAccessor(UnsafeAccessorKind.Method, Name = nameof(GetArguments))]
|
|
|
+ extern static IEnumerable<string> GetArguments(ToolOptions options);
|
|
|
+ }
|
|
|
+
|
|
|
+ void RunCoreTest(string projectName, Action<string, string> runTest)
|
|
|
{
|
|
|
Information($"Running tests from {projectName}");
|
|
|
var project = RootDirectory.GlobFiles(@$"**\{projectName}.csproj").FirstOrDefault()
|
|
@@ -228,17 +257,20 @@ partial class Build : NukeBuild
|
|
|
|
|
|
Information($"Running for {projectName} ({tfm}) ...");
|
|
|
|
|
|
- DotNetTest(c => ApplySetting(c)
|
|
|
- .SetProjectFile(project)
|
|
|
- .SetFramework(tfm)
|
|
|
- .EnableNoBuild()
|
|
|
- .EnableNoRestore()
|
|
|
- .When(_ => Parameters.PublishTestResults, _ => _
|
|
|
- .SetLoggers("trx")
|
|
|
- .SetResultsDirectory(Parameters.TestResultsRoot)));
|
|
|
+ runTest(project, tfm);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ DotNetTestSettings ApplySetting(DotNetTestSettings settings, string project, string tfm) =>
|
|
|
+ ApplySetting(settings)
|
|
|
+ .SetProjectFile(project)
|
|
|
+ .SetFramework(tfm)
|
|
|
+ .EnableNoBuild()
|
|
|
+ .EnableNoRestore()
|
|
|
+ .When(_ => Parameters.PublishTestResults, _ => _
|
|
|
+ .SetLoggers("trx")
|
|
|
+ .SetResultsDirectory(Parameters.TestResultsRoot));
|
|
|
+
|
|
|
Target RunHtmlPreviewerTests => _ => _
|
|
|
.DependsOn(CompileHtmlPreviewer)
|
|
|
.OnlyWhenStatic(() => !(Parameters.SkipPreviewer || Parameters.SkipTests))
|
|
@@ -296,7 +328,7 @@ partial class Build : NukeBuild
|
|
|
{
|
|
|
void DoMemoryTest()
|
|
|
{
|
|
|
- RunCoreTest("Avalonia.LeakTests");
|
|
|
+ RunCoreDotMemoryUnit("Avalonia.LeakTests");
|
|
|
}
|
|
|
ControlFlow.ExecuteWithRetry(DoMemoryTest, delay: TimeSpan.FromMilliseconds(3));
|
|
|
});
|