summaryrefslogtreecommitdiff
path: root/tests/test_utils.py
diff options
context:
space:
mode:
authorSteffen Neubauer <s.neubauer@syseleven.de>2017-11-12 20:24:12 +0000
committerSteffen Neubauer <s.neubauer@syseleven.de>2018-04-04 00:18:02 +0200
commit6ca05bec6b1c5ff7afa7f55ba8991385dc4c75a5 (patch)
tree4799aedaf9cb760239ac46a22c997dc373fa1730 /tests/test_utils.py
parent7eb990fab5783b32c7028b0aa8a752e6862d0997 (diff)
downloadclick-6ca05bec6b1c5ff7afa7f55ba8991385dc4c75a5.tar.gz
Implement streaming pager. Fixes #409
The streaming pager works using generators. You can pass a generator function or object into echo_via_pager: generator expression: ``` click.echo_via_pager(("{}\n".format(i) for i in range(999999))) ``` generator function / expression: ``` def gen(): counter = 0 while True: counter++ yield counter click.echo_via_pager(gen) click.echo_via_pager(gen()) # you can pass both ```
Diffstat (limited to 'tests/test_utils.py')
-rw-r--r--tests/test_utils.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 88923ad..fd003f6 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -146,14 +146,36 @@ def test_prompts_abort(monkeypatch, capsys):
assert out == 'Password: \nScrew you.\n'
+def _test_gen_func():
+ yield 'a'
+ yield 'b'
+ yield 'c'
+ yield 'abc'
+
+
@pytest.mark.skipif(WIN, reason='Different behavior on windows.')
@pytest.mark.parametrize('cat', ['cat', 'cat ', 'cat '])
-def test_echo_via_pager(monkeypatch, capfd, cat):
+@pytest.mark.parametrize('test', [
+ # We need lambda here, because pytest will
+ # reuse the parameters, and then the generators
+ # are already used and will not yield anymore
+ ('just text\n', lambda: 'just text'),
+ ('iterable\n', lambda: ["itera", "ble"]),
+ ('abcabc\n', lambda: _test_gen_func),
+ ('abcabc\n', lambda: _test_gen_func()),
+ ('012345\n', lambda: (c for c in range(6))),
+])
+def test_echo_via_pager(monkeypatch, capfd, cat, test):
monkeypatch.setitem(os.environ, 'PAGER', cat)
monkeypatch.setattr(click._termui_impl, 'isatty', lambda x: True)
- click.echo_via_pager('haha')
+
+ expected_output = test[0]
+ test_input = test[1]()
+
+ click.echo_via_pager(test_input)
+
out, err = capfd.readouterr()
- assert out == 'haha\n'
+ assert out == expected_output
@pytest.mark.skipif(WIN, reason='Test does not make sense on Windows.')