Skip to content

Commit f3a4276

Browse files
authored
Merge pull request #52 from common-workflow-language/check-contents
Add comparison for file contents
2 parents 4da150b + ccd6197 commit f3a4276

File tree

3 files changed

+65
-6
lines changed

3 files changed

+65
-6
lines changed

cwltest/utils.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,17 @@ def compare_location(expected, actual):
6262
raise CompareFail.format(expected, actual, u"%s does not end with %s" % (actual[comp], expected[comp]))
6363

6464

65+
def compare_contents(expected, actual):
66+
# type: (Dict[str,Any], Dict[str,Any]) -> None
67+
expected_contents = expected["contents"]
68+
with open(actual["path"]) as f:
69+
actual_contents = f.read()
70+
if expected_contents != actual_contents:
71+
raise CompareFail.format(expected, actual,
72+
json.dumps(u"Output file contents do not match: actual '%s' is not equal to expected '%s'"
73+
% (actual_contents, expected_contents)))
74+
75+
6576
def check_keys(keys, expected, actual):
6677
# type: (Set[str], Dict[str,Any], Dict[str,Any]) -> None
6778
for k in keys:
@@ -76,7 +87,9 @@ def check_keys(keys, expected, actual):
7687
def compare_file(expected, actual):
7788
# type: (Dict[str,Any], Dict[str,Any]) -> None
7889
compare_location(expected, actual)
79-
other_keys = set(expected.keys()) - {'path', 'location', 'listing'}
90+
if 'contents' in expected:
91+
compare_contents(expected, actual)
92+
other_keys = set(expected.keys()) - {'path', 'location', 'listing', 'contents'}
8093
check_keys(other_keys, expected, actual)
8194

8295

tests/test-data/cores.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2

tests/test_compare.py

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
import unittest
22
from cwltest import CompareFail
3-
from cwltest.utils import compare_file
3+
from cwltest.utils import compare_file, compare
44

55

6-
class TestCompareFile(unittest.TestCase):
6+
class TestCompare(unittest.TestCase):
77

8-
def test_general(self):
8+
def compare_success(self, expected, actual):
9+
try:
10+
compare(expected, actual)
11+
except CompareFail:
12+
self.fail("Comparison failed unexpectedly")
13+
14+
15+
class TestCompareFile(TestCompare):
16+
17+
def test_compare_file(self):
918
expected = {
1019
"location": "cores.txt",
1120
"size": 2,
@@ -21,8 +30,44 @@ def test_general(self):
2130
"path": "/var/folders/8x/2df05_7j20j6r8y81w4qf43r0000gn/T/tmpG0EkrS/cores.txt",
2231
"size": 2
2332
}
24-
2533
try:
2634
compare_file(expected, actual)
2735
except CompareFail:
28-
self.fail("File comparison failed unexpectedly")
36+
self.fail("File comparison failed unexpectedly")
37+
38+
def test_compare_contents_success(self):
39+
expected = {
40+
"location": "cores.txt",
41+
"size": 2,
42+
"class": "File",
43+
"contents": "2\n"
44+
}
45+
46+
actual = {
47+
"basename": "cores.txt",
48+
"checksum": "sha1$7448d8798a4380162d4b56f9b452e2f6f9e24e7a",
49+
"class": "File",
50+
"location": "file:///var/folders/8x/2df05_7j20j6r8y81w4qf43r0000gn/T/tmpG0EkrS/cores.txt",
51+
"path": "tests/test-data/cores.txt",
52+
"size": 2
53+
}
54+
self.compare_success(expected, actual)
55+
56+
def test_compare_contents_failure(self):
57+
expected = {
58+
"location": "cores.txt",
59+
"size": 2,
60+
"class": "File",
61+
"contents": "2"
62+
}
63+
64+
actual = {
65+
"basename": "cores.txt",
66+
"checksum": "sha1$7448d8798a4380162d4b56f9b452e2f6f9e24e7a",
67+
"class": "File",
68+
"location": "file:///var/folders/8x/2df05_7j20j6r8y81w4qf43r0000gn/T/tmpG0EkrS/cores.txt",
69+
"path": "tests/test-data/cores.txt",
70+
"size": 2
71+
}
72+
with self.assertRaises(CompareFail):
73+
compare_file(expected, actual)

0 commit comments

Comments
 (0)