From 6e875df2eb25c2e675d879c29912c75f87c35c21 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Mar 2026 16:00:27 +0000
Subject: [PATCH 1/8] Initial plan
From 325dbb0a0c52f453026b33710d6d3423d339258c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Mar 2026 16:29:43 +0000
Subject: [PATCH 2/8] Add System.Diagnostics.Process tests for mobile platforms
(Android/iOS)
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/52b94fd0-1cd0-4d55-b52f-3f41b2b5e6a4
---
.../tests/ProcessTests.AnyMobile.cs | 158 ++++++++++++++++++
.../System.Diagnostics.Process.Tests.csproj | 7 +-
2 files changed, 163 insertions(+), 2 deletions(-)
create mode 100644 src/libraries/System.Diagnostics.Process/tests/ProcessTests.AnyMobile.cs
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.AnyMobile.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.AnyMobile.cs
new file mode 100644
index 00000000000000..66d7b388a865a0
--- /dev/null
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.AnyMobile.cs
@@ -0,0 +1,158 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.IO;
+using Xunit;
+
+namespace System.Diagnostics.Tests
+{
+ public partial class ProcessTests : ProcessTestBase
+ {
+ // Simple Unix tools used in Android tests. On Android, these live under
+ // /system/bin and are always present (they are provided by toybox/busybox).
+ // GetProgramPath searches PATH, and Android's PATH includes /system/bin.
+ private static string GetAndroidProgramPath(string program) =>
+ GetProgramPath(program) ?? Path.Combine("/system/bin", program);
+
+ private const string NonExistentPath = "/nonexistent_path_for_testing_1234567890";
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_Start_SimpleCommand_ExitsSuccessfully()
+ {
+ string ls = GetAndroidProgramPath("ls");
+ using (var process = Process.Start(ls, "/"))
+ {
+ Assert.NotNull(process);
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.Equal(0, process.ExitCode);
+ Assert.True(process.HasExited);
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_Start_WithArgumentList_ExitsSuccessfully()
+ {
+ string ls = GetAndroidProgramPath("ls");
+ var psi = new ProcessStartInfo(ls);
+ psi.ArgumentList.Add("/");
+ using (var process = Process.Start(psi))
+ {
+ Assert.NotNull(process);
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.Equal(0, process.ExitCode);
+ Assert.True(process.HasExited);
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_Start_CaptureStdout_ReadsOutput()
+ {
+ string ls = GetAndroidProgramPath("ls");
+ var psi = new ProcessStartInfo(ls, "/")
+ {
+ RedirectStandardOutput = true
+ };
+ using (var process = Process.Start(psi))
+ {
+ Assert.NotNull(process);
+ string output = process.StandardOutput.ReadToEnd();
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.Equal(0, process.ExitCode);
+ Assert.False(string.IsNullOrEmpty(output));
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_Kill_TerminatesRunningProcess()
+ {
+ string sleep = GetAndroidProgramPath("sleep");
+ using (var process = Process.Start(sleep, "600"))
+ {
+ Assert.NotNull(process);
+ Assert.False(process.HasExited);
+ Assert.True(process.Id > 0);
+ process.Kill();
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.True(process.HasExited);
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_Start_ExitCode_ReflectsCommandFailure()
+ {
+ string ls = GetAndroidProgramPath("ls");
+ var psi = new ProcessStartInfo(ls, NonExistentPath)
+ {
+ RedirectStandardError = true // suppress error output
+ };
+ using (var process = Process.Start(psi))
+ {
+ Assert.NotNull(process);
+ process.StandardError.ReadToEnd();
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.NotEqual(0, process.ExitCode);
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_Id_IsValidForStartedProcess()
+ {
+ string sleep = GetAndroidProgramPath("sleep");
+ using (var process = Process.Start(sleep, "600"))
+ {
+ Assert.NotNull(process);
+ try
+ {
+ Assert.True(process.Id > 0);
+ }
+ finally
+ {
+ process.Kill();
+ process.WaitForExit();
+ }
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_ProcessName_IsSetForStartedProcess()
+ {
+ string sleep = GetAndroidProgramPath("sleep");
+ using (var process = Process.Start(sleep, "600"))
+ {
+ Assert.NotNull(process);
+ try
+ {
+ Assert.NotNull(process.ProcessName);
+ Assert.NotEmpty(process.ProcessName);
+ }
+ finally
+ {
+ process.Kill();
+ process.WaitForExit();
+ }
+ }
+ }
+
+ [Fact]
+ [PlatformSpecific(TestPlatforms.Android)]
+ public void Process_HasExited_IsFalseWhileRunning_TrueAfterExit()
+ {
+ string sleep = GetAndroidProgramPath("sleep");
+ using (var process = Process.Start(sleep, "600"))
+ {
+ Assert.NotNull(process);
+ Assert.False(process.HasExited);
+ process.Kill();
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.True(process.HasExited);
+ }
+ }
+ }
+}
diff --git a/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
index e44431ae36405a..98a6e34efcb4b1 100644
--- a/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
+++ b/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
@@ -3,7 +3,7 @@
true
$(MSBuildProjectDirectory)\..\src\Resources\Strings.resx
true
- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser
+ $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser;$(NetCoreAppCurrent)-android;$(NetCoreAppCurrent)-ios;$(NetCoreAppCurrent)-tvos;$(NetCoreAppCurrent)-maccatalyst
true
@@ -58,7 +58,7 @@
-
+
@@ -73,6 +73,9 @@
+
+
+
From 403f131c11103a56f3738803aad002db199464c9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Mar 2026 16:38:07 +0000
Subject: [PATCH 3/8] Scope Process mobile tests to Android only; rename to
ProcessTests.Android.cs
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/800d4e96-f860-4a1c-89f3-e764451d1da9
---
...{ProcessTests.AnyMobile.cs => ProcessTests.Android.cs} | 0
.../tests/System.Diagnostics.Process.Tests.csproj | 8 ++++----
2 files changed, 4 insertions(+), 4 deletions(-)
rename src/libraries/System.Diagnostics.Process/tests/{ProcessTests.AnyMobile.cs => ProcessTests.Android.cs} (100%)
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.AnyMobile.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
similarity index 100%
rename from src/libraries/System.Diagnostics.Process/tests/ProcessTests.AnyMobile.cs
rename to src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
diff --git a/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
index 98a6e34efcb4b1..b4a1c515103908 100644
--- a/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
+++ b/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
@@ -3,7 +3,7 @@
true
$(MSBuildProjectDirectory)\..\src\Resources\Strings.resx
true
- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser;$(NetCoreAppCurrent)-android;$(NetCoreAppCurrent)-ios;$(NetCoreAppCurrent)-tvos;$(NetCoreAppCurrent)-maccatalyst
+ $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-unix;$(NetCoreAppCurrent)-browser;$(NetCoreAppCurrent)-android
true
@@ -58,7 +58,7 @@
-
+
@@ -73,8 +73,8 @@
-
-
+
+
From ba2dc9c623f91debccfba81bb0de892d4cea9eed Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Mar 2026 16:45:24 +0000
Subject: [PATCH 4/8] Remove GetAndroidProgramPath helper; replace var with
explicit types throughout
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/8c73b007-1f6a-4064-8e02-ff21eaec112c
---
.../tests/ProcessTests.Android.cs | 39 ++++++-------------
1 file changed, 12 insertions(+), 27 deletions(-)
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
index 66d7b388a865a0..d946df4b2104f9 100644
--- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
@@ -1,27 +1,19 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-using System.IO;
using Xunit;
namespace System.Diagnostics.Tests
{
public partial class ProcessTests : ProcessTestBase
{
- // Simple Unix tools used in Android tests. On Android, these live under
- // /system/bin and are always present (they are provided by toybox/busybox).
- // GetProgramPath searches PATH, and Android's PATH includes /system/bin.
- private static string GetAndroidProgramPath(string program) =>
- GetProgramPath(program) ?? Path.Combine("/system/bin", program);
-
private const string NonExistentPath = "/nonexistent_path_for_testing_1234567890";
[Fact]
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_SimpleCommand_ExitsSuccessfully()
{
- string ls = GetAndroidProgramPath("ls");
- using (var process = Process.Start(ls, "/"))
+ using (Process process = Process.Start("ls", "/"))
{
Assert.NotNull(process);
Assert.True(process.WaitForExit(WaitInMS));
@@ -34,10 +26,9 @@ public void Process_Start_SimpleCommand_ExitsSuccessfully()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_WithArgumentList_ExitsSuccessfully()
{
- string ls = GetAndroidProgramPath("ls");
- var psi = new ProcessStartInfo(ls);
+ ProcessStartInfo psi = new("ls");
psi.ArgumentList.Add("/");
- using (var process = Process.Start(psi))
+ using (Process process = Process.Start(psi))
{
Assert.NotNull(process);
Assert.True(process.WaitForExit(WaitInMS));
@@ -50,12 +41,11 @@ public void Process_Start_WithArgumentList_ExitsSuccessfully()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_CaptureStdout_ReadsOutput()
{
- string ls = GetAndroidProgramPath("ls");
- var psi = new ProcessStartInfo(ls, "/")
+ ProcessStartInfo psi = new("ls", "/")
{
RedirectStandardOutput = true
};
- using (var process = Process.Start(psi))
+ using (Process process = Process.Start(psi))
{
Assert.NotNull(process);
string output = process.StandardOutput.ReadToEnd();
@@ -69,8 +59,7 @@ public void Process_Start_CaptureStdout_ReadsOutput()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Kill_TerminatesRunningProcess()
{
- string sleep = GetAndroidProgramPath("sleep");
- using (var process = Process.Start(sleep, "600"))
+ using (Process process = Process.Start("sleep", "600"))
{
Assert.NotNull(process);
Assert.False(process.HasExited);
@@ -85,12 +74,11 @@ public void Process_Kill_TerminatesRunningProcess()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_ExitCode_ReflectsCommandFailure()
{
- string ls = GetAndroidProgramPath("ls");
- var psi = new ProcessStartInfo(ls, NonExistentPath)
+ ProcessStartInfo psi = new("ls", NonExistentPath)
{
- RedirectStandardError = true // suppress error output
+ RedirectStandardError = true
};
- using (var process = Process.Start(psi))
+ using (Process process = Process.Start(psi))
{
Assert.NotNull(process);
process.StandardError.ReadToEnd();
@@ -103,8 +91,7 @@ public void Process_Start_ExitCode_ReflectsCommandFailure()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Id_IsValidForStartedProcess()
{
- string sleep = GetAndroidProgramPath("sleep");
- using (var process = Process.Start(sleep, "600"))
+ using (Process process = Process.Start("sleep", "600"))
{
Assert.NotNull(process);
try
@@ -123,8 +110,7 @@ public void Process_Id_IsValidForStartedProcess()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_ProcessName_IsSetForStartedProcess()
{
- string sleep = GetAndroidProgramPath("sleep");
- using (var process = Process.Start(sleep, "600"))
+ using (Process process = Process.Start("sleep", "600"))
{
Assert.NotNull(process);
try
@@ -144,8 +130,7 @@ public void Process_ProcessName_IsSetForStartedProcess()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_HasExited_IsFalseWhileRunning_TrueAfterExit()
{
- string sleep = GetAndroidProgramPath("sleep");
- using (var process = Process.Start(sleep, "600"))
+ using (Process process = Process.Start("sleep", "600"))
{
Assert.NotNull(process);
Assert.False(process.HasExited);
From bba6e3dca9026a14a567b1af47e2967cb543b8a1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 25 Mar 2026 22:02:45 +0000
Subject: [PATCH 5/8] Fix Android ls tests: use Path.GetTempPath() instead of /
(SELinux blocks rootfs access)
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/e2973f56-fdfc-478d-ba86-a76140ebe677
---
.../tests/ProcessTests.Android.cs | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
index d946df4b2104f9..5f50741d2f1c77 100644
--- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
@@ -1,6 +1,7 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System.IO;
using Xunit;
namespace System.Diagnostics.Tests
@@ -13,7 +14,7 @@ public partial class ProcessTests : ProcessTestBase
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_SimpleCommand_ExitsSuccessfully()
{
- using (Process process = Process.Start("ls", "/"))
+ using (Process process = Process.Start("ls", Path.GetTempPath()))
{
Assert.NotNull(process);
Assert.True(process.WaitForExit(WaitInMS));
@@ -27,7 +28,7 @@ public void Process_Start_SimpleCommand_ExitsSuccessfully()
public void Process_Start_WithArgumentList_ExitsSuccessfully()
{
ProcessStartInfo psi = new("ls");
- psi.ArgumentList.Add("/");
+ psi.ArgumentList.Add(Path.GetTempPath());
using (Process process = Process.Start(psi))
{
Assert.NotNull(process);
@@ -41,7 +42,7 @@ public void Process_Start_WithArgumentList_ExitsSuccessfully()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_CaptureStdout_ReadsOutput()
{
- ProcessStartInfo psi = new("ls", "/")
+ ProcessStartInfo psi = new("ls", Path.GetTempPath())
{
RedirectStandardOutput = true
};
From cc078a102a9a83b49dc978e6658b5c0d44e1aadc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 26 Mar 2026 10:30:42 +0000
Subject: [PATCH 6/8] Address review feedback: remove redundant tests, assert
stderr not empty, add StandardHandles test
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/a618196a-9db7-4afe-a608-b0d0d2610f66
---
.../tests/ProcessTests.Android.cs | 82 ++++++++++---------
1 file changed, 42 insertions(+), 40 deletions(-)
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
index 5f50741d2f1c77..fc2ad09ee67fb3 100644
--- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
@@ -2,6 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System.IO;
+using Microsoft.Win32.SafeHandles;
using Xunit;
namespace System.Diagnostics.Tests
@@ -23,21 +24,6 @@ public void Process_Start_SimpleCommand_ExitsSuccessfully()
}
}
- [Fact]
- [PlatformSpecific(TestPlatforms.Android)]
- public void Process_Start_WithArgumentList_ExitsSuccessfully()
- {
- ProcessStartInfo psi = new("ls");
- psi.ArgumentList.Add(Path.GetTempPath());
- using (Process process = Process.Start(psi))
- {
- Assert.NotNull(process);
- Assert.True(process.WaitForExit(WaitInMS));
- Assert.Equal(0, process.ExitCode);
- Assert.True(process.HasExited);
- }
- }
-
[Fact]
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_CaptureStdout_ReadsOutput()
@@ -82,22 +68,24 @@ public void Process_Start_ExitCode_ReflectsCommandFailure()
using (Process process = Process.Start(psi))
{
Assert.NotNull(process);
- process.StandardError.ReadToEnd();
+ string error = process.StandardError.ReadToEnd();
Assert.True(process.WaitForExit(WaitInMS));
Assert.NotEqual(0, process.ExitCode);
+ Assert.False(string.IsNullOrEmpty(error));
}
}
[Fact]
[PlatformSpecific(TestPlatforms.Android)]
- public void Process_Id_IsValidForStartedProcess()
+ public void Process_ProcessName_IsSetForStartedProcess()
{
using (Process process = Process.Start("sleep", "600"))
{
Assert.NotNull(process);
try
{
- Assert.True(process.Id > 0);
+ Assert.NotNull(process.ProcessName);
+ Assert.NotEmpty(process.ProcessName);
}
finally
{
@@ -109,35 +97,49 @@ public void Process_Id_IsValidForStartedProcess()
[Fact]
[PlatformSpecific(TestPlatforms.Android)]
- public void Process_ProcessName_IsSetForStartedProcess()
+ public void Process_Start_WithStandardHandles_CanRedirectIO()
{
- using (Process process = Process.Start("sleep", "600"))
+ string? errorFile = null;
+ try
{
- Assert.NotNull(process);
- try
+ errorFile = Path.GetTempFileName();
+
+ SafeFileHandle.CreateAnonymousPipe(out SafeFileHandle outputRead, out SafeFileHandle outputWrite);
+
+ using SafeFileHandle inputHandle = File.OpenNullHandle();
+ using SafeFileHandle errorHandle = File.OpenHandle(errorFile, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
+
+ ProcessStartInfo psi = new("ls", Path.GetTempPath())
{
- Assert.NotNull(process.ProcessName);
- Assert.NotEmpty(process.ProcessName);
- }
- finally
+ StandardInputHandle = inputHandle,
+ StandardOutputHandle = outputWrite,
+ StandardErrorHandle = errorHandle
+ };
+
+ using (outputRead)
+ using (outputWrite)
{
- process.Kill();
- process.WaitForExit();
+ using (Process process = Process.Start(psi))
+ {
+ Assert.NotNull(process);
+ outputWrite.Close(); // close the parent copy so ReadToEnd unblocks
+
+ using FileStream outputStream = new(outputRead, FileAccess.Read);
+ using StreamReader outputReader = new(outputStream);
+ string output = outputReader.ReadToEnd();
+
+ Assert.True(process.WaitForExit(WaitInMS));
+ Assert.Equal(0, process.ExitCode);
+ Assert.False(string.IsNullOrEmpty(output));
+ }
}
}
- }
-
- [Fact]
- [PlatformSpecific(TestPlatforms.Android)]
- public void Process_HasExited_IsFalseWhileRunning_TrueAfterExit()
- {
- using (Process process = Process.Start("sleep", "600"))
+ finally
{
- Assert.NotNull(process);
- Assert.False(process.HasExited);
- process.Kill();
- Assert.True(process.WaitForExit(WaitInMS));
- Assert.True(process.HasExited);
+ if (errorFile is not null && File.Exists(errorFile))
+ {
+ File.Delete(errorFile);
+ }
}
}
}
From bb5bca59916885c1f6e3752f47c718ea3cb098db Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 26 Mar 2026 12:54:36 +0000
Subject: [PATCH 7/8] Address nits: rename tests, move errorFile before try
block
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/571a3ca3-d117-435b-8068-92791579ae7f
---
.../tests/ProcessTests.Android.cs | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
index fc2ad09ee67fb3..c5e872f572b748 100644
--- a/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTests.Android.cs
@@ -13,7 +13,7 @@ public partial class ProcessTests : ProcessTestBase
[Fact]
[PlatformSpecific(TestPlatforms.Android)]
- public void Process_Start_SimpleCommand_ExitsSuccessfully()
+ public void Process_Start_InheritedIO_ExitsSuccessfully()
{
using (Process process = Process.Start("ls", Path.GetTempPath()))
{
@@ -26,7 +26,7 @@ public void Process_Start_SimpleCommand_ExitsSuccessfully()
[Fact]
[PlatformSpecific(TestPlatforms.Android)]
- public void Process_Start_CaptureStdout_ReadsOutput()
+ public void Process_Start_RedirectedStandardOutput_ReadsOutput()
{
ProcessStartInfo psi = new("ls", Path.GetTempPath())
{
@@ -99,11 +99,9 @@ public void Process_ProcessName_IsSetForStartedProcess()
[PlatformSpecific(TestPlatforms.Android)]
public void Process_Start_WithStandardHandles_CanRedirectIO()
{
- string? errorFile = null;
+ string errorFile = Path.GetTempFileName();
try
{
- errorFile = Path.GetTempFileName();
-
SafeFileHandle.CreateAnonymousPipe(out SafeFileHandle outputRead, out SafeFileHandle outputWrite);
using SafeFileHandle inputHandle = File.OpenNullHandle();
@@ -136,7 +134,7 @@ public void Process_Start_WithStandardHandles_CanRedirectIO()
}
finally
{
- if (errorFile is not null && File.Exists(errorFile))
+ if (File.Exists(errorFile))
{
File.Delete(errorFile);
}
From a2efbde0c1dfaf4caeedee9fdc91d233342a291f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 26 Mar 2026 17:25:46 +0000
Subject: [PATCH 8/8] Skip ProcessHandlesTests on Android (sh not available)
Agent-Logs-Url: https://github.com/dotnet/runtime/sessions/1cc664b6-0eef-437b-8198-828ddf712f1e
Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
---
.../System.Diagnostics.Process/tests/ProcessHandlesTests.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessHandlesTests.cs b/src/libraries/System.Diagnostics.Process/tests/ProcessHandlesTests.cs
index 48203a2bd69d51..8eddca23966e69 100644
--- a/src/libraries/System.Diagnostics.Process/tests/ProcessHandlesTests.cs
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessHandlesTests.cs
@@ -8,6 +8,7 @@
namespace System.Diagnostics.Tests
{
+ [SkipOnPlatform(TestPlatforms.Android, "sh is not available on Android")]
public class ProcessHandlesTests : ProcessTestBase
{
[Theory]