Fix intermittent macOS unit test failures by forcing FakeDriver when ConsoleDriver.RunningUnitTests is true (#4291)

* Initial plan

* Add safeguard to force FakeDriver when ConsoleDriver.RunningUnitTests is true

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add test to verify FakeDriver is used when RunningUnitTests is true

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Add debug logging to make unit test safeguard visible in CI logs

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Modify unit-tests.yml to run tests 10 times on macOS to verify fix stability

Co-authored-by: tig <585482+tig@users.noreply.github.com>

* Revert "Modify unit-tests.yml to run tests 10 times on macOS to verify fix stability"

Co-authored-by: tig <585482+tig@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tig <585482+tig@users.noreply.github.com>
This commit is contained in:
Copilot
2025-10-19 11:50:28 -06:00
committed by GitHub
parent 8aec05248d
commit 86b7996598
2 changed files with 43 additions and 0 deletions

View File

@@ -103,6 +103,23 @@ public class ApplicationImpl : IApplication
private void CreateDriver (string? driverName)
{
// When running unit tests, always use FakeDriver unless explicitly specified
if (ConsoleDriver.RunningUnitTests &&
string.IsNullOrEmpty (driverName) &&
_componentFactory is null)
{
Logging.Logger.LogDebug ("Unit test safeguard: forcing FakeDriver (RunningUnitTests=true, driverName=null, componentFactory=null)");
_coordinator = CreateSubcomponents (() => new FakeComponentFactory ());
_coordinator.StartAsync ().Wait ();
if (Application.Driver == null)
{
throw new ("Application.Driver was null even after booting MainLoopCoordinator");
}
return;
}
PlatformID p = Environment.OSVersion.Platform;
// Check component factory type first - this takes precedence over driverName

View File

@@ -230,4 +230,30 @@ public class ConsoleDriverTests
//
// [Fact]
// public void FakeDriver_IsValidInput_Correct_Surrogate_Sequence ()
/// <summary>
/// Tests that when ConsoleDriver.RunningUnitTests is true, Application.Init() without
/// parameters uses FakeDriver instead of platform-specific drivers.
/// This prevents intermittent failures on macOS where kernel32.dll might be referenced.
/// </summary>
[Fact]
public void Application_Init_Without_Params_Uses_FakeDriver_When_RunningUnitTests ()
{
// Arrange
ConsoleDriver.RunningUnitTests = true;
Application.ResetState (true);
// Act
Application.Init ();
// Assert
Assert.NotNull (Application.Driver);
// In the modern v2 architecture, the driver will be a ConsoleDriverFacade wrapping FakeDriver
// The key is that it's not attempting to use Windows/Unix platform-specific drivers
Assert.True (Application.Initialized);
// Cleanup
Application.Shutdown ();
Application.ResetState (true);
}
}