@@ -1626,6 +1626,47 @@ def testEvaluatingDefaultExpressions(self):
16261626 layer .setDefaultValueExpression (1 , 'not a valid expression' )
16271627 self .assertFalse (layer .defaultValue (1 ))
16281628
1629+ def testGetFeatureLimitWithEdits (self ):
1630+ """ test getting features with a limit, when edits are present """
1631+ layer = createLayerWithOnePoint ()
1632+ # now has one feature with id 0
1633+
1634+ pr = layer .dataProvider ()
1635+
1636+ f1 = QgsFeature (1 )
1637+ f1 .setAttributes (["test" , 3 ])
1638+ f1 .setGeometry (QgsGeometry .fromPoint (QgsPoint (300 , 200 )))
1639+ f2 = QgsFeature (2 )
1640+ f2 .setAttributes (["test" , 3 ])
1641+ f2 .setGeometry (QgsGeometry .fromPoint (QgsPoint (100 , 200 )))
1642+ f3 = QgsFeature (3 )
1643+ f3 .setAttributes (["test" , 3 ])
1644+ f3 .setGeometry (QgsGeometry .fromPoint (QgsPoint (100 , 200 )))
1645+ self .assertTrue (pr .addFeatures ([f1 , f2 , f3 ]))
1646+
1647+ req = QgsFeatureRequest ().setLimit (2 )
1648+ self .assertEqual (len (list (layer .getFeatures (req ))), 2 )
1649+
1650+ # now delete feature f1
1651+ layer .startEditing ()
1652+ self .assertTrue (layer .deleteFeature (1 ))
1653+ req = QgsFeatureRequest ().setLimit (2 )
1654+ self .assertEqual (len (list (layer .getFeatures (req ))), 2 )
1655+ layer .rollBack ()
1656+
1657+ # change an attribute value required by filter
1658+ layer .startEditing ()
1659+ req = QgsFeatureRequest ().setFilterExpression ('fldint=3' ).setLimit (2 )
1660+ self .assertTrue (layer .changeAttributeValue (2 , 1 , 4 ))
1661+ self .assertEqual (len (list (layer .getFeatures (req ))), 2 )
1662+ layer .rollBack ()
1663+
1664+ layer .startEditing ()
1665+ req = QgsFeatureRequest ().setFilterRect (QgsRectangle (50 , 100 , 150 , 300 )).setLimit (2 )
1666+ self .assertTrue (layer .changeGeometry (2 , QgsGeometry .fromPoint (QgsPoint (500 , 600 ))))
1667+ self .assertEqual (len (list (layer .getFeatures (req ))), 2 )
1668+ layer .rollBack ()
1669+
16291670
16301671# TODO:
16311672# - fetch rect: feat with changed geometry: 1. in rect, 2. out of rect
0 commit comments