Skip to content

Commit 28809a1

Browse files
Rework environment-specific custom xUnit attributes
1 parent ab17946 commit 28809a1

39 files changed

+143
-200
lines changed

tests/BenchmarkDotNet.IntegrationTests/AllSetupAndCleanupTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ public class AllSetupAndCleanupAttributeBenchmarksAsyncValueTaskSetup
234234
public void Benchmark() => Console.WriteLine(BenchmarkCalled);
235235
}
236236

237-
[FactNotGitHubActionsWindows]
237+
[FactEnvSpecific(EnvRequirement.NonWindows)]
238238
public void AllSetupAndCleanupMethodRunsAsyncGenericValueTaskSetupTest()
239239
{
240240
var miniJob = Job.Default.WithStrategy(RunStrategy.Monitoring).WithWarmupCount(2).WithIterationCount(3).WithInvocationCount(1).WithUnrollFactor(1).WithId("MiniJob");

tests/BenchmarkDotNet.IntegrationTests/ArgumentsTests.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,9 @@ public void AcceptsSpan(Span<int> span)
318318
}
319319
}
320320

321-
[TheoryNetCoreOnly("the implicit cast operator is available only in .NET Core 2.1+ (See https://github.com/dotnet/corefx/issues/30121 for more)"),
322-
MemberData(nameof(GetToolchains))]
321+
[TheoryEnvSpecific("The implicit cast operator is available only in .NET Core 2.1+ (See https://github.com/dotnet/corefx/issues/30121 for more)",
322+
EnvRequirement.DotNetCoreOnly)]
323+
[MemberData(nameof(GetToolchains))]
323324
public void StringCanBePassedToBenchmarkAsReadOnlySpan(IToolchain toolchain) => CanExecute<WithStringToReadOnlySpan>(toolchain);
324325

325326
public class WithStringToReadOnlySpan

tests/BenchmarkDotNet.IntegrationTests/BenchmarkSwitcherTest.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ public class BenchmarkSwitcherTest
2525

2626
public BenchmarkSwitcherTest(ITestOutputHelper output) => Output = output;
2727

28-
[FactDotNetCoreOnly("When CommandLineParser wants to display help, it tries to get the Title of the Entry Assembly which is an xunit runner, which has no Title and fails..")]
28+
[FactEnvSpecific(
29+
"When CommandLineParser wants to display help, it tries to get the Title of the Entry Assembly which is an xunit runner, which has no Title and fails..",
30+
EnvRequirement.DotNetCoreOnly)]
2931
public void WhenInvalidCommandLineArgumentIsPassedAnErrorMessageIsDisplayedAndNoBenchmarksAreExecuted()
3032
{
3133
var logger = new OutputLogger(Output);
@@ -332,7 +334,7 @@ public void WhenUserCreatesStaticBenchmarkMethodWeDisplayAnError_FromAssembly()
332334
Assert.Contains("static", logger.GetLog());
333335
}
334336

335-
[FactDotNetCoreOnly("For some reason this test is flaky on Full Framework")]
337+
[FactEnvSpecific("For some reason this test is flaky on Full Framework", EnvRequirement.DotNetCoreOnly)]
336338
public void WhenUserAddTheResumeAttributeAndRunTheBenchmarks()
337339
{
338340
var logger = new OutputLogger(Output);

tests/BenchmarkDotNet.IntegrationTests/ExporterIOTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void ExporterWritesToFile()
4242
}
4343
}
4444

45-
[FactWindowsOnly("On Unix, it's possible to write to an opened file")]
45+
[FactEnvSpecific("On Unix, it's possible to write to an opened file", EnvRequirement.WindowsOnly)]
4646
public void ExporterWorksWhenFileIsLocked()
4747
{
4848
string resultsDirectoryPath = Path.GetTempPath();

tests/BenchmarkDotNet.IntegrationTests/ExtraAttributesForEntryMethodTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public ExtraAttributesForEntryMethodTests(ITestOutputHelper output) : base(outpu
1111
{
1212
}
1313

14-
[FactClassicDotNetOnly("STAThread attribute is not respected in netcoreapp https://github.com/dotnet/coreclr/issues/13688")]
14+
[FactEnvSpecific("STAThread attribute is not respected in netcoreapp https://github.com/dotnet/coreclr/issues/13688", EnvRequirement.FullFrameworkOnly)]
1515
public void UserCanMarkBenchmarkAsRequiringSTA() => CanExecute<RequiresSTA>();
1616

1717
public class RequiresSTA

tests/BenchmarkDotNet.IntegrationTests/InProcessEmitTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public void InProcessBenchmarkSimpleCasesReflectionEmitSupported()
104104
}
105105
}
106106

