@@ -1626,6 +1626,47 @@ def testEvaluatingDefaultExpressions(self):
1626
1626
layer .setDefaultValueExpression (1 , 'not a valid expression' )
1627
1627
self .assertFalse (layer .defaultValue (1 ))
1628
1628
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
+
1629
1670
1630
1671
# TODO:
1631
1672
# - fetch rect: feat with changed geometry: 1. in rect, 2. out of rect
0 commit comments