Skip to content

Commit e8d667c

Browse files
committedAug 5, 2017
Allow testing of layer equality without throwing asserts
Sometimes in tests it's required to check for layer equality without aborting in case of mismatches
1 parent 5d635d1 commit e8d667c

File tree

1 file changed

+54
-25
lines changed

1 file changed

+54
-25
lines changed
 

‎python/testing/__init__.py

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
5555
{ fields: { a: skip, b: { precision: 2 }, geometry: { precision: 5 } }
5656
{ fields: { __all__: cast( str ) } }
5757
"""
58+
self.checkLayersEqual(layer_expected, layer_result, True, **kwargs)
59+
60+
def checkLayersEqual(self, layer_expected, layer_result, use_asserts=False, **kwargs):
61+
"""
62+
:param layer_expected: The first layer to compare
63+
:param layer_result: The second layer to compare
64+
:param use_asserts: If true, asserts are used to test conditions, if false, asserts
65+
are not used and the function will only return False if the test fails
66+
:param request: Optional, A feature request. This can be used to specify
67+
an order by clause to make sure features are compared in
68+
a given sequence if they don't match by default.
69+
:keyword compare: A map of comparison options. e.g.
70+
{ fields: { a: skip, b: { precision: 2 }, geometry: { precision: 5 } }
71+
{ fields: { __all__: cast( str ) } }
72+
"""
5873

5974
try:
6075
request = kwargs['request']
@@ -67,10 +82,16 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
6782
compare = {}
6883

6984
# Compare CRS
70-
_TestCase.assertEqual(self, layer_expected.dataProvider().crs().authid(), layer_result.dataProvider().crs().authid())
85+
if use_asserts:
86+
_TestCase.assertEqual(self, layer_expected.dataProvider().crs().authid(), layer_result.dataProvider().crs().authid())
87+
elif not layer_expected.dataProvider().crs().authid() == layer_result.dataProvider().crs().authid():
88+
return False
7189

7290
# Compare features
73-
_TestCase.assertEqual(self, layer_expected.featureCount(), layer_result.featureCount())
91+
if use_asserts:
92+
_TestCase.assertEqual(self, layer_expected.featureCount(), layer_result.featureCount())
93+
elif layer_expected.featureCount() != layer_result.featureCount():
94+
return False
7495

7596
try:
7697
precision = compare['geometry']['precision']
@@ -89,17 +110,20 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
89110
geom1 = feats[1].geometry().geometry().asWkt(precision)
90111
else:
91112
geom1 = None
92-
_TestCase.assertEqual(
93-
self,
94-
geom0,
95-
geom1,
96-
'Features {}/{} differ in geometry: \n\n {}\n\n vs \n\n {}'.format(
97-
feats[0].id(),
98-
feats[1].id(),
113+
if use_asserts:
114+
_TestCase.assertEqual(
115+
self,
99116
geom0,
100-
geom1
117+
geom1,
118+
'Features {}/{} differ in geometry: \n\n {}\n\n vs \n\n {}'.format(
119+
feats[0].id(),
120+
feats[1].id(),
121+
geom0,
122+
geom1
123+
)
101124
)
102-
)
125+
elif geom0 != geom1:
126+
return False
103127

104128
for attr_expected, field_expected in zip(feats[0].attributes(), layer_expected.fields().toList()):
105129
try:
@@ -134,21 +158,26 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
134158
attr_expected = round(attr_expected, cmp['precision'])
135159
attr_result = round(attr_result, cmp['precision'])
136160

137-
_TestCase.assertEqual(
138-
self,
139-
attr_expected,
140-
attr_result,
141-
'Features {}/{} differ in attributes\n\n * Field1: {} ({})\n * Field2: {} ({})\n\n * {} != {}'.format(
142-
feats[0].id(),
143-
feats[1].id(),
144-
field_expected.name(),
145-
field_expected.typeName(),
146-
field_result.name(),
147-
field_result.typeName(),
148-
repr(attr_expected),
149-
repr(attr_result)
161+
if use_asserts:
162+
_TestCase.assertEqual(
163+
self,
164+
attr_expected,
165+
attr_result,
166+
'Features {}/{} differ in attributes\n\n * Field1: {} ({})\n * Field2: {} ({})\n\n * {} != {}'.format(
167+
feats[0].id(),
168+
feats[1].id(),
169+
field_expected.name(),
170+
field_expected.typeName(),
171+
field_result.name(),
172+
field_result.typeName(),
173+
repr(attr_expected),
174+
repr(attr_result)
175+
)
150176
)
151-
)
177+
elif attr_expected != attr_result:
178+
return False
179+
180+
return True
152181

153182
def assertFilesEqual(self, filepath_expected, filepath_result):
154183
with open(filepath_expected, 'r') as file_expected:

0 commit comments

Comments
 (0)
Please sign in to comment.