From e84aa07bcc3dd73947396adf2be4d1af4b14996f Mon Sep 17 00:00:00 2001 From: Xubin Ren <52506698+Re-bin@users.noreply.github.com> Date: Mon, 17 Aug 2026 01:13:04 +0800 Subject: [PATCH] test(cli): isolate WebUI interrupt polling --- nanobot/cli/webui_support.py | 3 ++- tests/cli/test_commands.py | 6 ++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/nanobot/cli/webui_support.py b/nanobot/cli/webui_support.py index 331791bb7..9edf8b9b2 100644 --- a/nanobot/cli/webui_support.py +++ b/nanobot/cli/webui_support.py @@ -443,6 +443,7 @@ def _attach_to_background_gateway( runtime: "GatewayRuntime", *, poll_hook: Callable[[], None] | None = None, + sleep: Callable[[float], None] = time.sleep, ) -> None: """Keep a WebUI launcher attached without taking ownership of the gateway.""" _print_webui_foreground_lifecycle(attached=True) @@ -450,7 +451,7 @@ def _attach_to_background_gateway( while runtime.status().running: if poll_hook is not None: poll_hook() - time.sleep(0.5) + sleep(0.5) except KeyboardInterrupt: console.print("\n[yellow]WebUI launcher detached.[/yellow]") return diff --git a/tests/cli/test_commands.py b/tests/cli/test_commands.py index ced9f62ed..b638b2440 100644 --- a/tests/cli/test_commands.py +++ b/tests/cli/test_commands.py @@ -2565,7 +2565,7 @@ def test_webui_foreground_attaches_to_existing_managed_gateway(monkeypatch, tmp_ assert seen["open_kwargs"] == {"wait": False} -def test_attach_to_background_gateway_detaches_on_ctrl_c(monkeypatch, capsys) -> None: +def test_attach_to_background_gateway_detaches_on_ctrl_c(capsys) -> None: stopped = False class _FakeRuntime: @@ -2580,9 +2580,7 @@ def test_attach_to_background_gateway_detaches_on_ctrl_c(monkeypatch, capsys) -> def _interrupt(_seconds: float) -> None: raise KeyboardInterrupt - monkeypatch.setattr("nanobot.cli.webui_support.time.sleep", _interrupt) - - cli_webui_support._attach_to_background_gateway(_FakeRuntime()) + cli_webui_support._attach_to_background_gateway(_FakeRuntime(), sleep=_interrupt) assert stopped is False output = capsys.readouterr().out