@@ -117,7 +117,7 @@ def _support_inplace_edit_tester(self, alg_name, expected):
117
117
alg = self .registry .createAlgorithmById (alg_name )
118
118
for layer_wkb_name , supported in expected .items ():
119
119
layer = self ._make_layer (layer_wkb_name )
120
- print ("Checking %s ( %s ) : %s" % (alg_name , layer_wkb_name , supported ))
120
+ # print("Checking %s ( %s ) : %s" % (alg_name, layer_wkb_name, supported))
121
121
self .assertEqual (alg .supportInPlaceEdit (layer ), supported , "Expected: %s - %s = supported: %s" % (alg_name , layer_wkb_name , supported ))
122
122
123
123
def test_support_in_place_edit (self ):
@@ -175,7 +175,7 @@ def _make_compatible_tester(self, feature_wkt, layer_wkb_name, attrs=[1]):
175
175
context .setProject (QgsProject .instance ())
176
176
177
177
# Fix it!
178
- new_features = make_features_compatible ([f ], layer , context )
178
+ new_features = make_features_compatible ([f ], layer )
179
179
180
180
for new_f in new_features :
181
181
self .assertEqual (new_f .geometry ().wkbType (), layer .wkbType ())
@@ -259,6 +259,71 @@ def test_make_features_compatible(self):
259
259
self .assertEqual (f [0 ].geometry ().asWkt (), 'LineString (1 1, 2 2, 3 3, 1 1)' )
260
260
self .assertEqual (f [1 ].geometry ().asWkt (), 'LineString (10 1, 20 2, 30 3, 10 1)' )
261
261
262
+ def test_make_features_compatible_attributes (self ):
263
+ """Test corner cases for attributes"""
264
+
265
+ # Test feature without attributes
266
+ fields = QgsFields ()
267
+ fields .append (QgsField ('int_f' , QVariant .Int ))
268
+ fields .append (QgsField ('str_f' , QVariant .String ))
269
+ layer = QgsMemoryProviderUtils .createMemoryLayer (
270
+ 'mkfca_layer' , fields , QgsWkbTypes .Point , QgsCoordinateReferenceSystem (4326 ))
271
+ self .assertTrue (layer .isValid ())
272
+ f1 = QgsFeature (layer .fields ())
273
+ f1 ['int_f' ] = 1
274
+ f1 ['str_f' ] = 'str'
275
+ f1 .setGeometry (QgsGeometry .fromWkt ('Point(9 45)' ))
276
+ new_features = make_features_compatible ([f1 ], layer )
277
+ self .assertEqual (new_features [0 ].attributes (), f1 .attributes ())
278
+ self .assertTrue (new_features [0 ].geometry ().asWkt (), f1 .geometry ().asWkt ())
279
+
280
+ # Test pad with 0 with fields
281
+ f1 .setAttributes ([])
282
+ new_features = make_features_compatible ([f1 ], layer )
283
+ self .assertEqual (len (new_features [0 ].attributes ()), 2 )
284
+ self .assertEqual (new_features [0 ].attributes ()[0 ], QVariant ())
285
+ self .assertEqual (new_features [0 ].attributes ()[1 ], QVariant ())
286
+
287
+ # Test pad with 0 without fields
288
+ f1 = QgsFeature ()
289
+ f1 .setGeometry (QgsGeometry .fromWkt ('Point(9 45)' ))
290
+ new_features = make_features_compatible ([f1 ], layer )
291
+ self .assertEqual (len (new_features [0 ].attributes ()), 2 )
292
+ self .assertEqual (new_features [0 ].attributes ()[0 ], QVariant ())
293
+ self .assertEqual (new_features [0 ].attributes ()[1 ], QVariant ())
294
+
295
+ # Test drop extra attrs
296
+ f1 = QgsFeature (layer .fields ())
297
+ f1 .setAttributes ([1 , 'foo' , 'extra' ])
298
+ f1 .setGeometry (QgsGeometry .fromWkt ('Point(9 45)' ))
299
+ new_features = make_features_compatible ([f1 ], layer )
300
+ self .assertEqual (len (new_features [0 ].attributes ()), 2 )
301
+ self .assertEqual (new_features [0 ].attributes ()[0 ], 1 )
302
+ self .assertEqual (new_features [0 ].attributes ()[1 ], 'foo' )
303
+
304
+ def test_make_features_compatible_geometry (self ):
305
+ """Test corner cases for geometries"""
306
+ layer = self ._make_layer ('Point' )
307
+ self .assertTrue (layer .isValid ())
308
+ self .assertTrue (layer .startEditing ())
309
+ f1 = QgsFeature (layer .fields ())
310
+ f1 .setAttributes ([1 ])
311
+ new_features = make_features_compatible ([f1 ], layer )
312
+ self .assertEqual (len (new_features ), 0 )
313
+
314
+ nogeom_layer = QgsMemoryProviderUtils .createMemoryLayer (
315
+ 'nogeom_layer' , layer .fields (), QgsWkbTypes .NoGeometry , QgsCoordinateReferenceSystem (4326 ))
316
+ new_features = make_features_compatible ([f1 ], nogeom_layer )
317
+ self .assertEqual (len (new_features ), 1 )
318
+ self .assertEqual (new_features [0 ].geometry ().asWkt (), '' )
319
+
320
+ nogeom_layer = QgsMemoryProviderUtils .createMemoryLayer (
321
+ 'nogeom_layer' , layer .fields (), QgsWkbTypes .NoGeometry , QgsCoordinateReferenceSystem (4326 ))
322
+ f1 .setGeometry (QgsGeometry .fromWkt ('Point(9 45)' ))
323
+ new_features = make_features_compatible ([f1 ], nogeom_layer )
324
+ self .assertEqual (len (new_features ), 1 )
325
+ self .assertEqual (new_features [0 ].geometry ().asWkt (), '' )
326
+
262
327
def _alg_tester (self , alg_name , input_layer , parameters ):
263
328
264
329
alg = self .registry .createAlgorithmById (alg_name )
0 commit comments