| Index: tests/test_render_script.py | 
| diff --git a/tests/test_render_script.py b/tests/test_render_script.py | 
| index f78ff543e74fe83e5595c33ff2917042c99b4247..0c36999c2115977556849f76a54770a1e575145b 100644 | 
| --- a/tests/test_render_script.py | 
| +++ b/tests/test_render_script.py | 
| @@ -93,9 +93,14 @@ def dstfile(tmpdir): | 
| def run_script(*args, **kw): | 
| """Run rendering script with given arguments and return its output.""" | 
| cmd = ['flrender'] + list(args) | 
| - proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, **kw) | 
| - stdout, stderr = proc.communicate() | 
| - return proc.returncode, stderr.decode('utf-8') | 
| + test_in = None | 
| + if 'test_in'in kw.keys(): | 
| 
 
Vasily Kuznetsov
2018/07/09 17:00:57
Space missing here (weird that flake8 is ok...)
 
Tudor Avram
2018/07/10 16:09:47
Done.
 
 | 
| + test_in = kw.pop('test_in').encode('utf-8') | 
| + proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, | 
| + stdout=subprocess.PIPE, stdin=subprocess.PIPE, | 
| + **kw) | 
| + stdout, stderr = proc.communicate(input=test_in) | 
| + return proc.returncode, stderr.decode('utf-8'), stdout.decode('utf-8') | 
| def test_render_no_includes(rootdir, dstfile): | 
| @@ -106,7 +111,7 @@ def test_render_no_includes(rootdir, dstfile): | 
| def test_render_unicode(rootdir, dstfile): | 
| - code, err = run_script(str(rootdir.join('unicode.txt')), str(dstfile)) | 
| + code, err, _ = run_script(str(rootdir.join('unicode.txt')), str(dstfile)) | 
| assert '\u1234' in dstfile.read(mode='rb').decode('utf-8') | 
| @@ -122,33 +127,54 @@ def test_render_with_includes_relative(rootdir, dstfile): | 
| def test_render_verbose(rootdir, dstfile): | 
| - code, err = run_script('includer.txt', str(dstfile), | 
| - '-i', 'inc=inc', '-v', cwd=str(rootdir)) | 
| + code, err, _ = run_script('includer.txt', str(dstfile), | 
| + '-i', 'inc=inc', '-v', cwd=str(rootdir)) | 
| assert err == 'Rendering: includer.txt\n- including: inc:includee.txt\n' | 
| +def test_stdin_stdout(rootdir): | 
| 
 
Vasily Kuznetsov
2018/07/09 17:00:57
Wouldn't it be simpler to model this and the follo
 
Tudor Avram
2018/07/10 08:06:20
Ok, will do that. From what I see, the case for in
 
 | 
| + test_input = '[Adblock]\ntest\nwww.test.test\ntest.test.test\n' | 
| + expected_body = 'test\nwww.test.test\ntest.test.test\n' | 
| + expected_header = '[Adblock]' | 
| + | 
| + _, _, stdout = run_script('-i', 'inc=inc', '-v', | 
| + cwd=str(rootdir), test_in=test_input) | 
| + lines = stdout.split('\n') | 
| + assert expected_header == lines[0] | 
| + assert expected_body in stdout | 
| + | 
| + | 
| +def test_filein_stdout(rootdir): | 
| + expected = 'I am included!' | 
| + _, _, stdout = run_script('includer.txt', '-i', 'inc=inc', | 
| + cwd=str(rootdir)) | 
| + | 
| + assert expected in stdout | 
| + | 
| + | 
| def test_no_header(rootdir, dstfile): | 
| - code, err = run_script('inc/includee.txt', str(dstfile), cwd=str(rootdir)) | 
| + code, err, _ = run_script('inc/includee.txt', str(dstfile), | 
| + cwd=str(rootdir)) | 
| assert code == 1 | 
| assert err == 'No header found at the beginning of the input.\n' | 
| def test_wrong_file(dstfile): | 
| - code, err = run_script('wrong.txt', str(dstfile)) | 
| + code, err, _ = run_script('wrong.txt', str(dstfile)) | 
| assert code == 1 | 
| assert err == "File not found: 'wrong.txt'\n" | 
| def test_wrong_include_source(rootdir, dstfile): | 
| - code, err = run_script('brk.txt', str(dstfile), cwd=str(rootdir)) | 
| + code, err, _ = run_script('brk.txt', str(dstfile), cwd=str(rootdir)) | 
| assert code == 1 | 
| assert err == ("Unknown source: 'inc' when including 'inc:broken.txt' " | 
| "from 'brk.txt'\n") | 
| def test_wrong_include(rootdir, dstfile): | 
| - code, err = run_script('brk.txt', str(dstfile), | 
| - '-i', 'inc=inc', cwd=str(rootdir)) | 
| + code, err, _ = run_script('brk.txt', str(dstfile), | 
| + '-i', 'inc=inc', cwd=str(rootdir)) | 
| missing_path = str(rootdir.join('inc', 'missing.txt')) | 
| expect = ("File not found: '{}' when including 'missing.txt' " | 
| "from 'inc:broken.txt' from 'brk.txt'\n").format(missing_path) | 
| @@ -157,8 +183,8 @@ def test_wrong_include(rootdir, dstfile): | 
| def test_circular_includes(rootdir, dstfile): | 
| - code, err = run_script('circ.txt', str(dstfile), | 
| - '-i', 'inc=inc', cwd=str(rootdir)) | 
| + code, err, _ = run_script('circ.txt', str(dstfile), | 
| + '-i', 'inc=inc', cwd=str(rootdir)) | 
| expect = ("Include loop encountered when including 'circular.txt' " | 
| "from 'circular.txt' from 'inc:circular.txt' from 'circ.txt'\n") | 
| assert code == 1 | 
| @@ -166,7 +192,7 @@ def test_circular_includes(rootdir, dstfile): | 
| def test_wrong_source(rootdir, dstfile): | 
| - code, err = run_script('foo:bar.txt', str(dstfile)) | 
| + code, err, _ = run_script('foo:bar.txt', str(dstfile)) | 
| assert code == 1 | 
| assert err == "Unknown source: 'foo'\n" | 
| @@ -177,7 +203,7 @@ def test_web_include(rootdir, dstfile, webserver_port): | 
| url = 'http://localhost:{}/metainc.txt'.format(webserver_port) | 
| webinc = rootdir.join('webinc.txt') | 
| webinc.write('[Adblock]\n%include {}%'.format(url)) | 
| - code, err = run_script(str(webinc), str(dstfile)) | 
| + code, err, _ = run_script(str(webinc), str(dstfile)) | 
| assert 'Web \u1234' in dstfile.read(mode='rb').decode('utf-8') | 
| @@ -186,7 +212,7 @@ def test_failed_web_include(rootdir, dstfile, webserver_port): | 
| url = 'http://localhost:{}/missing.txt'.format(webserver_port) | 
| webinc = rootdir.join('webinc.txt') | 
| webinc.write('[Adblock]\n%include {}%'.format(url)) | 
| - code, err = run_script(str(webinc), str(dstfile)) | 
| + code, err, _ = run_script(str(webinc), str(dstfile)) | 
| assert code == 1 | 
| assert err.startswith( | 
| "HTTP 404 Not found: '{0}' when including '{0}'".format(url)) |