diff --git a/backlash/console.py b/backlash/console.py index 9e3bb6d..9cc7ca6 100644 --- a/backlash/console.py +++ b/backlash/console.py @@ -134,7 +134,9 @@ def _wrap_compiler(console): compile = console.compile def func(source, filename, symbol): code = compile(source, filename, symbol) - console.loader.register(code, source) + if code is not None: + # codeop returns None to signal that more input is needed + console.loader.register(code, source) return code console.compile = func diff --git a/tests/test_console.py b/tests/test_console.py index aa544fd..be330a7 100644 --- a/tests/test_console.py +++ b/tests/test_console.py @@ -69,3 +69,11 @@ def test_exceptions_are_rendered_as_a_traceback(monkeypatch): assert '
1/0' in transcript # the offending console line assert '
ZeroDivisionError: division by zero' in transcript + + +def test_multi_line_input_is_buffered_until_complete(monkeypatch): + monkeypatch.setattr(sys, 'stdout', sys.stdout) + console = Console() + assert console.eval('if True:') == '>>> if True:\n' + assert console.eval(' x = 6*7') == '... x = 6*7\n' + assert console.eval('x') == '>>> x\n42'