From ef423c42f82cabea5aea5556febacacaa76aa50e Mon Sep 17 00:00:00 2001 From: Jeroen Oortwijn <51476918+JeroenOortwijn@users.noreply.github.com> Date: Fri, 19 Jun 2020 17:03:29 +0200 Subject: [PATCH 1/7] Add test for process.MainWindowTitle refresh bug See #36768. --- .../tests/ProcessTests.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index ca9a3f6dbacef5..845a720d12343e 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -1596,6 +1596,42 @@ public void MainWindowHandle_GetWithGui_ShouldRefresh_Windows() } } + [Fact] + [OuterLoop] + [Trait(XunitConstants.Category, XunitConstants.IgnoreForCI)] // Pops UI + [PlatformSpecific(TestPlatforms.Windows)] + public void MainWindowTitle_GetWithGui_ShouldRefresh_Windows() + { + const string ExePath = "notepad.exe"; + Assert.True(IsProgramInstalled(ExePath)); + + using (Process process = Process.Start(ExePath)) + { + try + { + Assert.Equal(string.Empty, process.MainWindowTitle); + + for (int attempt = 0; attempt < 50; ++attempt) + { + process.Refresh(); + if (process.MainWindowTitle != string.Empty) + { + break; + } + + Thread.Sleep(100); + } + + Assert.NotEqual(string.Empty, process.MainWindowHandle); + } + finally + { + process.Kill(); + Assert.True(process.WaitForExit(WaitInMS)); + } + } + } + [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] public void MainWindowTitle_NoWindow_ReturnsEmpty() { From 9a24240c0e73f05d55c6063e88eebbd84c1bc7af Mon Sep 17 00:00:00 2001 From: Jeroen Oortwijn <51476918+JeroenOortwijn@users.noreply.github.com> Date: Tue, 23 Jun 2020 15:56:38 +0200 Subject: [PATCH 2/7] Add test for Process.Responding refresh bug See dotnet#36768. --- .../tests/ProcessTests.cs | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index 845a720d12343e..85373daad953ed 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -1632,6 +1632,51 @@ public void MainWindowTitle_GetWithGui_ShouldRefresh_Windows() } } + [Fact] + [OuterLoop] + [Trait(XunitConstants.Category, XunitConstants.IgnoreForCI)] // Pops UI + [PlatformSpecific(TestPlatforms.Windows)] + public void Responding_GetWithGui_ShouldRefresh_Windows() + { + const string ExePath = @"C:\Program Files\Windows NT\Accessories\wordpad.exe"; + Assert.True(IsProgramInstalled(ExePath)); + + string dummyFilePath = $@"{Path.GetTempPath()}dummy_file"; + + var dummyFile = new FileStream(dummyFilePath, System.IO.FileMode.Create); + _ = dummyFile.Seek(2048L * 1024 * 1024, SeekOrigin.Begin); + dummyFile.WriteByte(0); + dummyFile.Close(); + + using (Process process = Process.Start(ExePath, dummyFilePath)) + { + try + { + Assert.True(process.Responding); + + for (int attempt = 0; attempt < 100; ++attempt) + { + process.Refresh(); + if (!process.Responding) + { + break; + } + + Thread.Sleep(100); + } + + Assert.False(process.Responding); + } + finally + { + process.Kill(); + Assert.True(process.WaitForExit(WaitInMS)); + } + } + + File.Delete(dummyFilePath); + } + [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] public void MainWindowTitle_NoWindow_ReturnsEmpty() { From efc9f5ef1cbd9ec916e3d98155bdb788b7406c77 Mon Sep 17 00:00:00 2001 From: Jeroen Oortwijn <51476918+JeroenOortwijn@users.noreply.github.com> Date: Tue, 23 Jun 2020 16:05:25 +0200 Subject: [PATCH 3/7] Ensure Process.MainWindowTitle is refreshed See dotnet#36768. --- .../src/System/Diagnostics/Process.Windows.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs index af02b8a2b6141f..a47c6b965a3d3f 100644 --- a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs +++ b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs @@ -119,6 +119,7 @@ private void RefreshCore() { _signaled = false; _haveMainWindow = false; + _mainWindowTitle = null; } /// Additional logic invoked when the Process is closed. From cbb831b2405602eec8c383195e9e30da1d1a8fc7 Mon Sep 17 00:00:00 2001 From: Jeroen Oortwijn <51476918+JeroenOortwijn@users.noreply.github.com> Date: Tue, 23 Jun 2020 16:09:58 +0200 Subject: [PATCH 4/7] Ensure Process.Responding is refreshed See dotnet#36768. --- .../src/System/Diagnostics/Process.Windows.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs index a47c6b965a3d3f..b0ab947e02b1d5 100644 --- a/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs +++ b/src/libraries/System.Diagnostics.Process/src/System/Diagnostics/Process.Windows.cs @@ -120,6 +120,7 @@ private void RefreshCore() _signaled = false; _haveMainWindow = false; _mainWindowTitle = null; + _haveResponding = false; } /// Additional logic invoked when the Process is closed. From 09ecd1059a6ca07fe021ce84f49ea28dcde93889 Mon Sep 17 00:00:00 2001 From: Jeroen Oortwijn <51476918+JeroenOortwijn@users.noreply.github.com> Date: Tue, 23 Jun 2020 16:21:42 +0200 Subject: [PATCH 5/7] Made dummyFilePath const --- .../System.Diagnostics.Process/tests/ProcessTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index 85373daad953ed..5ee9a90f0edd61 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -1641,14 +1641,14 @@ public void Responding_GetWithGui_ShouldRefresh_Windows() const string ExePath = @"C:\Program Files\Windows NT\Accessories\wordpad.exe"; Assert.True(IsProgramInstalled(ExePath)); - string dummyFilePath = $@"{Path.GetTempPath()}dummy_file"; + const string DummyFilePath = $@"{Path.GetTempPath()}dummy_file"; - var dummyFile = new FileStream(dummyFilePath, System.IO.FileMode.Create); + var dummyFile = new FileStream(DummyFilePath, System.IO.FileMode.Create); _ = dummyFile.Seek(2048L * 1024 * 1024, SeekOrigin.Begin); dummyFile.WriteByte(0); dummyFile.Close(); - using (Process process = Process.Start(ExePath, dummyFilePath)) + using (Process process = Process.Start(ExePath, DummyFilePath)) { try { @@ -1674,7 +1674,7 @@ public void Responding_GetWithGui_ShouldRefresh_Windows() } } - File.Delete(dummyFilePath); + File.Delete(DummyFilePath); } [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] From 18f3c31c6bba87390c205b899b5ecd0e2c48c44f Mon Sep 17 00:00:00 2001 From: Jeroen Oortwijn <51476918+JeroenOortwijn@users.noreply.github.com> Date: Thu, 25 Jun 2020 15:50:52 +0200 Subject: [PATCH 6/7] Fix glaring bugs --- .../System.Diagnostics.Process/tests/ProcessTests.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index 5ee9a90f0edd61..8bc507ca2a798a 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -1622,7 +1622,7 @@ public void MainWindowTitle_GetWithGui_ShouldRefresh_Windows() Thread.Sleep(100); } - Assert.NotEqual(string.Empty, process.MainWindowHandle); + Assert.NotEqual(string.Empty, process.MainWindowTitle); } finally { @@ -1641,14 +1641,14 @@ public void Responding_GetWithGui_ShouldRefresh_Windows() const string ExePath = @"C:\Program Files\Windows NT\Accessories\wordpad.exe"; Assert.True(IsProgramInstalled(ExePath)); - const string DummyFilePath = $@"{Path.GetTempPath()}dummy_file"; + string dummyFilePath = $@"{Path.GetTempPath()}dummy_file"; - var dummyFile = new FileStream(DummyFilePath, System.IO.FileMode.Create); + var dummyFile = new FileStream(dummyFilePath, System.IO.FileMode.Create); _ = dummyFile.Seek(2048L * 1024 * 1024, SeekOrigin.Begin); dummyFile.WriteByte(0); dummyFile.Close(); - using (Process process = Process.Start(ExePath, DummyFilePath)) + using (Process process = Process.Start(ExePath, dummyFilePath)) { try { @@ -1674,7 +1674,7 @@ public void Responding_GetWithGui_ShouldRefresh_Windows() } } - File.Delete(DummyFilePath); + File.Delete(dummyFilePath); } [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] From c4d3ed52ed8c3763ab69dbc53376eca77e02abd4 Mon Sep 17 00:00:00 2001 From: Eirik Tsarpalis Date: Wed, 12 Aug 2020 10:58:25 +0100 Subject: [PATCH 7/7] remove Process.Responding test --- .../tests/ProcessTests.cs | 45 ------------------- 1 file changed, 45 deletions(-) diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs index 8bc507ca2a798a..193c26b65a7e6b 100644 --- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs +++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.cs @@ -1632,51 +1632,6 @@ public void MainWindowTitle_GetWithGui_ShouldRefresh_Windows() } } - [Fact] - [OuterLoop] - [Trait(XunitConstants.Category, XunitConstants.IgnoreForCI)] // Pops UI - [PlatformSpecific(TestPlatforms.Windows)] - public void Responding_GetWithGui_ShouldRefresh_Windows() - { - const string ExePath = @"C:\Program Files\Windows NT\Accessories\wordpad.exe"; - Assert.True(IsProgramInstalled(ExePath)); - - string dummyFilePath = $@"{Path.GetTempPath()}dummy_file"; - - var dummyFile = new FileStream(dummyFilePath, System.IO.FileMode.Create); - _ = dummyFile.Seek(2048L * 1024 * 1024, SeekOrigin.Begin); - dummyFile.WriteByte(0); - dummyFile.Close(); - - using (Process process = Process.Start(ExePath, dummyFilePath)) - { - try - { - Assert.True(process.Responding); - - for (int attempt = 0; attempt < 100; ++attempt) - { - process.Refresh(); - if (!process.Responding) - { - break; - } - - Thread.Sleep(100); - } - - Assert.False(process.Responding); - } - finally - { - process.Kill(); - Assert.True(process.WaitForExit(WaitInMS)); - } - } - - File.Delete(dummyFilePath); - } - [ConditionalFact(typeof(RemoteExecutor), nameof(RemoteExecutor.IsSupported))] public void MainWindowTitle_NoWindow_ReturnsEmpty() {