diff --git a/TUnit.Engine.Tests/FilterByArgumentValueFilteringTests.cs b/TUnit.Engine.Tests/FilterByArgumentValueFilteringTests.cs new file mode 100644 index 0000000000..8d72d7a81b --- /dev/null +++ b/TUnit.Engine.Tests/FilterByArgumentValueFilteringTests.cs @@ -0,0 +1,21 @@ +using Shouldly; +using TUnit.Engine.Tests.Enums; + +namespace TUnit.Engine.Tests; + +public class FilterByArgumentValueFilteringTests(TestMode testMode) : InvokableTestBase(testMode) +{ + [Test] + public async Task ExactMatch() + { + await RunTestsWithFilter( + "/*/*/FilterByArgumentValueTests/*[arg0=beta]", + [ + result => result.ResultSummary.Outcome.ShouldBe("Completed"), + result => result.ResultSummary.Counters.Total.ShouldBe(1), + result => result.ResultSummary.Counters.Passed.ShouldBe(1), + result => result.ResultSummary.Counters.Failed.ShouldBe(0), + result => result.ResultSummary.Counters.NotExecuted.ShouldBe(0) + ]); + } +} diff --git a/TUnit.Engine/Building/TestBuilder.cs b/TUnit.Engine/Building/TestBuilder.cs index c366936314..875e1732bf 100644 --- a/TUnit.Engine/Building/TestBuilder.cs +++ b/TUnit.Engine/Building/TestBuilder.cs @@ -1125,6 +1125,16 @@ private Task InvokeDiscoveryEventReceiversAsync(TestContext context) context.Metadata.TestDetails.TestName, context); + // Expose the resolved method argument values as filterable properties so + // callers can use `--treenode-filter` with syntax like `MyTest[arg0=*foo*]` + // to target a specific parameterized instance. + var testMethodArguments = context.Metadata.TestDetails.TestMethodArguments; + for (var i = 0; i < testMethodArguments.Length; i++) + { + var argValue = testMethodArguments[i]?.ToString() ?? ""; + discoveredContext.AddProperty($"arg{i}", argValue); + } + return _eventReceiverOrchestrator.InvokeTestDiscoveryEventReceiversAsync(context, discoveredContext, CancellationToken.None); } diff --git a/TUnit.TestProject/FilterByArgumentValueTests.cs b/TUnit.TestProject/FilterByArgumentValueTests.cs new file mode 100644 index 0000000000..33cad8b1d0 --- /dev/null +++ b/TUnit.TestProject/FilterByArgumentValueTests.cs @@ -0,0 +1,12 @@ +namespace TUnit.TestProject; + +public class FilterByArgumentValueTests +{ + [Test] + [Arguments("alpha")] + [Arguments("beta")] + [Arguments("gamma")] + public void Test(string value) + { + } +}