Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: tests/test_render_script.py

Issue 29824555: Issue #4116: Make infile and outfile parameters of flrender script from python-abp optional (Closed)
Left Patch Set: Created July 6, 2018, 11:39 a.m.
Right Patch Set: Removed unnecessary locals() call Created July 17, 2018, 9:39 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « abp/filters/sources.py ('k') | no next file » | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 # This file is part of Adblock Plus <https://adblockplus.org/>, 1 # This file is part of Adblock Plus <https://adblockplus.org/>,
2 # Copyright (C) 2006-present eyeo GmbH 2 # Copyright (C) 2006-present eyeo GmbH
3 # 3 #
4 # Adblock Plus is free software: you can redistribute it and/or modify 4 # Adblock Plus is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License version 3 as 5 # it under the terms of the GNU General Public License version 3 as
6 # published by the Free Software Foundation. 6 # published by the Free Software Foundation.
7 # 7 #
8 # Adblock Plus is distributed in the hope that it will be useful, 8 # Adblock Plus is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 @pytest.fixture 87 @pytest.fixture
88 def dstfile(tmpdir): 88 def dstfile(tmpdir):
89 """Destination file for saving rendered list.""" 89 """Destination file for saving rendered list."""
90 return tmpdir.join('dst') 90 return tmpdir.join('dst')
91 91
92 92
93 def run_script(*args, **kw): 93 def run_script(*args, **kw):
94 """Run rendering script with given arguments and return its output.""" 94 """Run rendering script with given arguments and return its output."""
95 cmd = ['flrender'] + list(args) 95 cmd = ['flrender'] + list(args)
96 test_in = None 96
97 if 'test_in'in kw.keys(): 97 test_in = kw.pop('test_in', None)
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.
98 test_in = kw.pop('test_in').encode('utf-8') 98 if test_in is not None:
99 test_in = test_in.encode('utf-8')
100
99 proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, 101 proc = subprocess.Popen(cmd, stderr=subprocess.PIPE,
100 stdout=subprocess.PIPE, stdin=subprocess.PIPE, 102 stdout=subprocess.PIPE, stdin=subprocess.PIPE,
101 **kw) 103 **kw)
102 stdout, stderr = proc.communicate(input=test_in) 104 stdout, stderr = proc.communicate(input=test_in)
103 return proc.returncode, stderr.decode('utf-8'), stdout.decode('utf-8') 105 return proc.returncode, stderr.decode('utf-8'), stdout.decode('utf-8')
104 106
105 107
106 def test_render_no_includes(rootdir, dstfile): 108 @pytest.mark.parametrize('test_input, args', [
107 run_script(str(rootdir.join('simple.txt')), str(dstfile)) 109 ('None', ["'simple.txt'", 'str(dstfile)']),
108 result = dstfile.read() 110 ('None', ["'simple.txt'"]),
109 assert 'Ok' in result 111 ("rootdir.join('simple.txt').read()", []),
110 assert '! Checksum:' in result 112 ])
113 def test_render_no_includes(test_input, args, rootdir, dstfile):
114 test_input = eval(test_input)
115 args = list(map(eval, args))
116 _, _, stdout = run_script(*args, cwd=str(rootdir), test_in=test_input)
117
118 if len(args) > 1:
119 output = dstfile.read()
120 else:
121 output = stdout
122
123 assert 'Ok' in output
124 assert '! Checksum:' in output
111 125
112 126
113 def test_render_unicode(rootdir, dstfile): 127 def test_render_unicode(rootdir, dstfile):
114 code, err, _ = run_script(str(rootdir.join('unicode.txt')), str(dstfile)) 128 code, err, _ = run_script(str(rootdir.join('unicode.txt')), str(dstfile))
115 assert '\u1234' in dstfile.read(mode='rb').decode('utf-8') 129 assert '\u1234' in dstfile.read(mode='rb').decode('utf-8')
116 130
117 131
118 def test_render_with_includes(rootdir, dstfile): 132 def test_render_with_includes(rootdir, dstfile):
119 run_script(str(rootdir.join('includer.txt')), str(dstfile), 133 run_script(str(rootdir.join('includer.txt')), str(dstfile),
120 '-i', 'inc=' + str(rootdir.join('inc'))) 134 '-i', 'inc=' + str(rootdir.join('inc')))
121 assert 'I am included!' in dstfile.read() 135 assert 'I am included!' in dstfile.read()
122 136
123 137
124 def test_render_with_includes_relative(rootdir, dstfile): 138 def test_render_with_includes_relative(rootdir, dstfile):
125 run_script('includer.txt', str(dstfile), '-i', 'inc=inc', cwd=str(rootdir)) 139 run_script('includer.txt', str(dstfile), '-i', 'inc=inc', cwd=str(rootdir))
126 assert 'I am included!' in dstfile.read() 140 assert 'I am included!' in dstfile.read()
127 141
128 142
129 def test_render_verbose(rootdir, dstfile): 143 def test_render_verbose(rootdir, dstfile):
130 code, err, _ = run_script('includer.txt', str(dstfile), 144 code, err, _ = run_script('includer.txt', str(dstfile),
131 '-i', 'inc=inc', '-v', cwd=str(rootdir)) 145 '-i', 'inc=inc', '-v', cwd=str(rootdir))
132 assert err == 'Rendering: includer.txt\n- including: inc:includee.txt\n' 146 assert err == 'Rendering: includer.txt\n- including: inc:includee.txt\n'
133
134
135 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
136 test_input = '[Adblock]\ntest\nwww.test.test\ntest.test.test\n'
137 expected_body = 'test\nwww.test.test\ntest.test.test\n'
138 expected_header = '[Adblock]'
139
140 _, _, stdout = run_script('-i', 'inc=inc', '-v',
141 cwd=str(rootdir), test_in=test_input)
142 lines = stdout.split('\n')
143 assert expected_header == lines[0]
144 assert expected_body in stdout
145
146
147 def test_filein_stdout(rootdir):
148 expected = 'I am included!'
149 _, _, stdout = run_script('includer.txt', '-i', 'inc=inc',
150 cwd=str(rootdir))
151
152 assert expected in stdout
153 147
154 148
155 def test_no_header(rootdir, dstfile): 149 def test_no_header(rootdir, dstfile):
156 code, err, _ = run_script('inc/includee.txt', str(dstfile), 150 code, err, _ = run_script('inc/includee.txt', str(dstfile),
157 cwd=str(rootdir)) 151 cwd=str(rootdir))
158 assert code == 1 152 assert code == 1
159 assert err == 'No header found at the beginning of the input.\n' 153 assert err == 'No header found at the beginning of the input.\n'
160 154
161 155
162 def test_wrong_file(dstfile): 156 def test_wrong_file(dstfile):
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 203
210 @pytest.mark.slowtest 204 @pytest.mark.slowtest
211 def test_failed_web_include(rootdir, dstfile, webserver_port): 205 def test_failed_web_include(rootdir, dstfile, webserver_port):
212 url = 'http://localhost:{}/missing.txt'.format(webserver_port) 206 url = 'http://localhost:{}/missing.txt'.format(webserver_port)
213 webinc = rootdir.join('webinc.txt') 207 webinc = rootdir.join('webinc.txt')
214 webinc.write('[Adblock]\n%include {}%'.format(url)) 208 webinc.write('[Adblock]\n%include {}%'.format(url))
215 code, err, _ = run_script(str(webinc), str(dstfile)) 209 code, err, _ = run_script(str(webinc), str(dstfile))
216 assert code == 1 210 assert code == 1
217 assert err.startswith( 211 assert err.startswith(
218 "HTTP 404 Not found: '{0}' when including '{0}'".format(url)) 212 "HTTP 404 Not found: '{0}' when including '{0}'".format(url))
LEFTRIGHT

Powered by Google App Engine
This is Rietveld