diff options
| author | Steffen Neubauer <s.neubauer@syseleven.de> | 2017-11-12 20:24:12 +0000 |
|---|---|---|
| committer | Steffen Neubauer <s.neubauer@syseleven.de> | 2018-04-04 00:18:02 +0200 |
| commit | 6ca05bec6b1c5ff7afa7f55ba8991385dc4c75a5 (patch) | |
| tree | 4799aedaf9cb760239ac46a22c997dc373fa1730 /tests/test_utils.py | |
| parent | 7eb990fab5783b32c7028b0aa8a752e6862d0997 (diff) | |
| download | click-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.py | 28 |
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.') |
