diff --git a/src/yunit/TestAdapter.cs b/src/yunit/TestAdapter.cs index bc76875..7c1c7ef 100644 --- a/src/yunit/TestAdapter.cs +++ b/src/yunit/TestAdapter.cs @@ -118,13 +118,14 @@ void ExpandTest(TestData data) public void RunTests(IEnumerable tests, IRunContext runContext, IFrameworkHandle frameworkHandle) { var testRuns = new ConcurrentBag(); - Parallel.ForEach(tests, test => testRuns.Add(RunTest(frameworkHandle, test))); + var inOnlyMode = tests.Any(test => test.DisplayName.IndexOf("[only]", 0, StringComparison.OrdinalIgnoreCase) >= 0); + Parallel.ForEach(tests, test => testRuns.Add(RunTest(frameworkHandle, test, inOnlyMode))); Task.WhenAll(testRuns).GetAwaiter().GetResult(); } public void RunTests(IEnumerable sources, IRunContext runContext, IFrameworkHandle frameworkHandle) { - var testRuns = new ConcurrentBag(); + var tests = new ConcurrentBag(); var filterExpression = runContext.GetTestCaseFilter(s_filteringProperties, null); @@ -134,15 +135,15 @@ public void RunTests(IEnumerable sources, IRunContext runContext, IFrame { if (filterExpression == null || filterExpression.MatchTestCase(test, name => GetPropertyValue(test, name))) { - testRuns.Add(RunTest(frameworkHandle, test)); + tests.Add(test); } }, message => frameworkHandle.SendMessage(TestMessageLevel.Warning, message)); - Task.WhenAll(testRuns).GetAwaiter().GetResult(); + RunTests(tests, runContext, frameworkHandle); } - private async Task RunTest(ITestExecutionRecorder log, TestCase test) + private async Task RunTest(ITestExecutionRecorder log, TestCase test, bool inOnlyMode = false) { if (_canceled) { @@ -162,7 +163,7 @@ private async Task RunTest(ITestExecutionRecorder log, TestCase test) result.StartTime = DateTime.UtcNow; var timeout = test.GetPropertyValue(s_timeoutProperty, 1000); - var runTest = RunTest(test); + var runTest = RunTest(test, inOnlyMode); if (await Task.WhenAny(runTest, Task.Delay(timeout)) == runTest) { @@ -268,13 +269,18 @@ private static void DiscoverTests(ITestAttribute attribute, string sourcePath, A Parallel.ForEach(files, file => attribute.DiscoverTests(Path.Combine(sourcePath, file), report)); } - private Task RunTest(TestCase test) + private Task RunTest(TestCase test, bool inOnlyMode = false) { if (test.DisplayName.IndexOf("[skip]", 0, StringComparison.OrdinalIgnoreCase) >= 0) { throw new TestSkippedException("Marked as [skip]"); } + if (inOnlyMode && test.DisplayName.IndexOf("[only]", 0, StringComparison.OrdinalIgnoreCase) < 0) + { + throw new TestSkippedException("Some other tests has been marked as [only]"); + } + var (type, method) = GetMethodInfo(test.Source, test.FullyQualifiedName); if (type is null || method is null) { diff --git a/test/yunit.nuget.test/NuGetTest.cs b/test/yunit.nuget.test/NuGetTest.cs index 064a9e9..b0697e3 100644 --- a/test/yunit.nuget.test/NuGetTest.cs +++ b/test/yunit.nuget.test/NuGetTest.cs @@ -1,31 +1,36 @@ -using System; -using System.IO; +using System.IO; using System.Threading.Tasks; namespace Yunit.NuGetTest { public class NuGetTest { - [MarkdownTest("~/test/yunit.nuget.test/**/*.md")] + [MarkdownTest("~/test/yunit.nuget.test/yunit.nuget.test.md")] public void Foo(string filename) { File.WriteAllText(filename, ""); } - [MarkdownTest("~/test/yunit.nuget.test/**/*.md")] + [MarkdownTest("~/test/yunit.nuget.test/yunit-only.nuget.test.md")] + public void FooWithOnly(string filename) + { + File.WriteAllText(filename, ""); + } + + [MarkdownTest("~/test/yunit.nuget.test/yunit.nuget.test.md")] public void SkipSync(string filename) { throw new TestSkippedException(); } - [MarkdownTest("~/test/yunit.nuget.test/**/*.md")] + [MarkdownTest("~/test/yunit.nuget.test/yunit.nuget.test.md")] public async Task SkipAsync(TestData data, string filename) { await Task.Delay(1); throw new TestSkippedException(); } - [MarkdownTest("~/test/yunit.nuget.test/**/*.md", ExpandTest = "ExpandTest")] + [MarkdownTest("~/test/yunit.nuget.test/yunit.nuget.test.md", ExpandTest = "ExpandTest")] public void ExpandTestMethod(TestData data, string filename) { throw new TestSkippedException(data.Matrix); diff --git a/test/yunit.nuget.test/yunit-only.nuget.test.md b/test/yunit.nuget.test/yunit-only.nuget.test.md new file mode 100644 index 0000000..2e87ebf --- /dev/null +++ b/test/yunit.nuget.test/yunit-only.nuget.test.md @@ -0,0 +1,11 @@ +# [only] yunit.NuGetTest with only mode + +``````yml +foo +`````` + +# This test should be skipped + +``````yml +foo +`````` \ No newline at end of file