@@ -108,6 +108,160 @@ def test_ring_intersections(self):
108
108
self .assertEqual (spy [1 ][0 ].where (), QgsPointXY (2 , 7 ))
109
109
self .assertEqual (spy [1 ][0 ].what (), 'segment 1 of ring 1 of polygon 0 intersects segment 2 of ring 2 of polygon 0 at 2, 7' )
110
110
111
+ def test_line_vertices (self ):
112
+ # valid line
113
+ g = QgsGeometry .fromWkt ("LineString (0 0, 10 0)" )
114
+
115
+ validator = QgsGeometryValidator (g )
116
+ spy = QSignalSpy (validator .errorFound )
117
+ validator .run ()
118
+ self .assertEqual (len (spy ), 0 )
119
+
120
+ # not enough vertices
121
+ g = QgsGeometry .fromWkt ("LineString (1 0)" )
122
+
123
+ validator = QgsGeometryValidator (g )
124
+ spy = QSignalSpy (validator .errorFound )
125
+ validator .run ()
126
+ self .assertEqual (len (spy ), 1 )
127
+
128
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
129
+ self .assertEqual (spy [0 ][0 ].what (), 'line 0 with less than two points' )
130
+
131
+ g = QgsGeometry .fromWkt ("LineString ()" )
132
+
133
+ validator = QgsGeometryValidator (g )
134
+ spy = QSignalSpy (validator .errorFound )
135
+ validator .run ()
136
+ self .assertEqual (len (spy ), 1 )
137
+
138
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
139
+ self .assertEqual (spy [0 ][0 ].what (), 'line 0 with less than two points' )
140
+
141
+ def test_ring_vertex_count (self ):
142
+ # valid ring
143
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 0))" )
144
+
145
+ validator = QgsGeometryValidator (g )
146
+ spy = QSignalSpy (validator .errorFound )
147
+ validator .run ()
148
+ self .assertEqual (len (spy ), 0 )
149
+
150
+ # not enough vertices
151
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10))" )
152
+
153
+ validator = QgsGeometryValidator (g )
154
+ spy = QSignalSpy (validator .errorFound )
155
+ validator .run ()
156
+ self .assertEqual (len (spy ), 1 )
157
+
158
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
159
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 0 with less than four points' )
160
+
161
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 0 0))" )
162
+
163
+ validator = QgsGeometryValidator (g )
164
+ spy = QSignalSpy (validator .errorFound )
165
+ validator .run ()
166
+ self .assertEqual (len (spy ), 1 )
167
+
168
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
169
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 0 with less than four points' )
170
+
171
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0))" )
172
+
173
+ validator = QgsGeometryValidator (g )
174
+ spy = QSignalSpy (validator .errorFound )
175
+ validator .run ()
176
+ self .assertEqual (len (spy ), 1 )
177
+
178
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
179
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 0 with less than four points' )
180
+
181
+ g = QgsGeometry .fromWkt ("Polygon ((0 0))" )
182
+
183
+ validator = QgsGeometryValidator (g )
184
+ spy = QSignalSpy (validator .errorFound )
185
+ validator .run ()
186
+ self .assertEqual (len (spy ), 1 )
187
+
188
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
189
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 0 with less than four points' )
190
+
191
+ g = QgsGeometry .fromWkt ("Polygon (())" )
192
+
193
+ validator = QgsGeometryValidator (g )
194
+ spy = QSignalSpy (validator .errorFound )
195
+ validator .run ()
196
+ self .assertEqual (len (spy ), 0 )
197
+
198
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 0),(1 1, 2 1, 2 2))" )
199
+
200
+ validator = QgsGeometryValidator (g )
201
+ spy = QSignalSpy (validator .errorFound )
202
+ validator .run ()
203
+ self .assertEqual (len (spy ), 1 )
204
+
205
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
206
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 1 with less than four points' )
207
+
208
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 0),(1 1, 2 1, 2 2, 1 1))" )
209
+
210
+ validator = QgsGeometryValidator (g )
211
+ spy = QSignalSpy (validator .errorFound )
212
+ validator .run ()
213
+ self .assertEqual (len (spy ), 0 )
214
+
215
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 2 1, 2 2, 1 1),(3 3, 3 4, 4 4))" )
216
+
217
+ validator = QgsGeometryValidator (g )
218
+ spy = QSignalSpy (validator .errorFound )
219
+ validator .run ()
220
+ self .assertEqual (len (spy ), 1 )
221
+
222
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
223
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 2 with less than four points' )
224
+
225
+ def test_ring_closed (self ):
226
+ # valid ring
227
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 0))" )
228
+
229
+ validator = QgsGeometryValidator (g )
230
+ spy = QSignalSpy (validator .errorFound )
231
+ validator .run ()
232
+ self .assertEqual (len (spy ), 0 )
233
+
234
+ # not closed
235
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 1 1))" )
236
+
237
+ validator = QgsGeometryValidator (g )
238
+ spy = QSignalSpy (validator .errorFound )
239
+ validator .run ()
240
+ self .assertEqual (len (spy ), 1 )
241
+
242
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
243
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 0 not closed' )
244
+
245
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 0),(1 1, 2 1, 2 2, 1.1 1))" )
246
+
247
+ validator = QgsGeometryValidator (g )
248
+ spy = QSignalSpy (validator .errorFound )
249
+ validator .run ()
250
+ self .assertEqual (len (spy ), 1 )
251
+
252
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
253
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 1 not closed' )
254
+
255
+ g = QgsGeometry .fromWkt ("Polygon ((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 2 1, 2 2, 1 1),(3 3, 3 4, 4 4, 3.1 3))" )
256
+
257
+ validator = QgsGeometryValidator (g )
258
+ spy = QSignalSpy (validator .errorFound )
259
+ validator .run ()
260
+ self .assertEqual (len (spy ), 1 )
261
+
262
+ self .assertEqual (spy [0 ][0 ].where (), QgsPointXY ())
263
+ self .assertEqual (spy [0 ][0 ].what (), 'ring 2 not closed' )
264
+
111
265
112
266
if __name__ == '__main__' :
113
267
unittest .main ()
0 commit comments