@@ -55,6 +55,21 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
55
55
{ fields: { a: skip, b: { precision: 2 }, geometry: { precision: 5 } }
56
56
{ fields: { __all__: cast( str ) } }
57
57
"""
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
+ """
58
73
59
74
try :
60
75
request = kwargs ['request' ]
@@ -67,10 +82,16 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
67
82
compare = {}
68
83
69
84
# 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
71
89
72
90
# 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
74
95
75
96
try :
76
97
precision = compare ['geometry' ]['precision' ]
@@ -89,17 +110,20 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
89
110
geom1 = feats [1 ].geometry ().geometry ().asWkt (precision )
90
111
else :
91
112
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 ,
99
116
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
+ )
101
124
)
102
- )
125
+ elif geom0 != geom1 :
126
+ return False
103
127
104
128
for attr_expected , field_expected in zip (feats [0 ].attributes (), layer_expected .fields ().toList ()):
105
129
try :
@@ -134,21 +158,26 @@ def assertLayersEqual(self, layer_expected, layer_result, **kwargs):
134
158
attr_expected = round (attr_expected , cmp ['precision' ])
135
159
attr_result = round (attr_result , cmp ['precision' ])
136
160
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
+ )
150
176
)
151
- )
177
+ elif attr_expected != attr_result :
178
+ return False
179
+
180
+ return True
152
181
153
182
def assertFilesEqual (self , filepath_expected , filepath_result ):
154
183
with open (filepath_expected , 'r' ) as file_expected :
0 commit comments