From 6dd5fa4094974b16b37a8ff7e50c55c2d3e6e0a5 Mon Sep 17 00:00:00 2001 From: "Simon Zhao (BEYONDSOFT CONSULTING INC)" Date: Thu, 3 Jul 2025 11:21:55 +0800 Subject: [PATCH 1/3] Re-enable DotNet.Watcher.Tests --- .../TestUtilities/WatchableApp.cs | 29 +++++++++++++++++-- .../Watch/GlobbingAppTests.cs | 10 +++---- .../Watch/NoDepsAppTests.cs | 2 +- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs b/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs index dcbbc27b6073..0794199ee190 100644 --- a/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs +++ b/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs @@ -65,9 +65,9 @@ public async Task AssertOutputLineStartsWith(string expectedPrefix, Pred { Logger.Log($"Test waiting for output: '{expectedPrefix}'", testPath, testLine); - var line = await Process.GetOutputLineAsync( - success: line => line.StartsWith(expectedPrefix, StringComparison.Ordinal), - failure: failure ?? new Predicate(line => line.Contains(WatchErrorOutputEmoji, StringComparison.Ordinal))); + var line = await TryGetOutputLineWithDelayAsync( + expectedPrefix, + failure ?? new Predicate(line => line.Contains(WatchErrorOutputEmoji, StringComparison.Ordinal))); if (line == null) { @@ -171,5 +171,28 @@ public void SendKey(char c) Process.Process.StandardInput.Write(c); Process.Process.StandardInput.Flush(); } + + private async Task TryGetOutputLineWithDelayAsync(string expectedPrefix, Predicate failure, int maxAttempts = 2) + { + for (int attempt = 0; attempt < maxAttempts; attempt++) + { + if (attempt > 0) + { + Logger.Log($"Retrying to find output with prefix: '{expectedPrefix}' (attempt {attempt + 1}/{maxAttempts})"); + await Task.Delay(TimeSpan.FromSeconds(1)); + } + + var line = await Process.GetOutputLineAsync( + success: line => line.StartsWith(expectedPrefix, StringComparison.Ordinal), + failure: failure); + + if (line is not null) + { + return line; + } + } + + return null; + } } } diff --git a/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs b/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs index 48ff617568cc..159f76162eba 100644 --- a/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs +++ b/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs @@ -12,7 +12,7 @@ public GlobbingAppTests(ITestOutputHelper logger) { } - [ConditionalTheory(Skip = "https://github.com/dotnet/sdk/issues/42921")] + [ConditionalTheory] [InlineData(true)] [InlineData(false)] public async Task ChangeCompiledFile(bool usePollingWatcher) @@ -34,7 +34,7 @@ public async Task ChangeCompiledFile(bool usePollingWatcher) await AssertCompiledAppDefinedTypes(expected: 2); } - [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] + [Fact] public async Task DeleteCompiledFile() { var testAsset = TestAssets.CopyTestAsset(AppName) @@ -51,7 +51,7 @@ public async Task DeleteCompiledFile() await AssertCompiledAppDefinedTypes(expected: 1); } - [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] + [Fact] public async Task DeleteSourceFolder() { var testAsset = TestAssets.CopyTestAsset(AppName) @@ -68,7 +68,7 @@ public async Task DeleteSourceFolder() await AssertCompiledAppDefinedTypes(expected: 1); } - [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] + [Fact] public async Task RenameCompiledFile() { var testAsset = TestAssets.CopyTestAsset(AppName) @@ -85,7 +85,7 @@ public async Task RenameCompiledFile() await App.AssertStarted(); } - [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] + [Fact] public async Task ChangeExcludedFile() { var testAsset = TestAssets.CopyTestAsset(AppName) diff --git a/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs b/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs index 9614366519d9..bd5bf18aa928 100644 --- a/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs +++ b/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs @@ -7,7 +7,7 @@ public class NoDepsAppTests(ITestOutputHelper logger) : DotNetWatchTestBase(logg { private const string AppName = "WatchNoDepsApp"; - [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] + [Fact] public async Task RestartProcessOnFileChange() { var testAsset = TestAssets.CopyTestAsset(AppName) From 148ea17cb8c09f1050dc7f28c62c2116f209194e Mon Sep 17 00:00:00 2001 From: "Simon Zhao (BEYONDSOFT CONSULTING INC)" Date: Wed, 16 Jul 2025 17:02:58 +0800 Subject: [PATCH 2/3] restore changes of WatchableApp.cs --- .../TestUtilities/WatchableApp.cs | 29 ++----------------- .../Watch/GlobbingAppTests.cs | 6 ++-- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs b/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs index 0794199ee190..dcbbc27b6073 100644 --- a/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs +++ b/test/dotnet-watch.Tests/TestUtilities/WatchableApp.cs @@ -65,9 +65,9 @@ public async Task AssertOutputLineStartsWith(string expectedPrefix, Pred { Logger.Log($"Test waiting for output: '{expectedPrefix}'", testPath, testLine); - var line = await TryGetOutputLineWithDelayAsync( - expectedPrefix, - failure ?? new Predicate(line => line.Contains(WatchErrorOutputEmoji, StringComparison.Ordinal))); + var line = await Process.GetOutputLineAsync( + success: line => line.StartsWith(expectedPrefix, StringComparison.Ordinal), + failure: failure ?? new Predicate(line => line.Contains(WatchErrorOutputEmoji, StringComparison.Ordinal))); if (line == null) { @@ -171,28 +171,5 @@ public void SendKey(char c) Process.Process.StandardInput.Write(c); Process.Process.StandardInput.Flush(); } - - private async Task TryGetOutputLineWithDelayAsync(string expectedPrefix, Predicate failure, int maxAttempts = 2) - { - for (int attempt = 0; attempt < maxAttempts; attempt++) - { - if (attempt > 0) - { - Logger.Log($"Retrying to find output with prefix: '{expectedPrefix}' (attempt {attempt + 1}/{maxAttempts})"); - await Task.Delay(TimeSpan.FromSeconds(1)); - } - - var line = await Process.GetOutputLineAsync( - success: line => line.StartsWith(expectedPrefix, StringComparison.Ordinal), - failure: failure); - - if (line is not null) - { - return line; - } - } - - return null; - } } } diff --git a/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs b/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs index 159f76162eba..c48dc9420860 100644 --- a/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs +++ b/test/dotnet-watch.Tests/Watch/GlobbingAppTests.cs @@ -34,7 +34,7 @@ public async Task ChangeCompiledFile(bool usePollingWatcher) await AssertCompiledAppDefinedTypes(expected: 2); } - [Fact] + [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] public async Task DeleteCompiledFile() { var testAsset = TestAssets.CopyTestAsset(AppName) @@ -51,7 +51,7 @@ public async Task DeleteCompiledFile() await AssertCompiledAppDefinedTypes(expected: 1); } - [Fact] + [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] public async Task DeleteSourceFolder() { var testAsset = TestAssets.CopyTestAsset(AppName) @@ -68,7 +68,7 @@ public async Task DeleteSourceFolder() await AssertCompiledAppDefinedTypes(expected: 1); } - [Fact] + [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] public async Task RenameCompiledFile() { var testAsset = TestAssets.CopyTestAsset(AppName) From 588876b8468745f62fbe88039b2924ea034ba715 Mon Sep 17 00:00:00 2001 From: "Simon Zhao (BEYONDSOFT CONSULTING INC)" Date: Wed, 16 Jul 2025 17:07:03 +0800 Subject: [PATCH 3/3] Ignore the unstable case --- test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs b/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs index bd5bf18aa928..9614366519d9 100644 --- a/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs +++ b/test/dotnet-watch.Tests/Watch/NoDepsAppTests.cs @@ -7,7 +7,7 @@ public class NoDepsAppTests(ITestOutputHelper logger) : DotNetWatchTestBase(logg { private const string AppName = "WatchNoDepsApp"; - [Fact] + [Fact(Skip = "https://github.com/dotnet/sdk/issues/42921")] public async Task RestartProcessOnFileChange() { var testAsset = TestAssets.CopyTestAsset(AppName)