Skip to content

Commit 2b68e28

Browse files
committed
add new external diff __main__ module unit tests
1 parent 1f3682d commit 2b68e28

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

tests/test_main_unix_only.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
import sys
5+
6+
import pytest
7+
8+
from fdiff.__main__ import run
9+
10+
ROBOTO_BEFORE_PATH = os.path.join("tests", "testfiles", "Roboto-Regular.subset1.ttf")
11+
ROBOTO_AFTER_PATH = os.path.join("tests", "testfiles", "Roboto-Regular.subset2.ttf")
12+
ROBOTO_EXTDIFF_EXPECTED_PATH = os.path.join("tests", "testfiles", "roboto_extdiff_expected.txt")
13+
ROBOTO_EXTDIFF_COLOR_EXPECTED_PATH = os.path.join("tests", "testfiles", "roboto_extdiff_color_expected.txt")
14+
15+
ROBOTO_BEFORE_URL = "https://github.com/source-foundry/fdiff/raw/master/tests/testfiles/Roboto-Regular.subset1.ttf"
16+
ROBOTO_AFTER_URL = "https://github.com/source-foundry/fdiff/raw/master/tests/testfiles/Roboto-Regular.subset2.ttf"
17+
18+
19+
# Setup: define the expected diff text for unified diff
20+
with open(ROBOTO_EXTDIFF_EXPECTED_PATH, "r") as robo_extdiff:
21+
ROBOTO_EXTDIFF_EXPECTED = robo_extdiff.read()
22+
23+
# Setup: define the expected diff text for unified color diff
24+
with open(ROBOTO_EXTDIFF_COLOR_EXPECTED_PATH, "r") as robo_extdiff_color:
25+
ROBOTO_EXTDIFF_COLOR_EXPECTED = robo_extdiff_color.read()
26+
27+
28+
# # these tests rely on a PATH install of `diff` executable on Unix
29+
# # they are not executed on Windows platforms
30+
if sys.platform.startswith("win"):
31+
pytest.skip("skipping windows-only tests", allow_module_level=True)
32+
33+
34+
def test_main_external_diff_default(capsys):
35+
args = ["--external", "diff -u", ROBOTO_BEFORE_PATH, ROBOTO_AFTER_PATH]
36+
expected_string_list = ROBOTO_EXTDIFF_EXPECTED.split("\n")
37+
38+
with pytest.raises(SystemExit):
39+
run(args)
40+
41+
captured = capsys.readouterr()
42+
res_string_list = captured.out.split("\n")
43+
for x, line in enumerate(res_string_list):
44+
# treat top two lines of the diff as comparison of first 3 chars only
45+
if x in (0, 1):
46+
assert line[0:2] == expected_string_list[x][0:2]
47+
elif x in range(2, 10):
48+
assert line == expected_string_list[x]
49+
else:
50+
# skip lines beyond first 10
51+
pass
52+
53+
54+
def test_main_external_diff_remote(capsys):
55+
args = ["--external", "diff -u", ROBOTO_BEFORE_URL, ROBOTO_AFTER_URL]
56+
expected_string_list = ROBOTO_EXTDIFF_EXPECTED.split("\n")
57+
58+
with pytest.raises(SystemExit):
59+
run(args)
60+
61+
captured = capsys.readouterr()
62+
res_string_list = captured.out.split("\n")
63+
for x, line in enumerate(res_string_list):
64+
# treat top two lines of the diff as comparison of first 3 chars only
65+
if x in (0, 1):
66+
assert line[0:2] == expected_string_list[x][0:2]
67+
elif x in range(2, 10):
68+
assert line == expected_string_list[x]
69+
else:
70+
# skip lines beyond first 10
71+
pass
72+
73+
74+
def test_main_external_diff_color(capsys):
75+
args = ["--external", "diff -u", "--color", ROBOTO_BEFORE_PATH, ROBOTO_AFTER_PATH]
76+
expected_string_list = ROBOTO_EXTDIFF_COLOR_EXPECTED.split("\n")
77+
78+
with pytest.raises(SystemExit):
79+
run(args)
80+
81+
captured = capsys.readouterr()
82+
res_string_list = captured.out.split("\n")
83+
for x, line in enumerate(res_string_list):
84+
# treat top two lines of the diff as comparison of first 3 chars only
85+
if x in (0, 1):
86+
assert line[0:2] == expected_string_list[x][0:2]
87+
elif x in range(2, 10):
88+
assert line == expected_string_list[x]
89+
else:
90+
# skip lines beyond first 10
91+
pass
92+
93+
94+
def test_main_external_diff_with_head_fails(capsys):
95+
args = ["--external", "diff -u", "--head", "1", ROBOTO_BEFORE_PATH, ROBOTO_AFTER_PATH]
96+
97+
with pytest.raises(SystemExit) as exit_info:
98+
run(args)
99+
100+
captured = capsys.readouterr()
101+
assert "[ERROR] The head and tail options are not supported" in captured.err
102+
assert exit_info.value.code == 1
103+
104+
105+
def test_main_external_diff_with_tail_fails(capsys):
106+
args = ["--external", "diff -u", "--tail", "1", ROBOTO_BEFORE_PATH, ROBOTO_AFTER_PATH]
107+
108+
with pytest.raises(SystemExit) as exit_info:
109+
run(args)
110+
111+
captured = capsys.readouterr()
112+
assert "[ERROR] The head and tail options are not supported" in captured.err
113+
assert exit_info.value.code == 1
114+
115+
116+
def test_main_external_diff_with_lines_fails(capsys):
117+
args = ["--external", "diff -u", "--lines", "1", ROBOTO_BEFORE_PATH, ROBOTO_AFTER_PATH]
118+
119+
with pytest.raises(SystemExit) as exit_info:
120+
run(args)
121+
122+
captured = capsys.readouterr()
123+
assert "[ERROR] The lines option is not supported" in captured.err
124+
assert exit_info.value.code == 1

0 commit comments

Comments
 (0)