107-
[TheoryFullFrameworkOnly("We can't use Roslyn toolchain for .NET Core because we don't know which assemblies to reference and .NET Core does not support dynamic assembly saving")]
107+
[TheoryEnvSpecific("We can't use Roslyn toolchain for .NET Core because we don't know which assemblies to reference and .NET Core does not support dynamic assembly saving", EnvRequirement.FullFrameworkOnly)]
108108
[InlineData(typeof(SampleBenchmark))]
109109
[InlineData(typeof(RunnableVoidCaseBenchmark))]
110110
[InlineData(typeof(RunnableRefStructCaseBenchmark))]

tests/BenchmarkDotNet.IntegrationTests/JitRuntimeValidationTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public JitRuntimeValidationTest(ITestOutputHelper output) : base(output) { }
2020
private const string RyuJitNotAvailable = "// ERROR: RyuJIT is requested but it is not available in current environment";
2121
private const string ToolchainSupportsOnlyRyuJit = "Currently dotnet cli toolchain supports only RyuJit";
2222

23-
[TheoryWindowsOnly("CLR is a valid job only on Windows")]
23+
[TheoryEnvSpecific("CLR is a valid job only on Windows", EnvRequirement.WindowsOnly)]
2424
[InlineData(Jit.LegacyJit, Platform.X86, null)]
2525
[InlineData(Jit.LegacyJit, Platform.X64, null)]
2626
[InlineData(Jit.RyuJit, Platform.X86, RyuJitNotAvailable)]

tests/BenchmarkDotNet.IntegrationTests/LargeAddressAwareTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class LargeAddressAwareTest
1919

2020
public LargeAddressAwareTest(ITestOutputHelper outputHelper) => output = outputHelper;
2121

22-
[FactWindowsOnly("CLR is a valid job only on Windows")]
22+
[FactEnvSpecific("CLR is a valid job only on Windows", EnvRequirement.WindowsOnly)]
2323
public void BenchmarkCanAllocateMoreThan2Gb()
2424
{
2525
var summary = BenchmarkRunner

tests/BenchmarkDotNet.IntegrationTests/MemoryDiagnoserTests.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public void MemoryDiagnoserIsAccurate(IToolchain toolchain)
7070
});
7171
}
7272

73-
[FactDotNetCoreOnly("We don't want to test NativeAOT twice (for .NET Framework 4.6.2 and .NET 7.0)")]
73+
[FactEnvSpecific("We don't want to test NativeAOT twice (for .NET Framework 4.6.2 and .NET 7.0)", EnvRequirement.DotNetCoreOnly)]
7474
public void MemoryDiagnoserSupportsNativeAOT()
7575
{
7676
if (RuntimeInformation.IsMacOS())
@@ -82,7 +82,7 @@ public void MemoryDiagnoserSupportsNativeAOT()
8282
.ToToolchain());
8383
}
8484

85-
[FactDotNetCoreOnly("We don't want to test MonoVM twice (for .NET Framework 4.6.2 and .NET 7.0)")]
85+
[FactEnvSpecific("We don't want to test MonoVM twice (for .NET Framework 4.6.2 and .NET 7.0)", EnvRequirement.DotNetCoreOnly)]
8686
public void MemoryDiagnoserSupportsModernMono()
8787
{
8888
MemoryDiagnoserIsAccurate(MonoToolchain.Mono70);
@@ -263,7 +263,9 @@ public void Allocate()
263263
}
264264
}
265265

