From a7dd8bb02fca27c4a45205718bc33656d1a6ac37 Mon Sep 17 00:00:00 2001 From: Branch Vincent Date: Wed, 24 Aug 2022 20:47:38 -0400 Subject: [PATCH] fix: don't clear `interactive` state on namespace commands --- cleo/application.py | 2 ++ tests/fixtures/foo3_command.py | 2 +- tests/fixtures/foo_sub_namespaced3_command.py | 2 +- tests/test_application.py | 12 ++++++++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cleo/application.py b/cleo/application.py index 50901764..44a79709 100644 --- a/cleo/application.py +++ b/cleo/application.py @@ -417,8 +417,10 @@ def _run(self, io: IO) -> int: del argv[index + 1 : index + 1 + (len(name.split(" ")) - 1)] stream = io.input.stream + interactive = io.input.is_interactive() io.set_input(ArgvInput(argv)) io.input.set_stream(stream) + io.input.interactive(interactive) exit_code = self._run_command(command, io) self._running_command = None diff --git a/tests/fixtures/foo3_command.py b/tests/fixtures/foo3_command.py index cfd20292..4c85283c 100644 --- a/tests/fixtures/foo3_command.py +++ b/tests/fixtures/foo3_command.py @@ -12,6 +12,6 @@ class Foo3Command(Command): aliases = ["foo3"] def handle(self) -> int: - question = self.ask("echo:") + question = self.ask("echo:", default="default input") self.line(question) return 0 diff --git a/tests/fixtures/foo_sub_namespaced3_command.py b/tests/fixtures/foo_sub_namespaced3_command.py index 741c48b7..50680697 100644 --- a/tests/fixtures/foo_sub_namespaced3_command.py +++ b/tests/fixtures/foo_sub_namespaced3_command.py @@ -12,6 +12,6 @@ class FooSubNamespaced3Command(Command): aliases = ["foobar"] def handle(self) -> int: - question = self.ask("") + question = self.ask("", default="default input") self.line(question) return 0 diff --git a/tests/test_application.py b/tests/test_application.py index 8b0d8d7b..0ad5671f 100644 --- a/tests/test_application.py +++ b/tests/test_application.py @@ -376,3 +376,15 @@ def test_run_namespaced_with_input() -> None: assert status_code == 0 assert tester.io.fetch_output() == "Hello world!\n" + + +@pytest.mark.parametrize("cmd", (Foo3Command(), FooSubNamespaced3Command())) +def test_run_with_input_and_non_interactive(cmd: Command) -> None: + app = Application() + app.add(cmd) + + tester = ApplicationTester(app) + status_code = tester.execute(f"--no-interaction {cmd.name}", inputs="Hello world!") + + assert status_code == 0 + assert tester.io.fetch_output() == "default input\n"