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()
{