| Index: tests/test_diff_script.py | 
| =================================================================== | 
| --- a/tests/test_diff_script.py | 
| +++ b/tests/test_diff_script.py | 
| @@ -20,25 +20,46 @@ | 
| import pytest | 
| import subprocess | 
| import io | 
| +import os | 
| +import re | 
| from test_differ import BASE, LATEST | 
| @pytest.fixture | 
| def rootdir(tmpdir): | 
| - """Directory with example filter lists.""" | 
| + """Root directory holds the latest filter list, and folders for archived | 
| 
 
Vasily Kuznetsov
2018/10/31 14:42:39
Multiline docstrings should "consist of a summary
 
rhowell
2018/10/31 19:11:46
Oops, thanks! I knew the multiline docstring looke
 
 | 
| + lists and diffs.""" | 
| rootdir = tmpdir.join('root') | 
| rootdir.mkdir() | 
| - rootdir.join('base.txt').write_text(BASE, encoding='utf8') | 
| rootdir.join('latest.txt').write_text(LATEST, encoding='utf8') | 
| - | 
| return rootdir | 
| @pytest.fixture | 
| -def dstfile(tmpdir): | 
| - """Destination file for saving the diff output.""" | 
| - return tmpdir.join('dst') | 
| +def archive_dir(rootdir): | 
| + return rootdir.mkdir('archive') | 
| + | 
| + | 
| +@pytest.fixture | 
| +def diff_dir(rootdir): | 
| + return rootdir.mkdir('diff') | 
| + | 
| + | 
| +@pytest.fixture | 
| +def archived_files(archive_dir): | 
| + base2 = BASE + '&adnet=\n' | 
| + base2 = re.sub(r'! Version: \d+', '! Version: 112', base2) | 
| + archive_dir.join('list111.txt').write_text(BASE, encoding='utf8') | 
| + archive_dir.join('list112.txt').write_text(base2, encoding='utf8') | 
| + return [str(x) for x in archive_dir.listdir()] | 
| + | 
| + | 
| +@pytest.fixture | 
| +def base_no_version(archive_dir): | 
| + base = re.sub(r'! Version: \d+', '! ', BASE) | 
| + archive_dir.join('list113.txt').write_text(base, encoding='utf8') | 
| + return [str(x) for x in archive_dir.listdir()] | 
| def run_script(*args, **kw): | 
| @@ -52,34 +73,69 @@ | 
| return proc.returncode, stderr.decode('utf-8'), stdout.decode('utf-8') | 
| -def test_diff_with_outfile(rootdir, dstfile): | 
| - run_script(str(rootdir.join('base.txt')), | 
| - str(rootdir.join('latest.txt')), | 
| - str(dstfile)) | 
| - with io.open(str(dstfile), encoding='utf-8') as dst: | 
| - result = dst.read() | 
| - assert '+ &ad_channel=\xa3' in result | 
| +def test_diff_with_outfile(rootdir, archived_files, diff_dir): | 
| + run_script(str(rootdir.join('latest.txt')), '-o', str(diff_dir), | 
| + *archived_files) | 
| + assert len(os.listdir(str(diff_dir))) == 2 | 
| 
 
Vasily Kuznetsov
2018/10/31 14:42:39
It's a good idea to check how many files were crea
 
rhowell
2018/10/31 19:11:45
Yeah, it seems more consistent to use the function
 
 | 
| + for file in diff_dir.visit(): | 
| + with io.open(str(file), encoding='utf-8') as dst: | 
| + result = dst.read() | 
| + assert '- &ad.vid=$~xmlhttprequest' in result | 
| + assert '+ &ad_channel=\xa3' in result | 
| + assert '! Version: 123' in result | 
| -def test_no_outfile(rootdir): | 
| - _, _, out = run_script(str(rootdir.join('base.txt')), | 
| - str(rootdir.join('latest.txt'))) | 
| - assert '[Adblock Plus Diff]' in out | 
| +def test_diff_no_outfile(rootdir, archived_files): | 
| + os.chdir(str(rootdir)) | 
| + run_script(str(rootdir.join('latest.txt')), *archived_files) | 
| + for file in ['diff111.txt', 'diff112.txt']: | 
| + with io.open(file, encoding='utf-8') as dst: | 
| + result = dst.read() | 
| + assert '- &ad.vid=$~xmlhttprequest' in result | 
| + assert '+ &ad_channel=\xa3' in result | 
| + assert '! Version: 123' in result | 
| def test_no_base_file(rootdir): | 
| - code, err, _ = run_script('wrong.txt', str(rootdir.join('latest.txt'))) | 
| - assert code == 1 | 
| - assert 'No such file or directory' in err | 
| + code, err, _ = run_script(str(rootdir.join('latest.txt'))) | 
| + assert code == 2 | 
| + assert 'usage: fldiff' in err | 
| -def test_no_latest_file(rootdir): | 
| +def test_wrong_file(rootdir): | 
| code, err, _ = run_script(str(rootdir.join('base.txt')), 'wrong.txt') | 
| assert code == 1 | 
| assert 'No such file or directory' in err | 
| -def test_diff_to_self(rootdir): | 
| - _, _, out = run_script(str(rootdir.join('latest.txt')), | 
| - str(rootdir.join('latest.txt'))) | 
| - assert out == '[Adblock Plus Diff]\n' | 
| +def test_diff_to_self(rootdir, diff_dir): | 
| + run_script(str(rootdir.join('latest.txt')), '-o', str(diff_dir), | 
| + str(rootdir.join('latest.txt'))) | 
| + assert len(os.listdir(str(diff_dir))) == 1 | 
| + for file in diff_dir.visit(): | 
| + with io.open(str(file), encoding='utf-8') as dst: | 
| + result = dst.read() | 
| + assert result == '[Adblock Plus Diff]\n' | 
| + | 
| + | 
| +def test_no_version(rootdir, base_no_version): | 
| + code, err, _ = run_script(str(rootdir.join('latest.txt')), '-o', | 
| + str(diff_dir), *base_no_version) | 
| + assert code == 1 | 
| + assert 'Unable to find Version in ' in err | 
| + | 
| + | 
| +def test_write_and_overwrite(rootdir, archived_files, diff_dir): | 
| + test_diff_with_outfile(rootdir, archived_files, diff_dir) | 
| + latest = re.sub(r'&act=ads_', '! ', BASE) | 
| + latest = latest + '&adurl=\n' | 
| + rootdir.join('latest.txt').write_text(latest, encoding='utf8') | 
| + run_script(str(rootdir.join('latest.txt')), '-o', str(diff_dir), | 
| + *archived_files) | 
| + assert len(os.listdir(str(diff_dir))) == 2 | 
| + for file in diff_dir.visit(): | 
| + with io.open(str(file), encoding='utf-8') as dst: | 
| + result = dst.read() | 
| + assert '- &act=ads_' in result | 
| + assert '+ &adurl=' in result | 
| + assert '- &ad.vid=$~xmlhttprequest' not in result |