@@ -318,6 +318,51 @@ def testSelectSubsetString(self):
318
318
got = [feat for feat in vl .getFeatures (QgsFeatureRequest (1 ))]
319
319
self .assertEqual (len (got ), 1 ) # this is the current behavior, broken
320
320
321
+ def testEditSubsetString (self ):
322
+
323
+ tmpfile = os .path .join (self .basetestpath , 'testEditSubsetString.gpkg' )
324
+ ds = ogr .GetDriverByName ('GPKG' ).CreateDataSource (tmpfile )
325
+ lyr = ds .CreateLayer ('test' , geom_type = ogr .wkbMultiPolygon )
326
+ lyr .CreateField (ogr .FieldDefn ('foo' , ogr .OFTString ))
327
+ f = ogr .Feature (lyr .GetLayerDefn ())
328
+ f ['foo' ] = 'bar'
329
+ lyr .CreateFeature (f )
330
+ f = None
331
+ f = ogr .Feature (lyr .GetLayerDefn ())
332
+ f ['foo' ] = 'baz'
333
+ lyr .CreateFeature (f )
334
+ f = None
335
+ ds = None
336
+
337
+ vl = QgsVectorLayer ('{}|layerid=0' .format (tmpfile ), 'test' , 'ogr' )
338
+ self .assertEqual (vl .dataProvider ().featureCount (), 2 )
339
+
340
+ # Test adding features
341
+ vl .setSubsetString ("foo = 'baz'" )
342
+ self .assertTrue (vl .startEditing ())
343
+ feature = QgsFeature (vl .fields ())
344
+ feature ['foo' ] = 'abc'
345
+ vl .addFeature (feature )
346
+ vl .commitChanges ()
347
+ vl .setSubsetString (None )
348
+ self .assertEqual (vl .dataProvider ().featureCount (), 3 )
349
+
350
+ # Test deleting a feature
351
+ vl .setSubsetString ("foo = 'baz'" )
352
+ self .assertTrue (vl .startEditing ())
353
+ vl .deleteFeature (1 )
354
+ vl .commitChanges ()
355
+ vl .setSubsetString (None )
356
+ self .assertEqual (vl .dataProvider ().featureCount (), 2 )
357
+
358
+ # Test editing a feature
359
+ vl .setSubsetString ("foo = 'baz'" )
360
+ self .assertTrue (vl .startEditing ())
361
+ vl .changeAttributeValue (2 , 1 , 'xx' )
362
+ vl .commitChanges ()
363
+ vl .setSubsetString (None )
364
+ self .assertEqual (set ((feat ['foo' ] for feat in vl .getFeatures ())), set (['xx' , 'abc' ]))
365
+
321
366
def testStyle (self ):
322
367
323
368
# First test with invalid URI
0 commit comments