266-
[TheoryNetCore30(".NET Core 3.0 preview6+ exposes a GC.GetTotalAllocatedBytes method which makes it possible to work"), MemberData(nameof(GetToolchains))]
266+
[TheoryEnvSpecific(".NET Core 3.0 preview6+ exposes a GC.GetTotalAllocatedBytes method which makes it possible to work",
267+
EnvRequirement.DotNetCore30Only)]
268+
[MemberData(nameof(GetToolchains))]
267269
[Trait(Constants.Category, Constants.BackwardCompatibilityCategory)]
268270
public void MemoryDiagnoserIsAccurateForMultiThreadedBenchmarks(IToolchain toolchain)
269271
{

tests/BenchmarkDotNet.IntegrationTests/MonoTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace BenchmarkDotNet.IntegrationTests
1010
{
1111
public class MonoTests : BenchmarkTestExecutor
1212
{
13-
[FactDotNetCoreOnly("UseMonoRuntime option is available in .NET Core only starting from .NET 6")]
13+
[FactEnvSpecific("UseMonoRuntime option is available in .NET Core only starting from .NET 6", EnvRequirement.DotNetCoreOnly)]
1414
public void Mono70IsSupported()
1515
{
1616
var config = ManualConfig.CreateEmpty().AddJob(Job.Dry.WithRuntime(MonoRuntime.Mono70));

tests/BenchmarkDotNet.IntegrationTests/MultipleRuntimesTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class MultipleRuntimesTest
2222

2323
public MultipleRuntimesTest(ITestOutputHelper outputHelper) => output = outputHelper;
2424

25-
[FactWindowsOnly("CLR is a valid job only on Windows")]
25+
[FactEnvSpecific("CLR is a valid job only on Windows", EnvRequirement.WindowsOnly)]
2626
[Trait(Constants.Category, Constants.BackwardCompatibilityCategory)]
2727
public void SingleBenchmarkCanBeExecutedForMultipleRuntimes()
2828
{

tests/BenchmarkDotNet.IntegrationTests/NativeAotTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class NativeAotTests : BenchmarkTestExecutor
1515
{
1616
public NativeAotTests(ITestOutputHelper outputHelper) : base(outputHelper) { }
1717

18-
[FactDotNetCoreOnly("It's impossible to reliably detect the version of NativeAOT if the process is not a .NET Core or NativeAOT process")]
18+
[FactEnvSpecific("It's impossible to reliably detect the version of NativeAOT if the process is not a .NET Core or NativeAOT process", EnvRequirement.DotNetCoreOnly)]
1919
public void LatestNativeAotVersionIsSupported()
2020
{
2121
if (!RuntimeInformation.Is64BitPlatform()) // NativeAOT does not support 32bit yet

tests/BenchmarkDotNet.IntegrationTests/NugetReferenceTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public NuGetReferenceTests(ITestOutputHelper output) : base(output)
1818
{
1919
}
2020

21-
[FactNotLinux("For some reason this test is unstable on Ubuntu for both AzureDevOps and Travis CI")]
21+
[FactEnvSpecific("For some reason this test is unstable on Ubuntu for both AzureDevOps and Travis CI", EnvRequirement.NonLinux)]
2222
public void UserCanSpecifyCustomNuGetPackageDependency()
2323
{
2424
var toolchain = RuntimeInformation.GetCurrentRuntime().GetToolchain(preferMsBuildToolchains: true);
@@ -29,7 +29,7 @@ public void UserCanSpecifyCustomNuGetPackageDependency()
2929
CanExecute<WithCallToNewtonsoft>(config);
3030
}
3131

32-
[FactClassicDotNetOnly("Roslyn toolchain does not support .NET Core")]
32+
[FactEnvSpecific("Roslyn toolchain does not support .NET Core", EnvRequirement.FullFrameworkOnly)]
3333
public void RoslynToolchainDoesNotSupportNuGetPackageDependency()
3434
{
3535
var toolchain = RoslynToolchain.Instance;

tests/BenchmarkDotNet.IntegrationTests/PathTooLongTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace BenchmarkDotNet.IntegrationTests
55
{
66
public class PathTooLongTests : BenchmarkTestExecutor
77
{
8-
[FactWindowsOnly("Testing Windows long path limitation")]
8+
[FactEnvSpecific("Testing Windows long path limitation", EnvRequirement.WindowsOnly)]
99
public void PathTooLongTest() =>
1010
CanExecute<
1111
VeryLongName012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789>();

tests/BenchmarkDotNet.IntegrationTests/PowerManagementApplierTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class PowerManagementApplierTests : BenchmarkTestExecutor
1414

1515
public PowerManagementApplierTests(ITestOutputHelper output) : base(output) { }
1616

17-
[FactWindowsOnly("Setting high-performance plan is suitable only on Windows")]
17+
[FactEnvSpecific("Setting high-performance plan is suitable only on Windows", EnvRequirement.WindowsOnly)]
1818
public void TestSettingAndRevertingBackGuid()
1919
{
2020
var userPlan = PowerManagementHelper.CurrentPlan;
@@ -29,7 +29,7 @@ public void TestSettingAndRevertingBackGuid()
2929
Assert.Equal(userPlan, PowerManagementHelper.CurrentPlan);
3030
}
3131

32-
[FactWindowsOnly("Setting high-performance plan is suitable only on Windows")]
32+
[FactEnvSpecific("Setting high-performance plan is suitable only on Windows", EnvRequirement.WindowsOnly)]
3333
public void TestPowerPlanShouldNotChange()
3434
{
3535
var userPlan = PowerManagementHelper.CurrentPlan;

tests/BenchmarkDotNet.IntegrationTests/ProcessPropertiesTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ public ProcessPropertiesTests(ITestOutputHelper output)
1717
{
1818
}
1919

20-
[FactWindowsOnly("Process.set_PriorityClass requires root on Unix")]
20+
[FactEnvSpecific("Process.set_PriorityClass requires root on Unix", EnvRequirement.WindowsOnly)]
2121
public void HighPriorityIsSet()
2222
{
2323
CanExecute<HighPriority>();
2424
}
2525

26-
[FactWindowsOnly("Process.set_ProcessorAffinity requires root on Unix")]
26+
[FactEnvSpecific("Process.set_ProcessorAffinity requires root on Unix", EnvRequirement.WindowsOnly)]
2727
public void CustomAffinityCanBeSet()
2828
{
2929
var config = ManualConfig.CreateEmpty()

tests/BenchmarkDotNet.IntegrationTests/RoslynToolchainTest.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using BenchmarkDotNet.Attributes;
44
using BenchmarkDotNet.Jobs;
55
using BenchmarkDotNet.Tests.Loggers;
6+
using BenchmarkDotNet.Tests.XUnit;
67
using BenchmarkDotNet.Toolchains.Roslyn;
78
using Xunit;
89
using Xunit.Abstractions;
@@ -14,7 +15,7 @@ public class RoslynToolchainTest : BenchmarkTestExecutor
1415
public RoslynToolchainTest(ITestOutputHelper output) : base(output) { }
1516

1617
/// <summary>Prooftest for #1039.</summary>
17-
[Tests.XUnit.TheoryFullFrameworkOnly("Roslyn toolchain does not support .NET Core")]
18+
[TheoryEnvSpecific("Roslyn toolchain does not support .NET Core", EnvRequirement.FullFrameworkOnly)]
1819
[InlineData("en-US")]
1920
[InlineData("fr-FR")]
2021
[InlineData("ru-RU")]

tests/BenchmarkDotNet.IntegrationTests/TailCallDiagnoserTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class NonTailCallBenchmarks
5252
public long Factorial() => FactorialWithoutTailing(7);
5353
}
5454

55-
[TheoryWindowsOnly(WindowsOnly)]
55+
[TheoryEnvSpecific(WindowsOnly, EnvRequirement.WindowsOnly)]
5656
[MemberData(nameof(GetJits))]
5757
[Trait(Constants.Category, Constants.BackwardCompatibilityCategory)]
5858
public void TailCallDiagnoserCatchesTailCallEvents(Jit jit, Platform platform, Runtime runtime)
@@ -62,7 +62,7 @@ public void TailCallDiagnoserCatchesTailCallEvents(Jit jit, Platform platform, R
6262
Assert.Contains(output.CapturedOutput, x => x.Text.Contains(TAIL_CALL_MARK));
6363
}
6464

65-
[TheoryWindowsOnly(WindowsOnly)]
65+
[TheoryEnvSpecific(WindowsOnly, EnvRequirement.WindowsOnly)]
6666
[MemberData(nameof(GetJits))]
6767
[Trait(Constants.Category, Constants.BackwardCompatibilityCategory)]
6868
public void TailCallDiagnoserNotCatchesTailCallEvents(Jit jit, Platform platform, Runtime runtime)

tests/BenchmarkDotNet.Tests/AppConfigGeneratorTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public void GeneratesRightJitSettings(Jit jit, string expectedRuntimeNode)
142142
}
143143
}
144144

145-
[FactWindowsOnly("Full Framework is supported only on Windows")]
145+
[FactEnvSpecific("Full Framework is supported only on Windows", EnvRequirement.WindowsOnly)]
146146
public void RemovesStartupSettingsForPrivateBuildsOfClr()
147147
{
148148
const string input =

tests/BenchmarkDotNet.Tests/ArtifactFileNameHelperTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace BenchmarkDotNet.Tests
1313
{
1414
public class ArtifactFileNameHelperTests
1515
{
16-
[FactWindowsOnly(nonWindowsSkipReason: "ETW Sessions can be created only on Windows")]
16+
[FactEnvSpecific("ETW Sessions can be created only on Windows", EnvRequirement.WindowsOnly)]
1717
public void OnWindowsWeMustAlwaysUseOldLongPathsLimitForSessionFiles()
1818
{
1919
var config = DefaultConfig.Instance

tests/BenchmarkDotNet.Tests/ConfigParserTests.cs

+10-8
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ public void UserCanChooseStrategy()
110110
Assert.Equal(RunStrategy.ColdStart, job.Run.RunStrategy);
111111
}
112112

113-
[FactDotNetCoreOnly("When CommandLineParser wants to display help, it tries to get the Title of the Entry Assembly which is an xunit runner, which has no Title and fails..")]
113+
[FactEnvSpecific(
114+
"When CommandLineParser wants to display help, it tries to get the Title of the Entry Assembly which is an xunit runner, which has no Title and fails..",
115+
EnvRequirement.DotNetCoreOnly)]
114116
public void UnknownConfigMeansFailure()
115117
{
116118
Assert.False(ConfigParser.Parse(new[] { "--unknown" }, new OutputLogger(Output)).isSuccess);
@@ -133,7 +135,7 @@ public void NonExistingPathMeansFailure()
133135
Assert.False(ConfigParser.Parse(new[] { "--coreRun", nonExistingFile }, new OutputLogger(Output)).isSuccess);
134136
}
135137

136-
[FactDotNetCoreOnly("Detecting current version of .NET Core works only for .NET Core processes")]
138+
[FactEnvSpecific("Detecting current version of .NET Core works only for .NET Core processes", EnvRequirement.DotNetCoreOnly)]
137139
public void CoreRunConfigParsedCorrectlyWhenRuntimeNotSpecified()
138140
{
139141
var fakeDotnetCliPath = typeof(object).Assembly.Location;
@@ -150,7 +152,7 @@ public void CoreRunConfigParsedCorrectlyWhenRuntimeNotSpecified()
150152
Assert.Equal(fakeRestorePackages, toolchain.RestorePath.FullName);
151153
}
152154

153-
[FactClassicDotNetOnly("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process")]
155+
[FactEnvSpecific("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process", EnvRequirement.FullFrameworkOnly)]
154156
public void SpecifyingCoreRunWithFullFrameworkTargetsMostRecentTfm()
155157
{
156158
var fakePath = typeof(object).Assembly.Location;
@@ -163,7 +165,7 @@ public void SpecifyingCoreRunWithFullFrameworkTargetsMostRecentTfm()
163165
Assert.Equal("net8.0", generator.TargetFrameworkMoniker);
164166
}
165167

166-
[FactDotNetCoreOnly("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process")]
168+
[FactEnvSpecific("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process", EnvRequirement.DotNetCoreOnly)]
167169
public void SpecifyingCoreRunAndRuntimeCreatesTwoJobs()
168170
{
169171
const string runtime = "net7.0";
@@ -191,7 +193,7 @@ public void SpecifyingCoreRunAndRuntimeCreatesTwoJobs()
191193
Assert.Equal(fakeRestorePackages, generator.PackagesPath);
192194
}
193195

194-
[FactDotNetCoreOnly("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process")]
196+
[FactEnvSpecific("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process", EnvRequirement.DotNetCoreOnly)]
195197
public void FirstJobIsBaseline_RuntimesCoreRun()
196198
{
197199
const string runtime1 = "net5.0";
@@ -205,7 +207,7 @@ public void FirstJobIsBaseline_RuntimesCoreRun()
205207
Assert.Equal(runtime1, ((DotNetCliGenerator)baselineJob.GetToolchain().Generator).TargetFrameworkMoniker);
206208
}
207209

208-
[FactDotNetCoreOnly("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process")]
210+
[FactEnvSpecific("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process", EnvRequirement.DotNetCoreOnly)]
209211
public void FirstJobIsBaseline_CoreRunsRuntimes()
210212
{
211213
const string runtime1 = "net5.0";
@@ -219,7 +221,7 @@ public void FirstJobIsBaseline_CoreRunsRuntimes()
219221
Assert.Equal(fakePath1, ((CoreRunToolchain)baselineJob.GetToolchain()).SourceCoreRun.FullName);
220222
}
221223

222-
[FactDotNetCoreOnly("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process")]
224+
[FactEnvSpecific("It's impossible to determine TFM for CoreRunToolchain if host process is not .NET (Core) process", EnvRequirement.DotNetCoreOnly)]
223225
public void UserCanSpecifyMultipleCoreRunPaths()
224226
{
225227
var fakeCoreRunPath_1 = typeof(object).Assembly.Location;
@@ -244,7 +246,7 @@ public void MonoPathParsedCorrectly()
244246
Assert.Single(config.GetJobs().Where(job => job.Environment.Runtime is MonoRuntime mono && mono.CustomPath == fakeMonoPath));
245247
}
246248

247-
[FactWindowsOnly("Testing local builds of Full .NET Framework is supported only on Windows")]
249+
[FactEnvSpecific("Testing local builds of Full .NET Framework is supported only on Windows", EnvRequirement.WindowsOnly)]
248250
public void ClrVersionParsedCorrectly()
249251
{
250252
const string clrVersion = "secret";

0 commit comments

Comments
 (0)