Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson authored and github-actions[bot] committed Nov 18, 2022
1 parent 519553c commit a18d1f1
Showing 1 changed file with 184 additions and 0 deletions.
184 changes: 184 additions & 0 deletions tests/src/python/test_qgsvectorlayer.py
Expand Up @@ -614,6 +614,8 @@ def checkBefore():

checkBefore()

spy = QSignalSpy(layer.layerModified)

# try to add feature without editing mode
self.assertFalse(layer.addFeature(feat))

Expand All @@ -624,18 +626,26 @@ def checkBefore():
bad_feature = QgsFeature()
self.assertFalse(layer.addFeature(bad_feature))

self.assertEqual(len(spy), 0)

# add good feature
self.assertTrue(layer.addFeature(feat))

self.assertEqual(len(spy), 1)

checkAfter()
self.assertEqual(layer.dataProvider().featureCount(), 0)

# now try undo/redo
layer.undoStack().undo()
checkBefore()
self.assertEqual(len(spy), 2)

layer.undoStack().redo()
checkAfter()

self.assertEqual(len(spy), 3)

self.assertTrue(layer.commitChanges())

checkAfter()
Expand Down Expand Up @@ -681,22 +691,33 @@ def checkBefore():
# add feature
layer.startEditing()

spy = QSignalSpy(layer.layerModified)

# try adding feature with incorrect number of fields
bad_feature = QgsFeature()
self.assertFalse(layer.addFeatures([bad_feature]))

self.assertEqual(len(spy), 0)

# add good features
self.assertTrue(layer.addFeatures([feat1, feat2]))

self.assertEqual(len(spy), 1)

checkAfter()
self.assertEqual(layer.dataProvider().featureCount(), 0)

# now try undo/redo
layer.undoStack().undo()

self.assertEqual(len(spy), 2)
layer.undoStack().undo()
self.assertEqual(len(spy), 3)
checkBefore()
layer.undoStack().redo()
self.assertEqual(len(spy), 4)
layer.undoStack().redo()
self.assertEqual(len(spy), 5)
checkAfter()

self.assertTrue(layer.commitChanges())
Expand Down Expand Up @@ -737,22 +758,30 @@ def checkBefore():

checkBefore()

spy = QSignalSpy(layer.layerModified)

# try to delete feature without editing mode
self.assertFalse(layer.deleteFeature(fid))

self.assertEqual(len(spy), 0)

# delete feature
layer.startEditing()
self.assertTrue(layer.deleteFeature(fid))

self.assertEqual(len(spy), 1)

checkAfter()

# make sure calling it twice does not work
self.assertFalse(layer.deleteFeature(fid))

# now try undo/redo
layer.undoStack().undo()
self.assertEqual(len(spy), 2)
checkBefore()
layer.undoStack().redo()
self.assertEqual(len(spy), 3)
checkAfter()

self.assertEqual(layer.dataProvider().featureCount(), 1)
Expand All @@ -762,6 +791,107 @@ def checkBefore():
checkAfter()
self.assertEqual(layer.dataProvider().featureCount(), 0)

def test_DeleteFeatures(self):
layer = createLayerWithFivePoints()

def checkAfter():
self.assertEqual(layer.featureCount(), 3)

# check select+nextFeature
fi = layer.getFeatures()
f = next(fi)
fid2 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(200, 200))
f = next(fi)
fid4 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(400, 300))
f = next(fi)
fid5 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(0, 0))
with self.assertRaises(StopIteration):
next(fi)

# check feature at id
f2 = next(layer.getFeatures(QgsFeatureRequest(fid2)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(200, 200))
f2 = next(layer.getFeatures(QgsFeatureRequest(fid4)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(400, 300))
f2 = next(layer.getFeatures(QgsFeatureRequest(fid5)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(0, 0))

def checkBefore():
self.assertEqual(layer.featureCount(), 5)

# check select+nextFeature
fi = layer.getFeatures()
f = next(fi)
fid1 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(100, 200))
f = next(fi)
fid2 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(200, 200))
f = next(fi)
fid3 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(300, 200))
f = next(fi)
fid4 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(400, 300))
f = next(fi)
fid5 = f.id()
self.assertEqual(f.geometry().asPoint(), QgsPointXY(0, 0))
with self.assertRaises(StopIteration):
next(fi)

# check feature at id
f2 = next(layer.getFeatures(QgsFeatureRequest(fid1)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(100, 200))
f2 = next(layer.getFeatures(QgsFeatureRequest(fid2)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(200, 200))
f2 = next(layer.getFeatures(QgsFeatureRequest(fid3)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(300, 200))
f2 = next(layer.getFeatures(QgsFeatureRequest(fid4)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(400, 300))
f2 = next(layer.getFeatures(QgsFeatureRequest(fid5)))
self.assertEqual(f2.geometry().asPoint(), QgsPointXY(0, 0))

return fid1, fid2, fid3, fid4, fid5

fid1, fid2, fid3, fid4, fid5 = checkBefore()

spy = QSignalSpy(layer.layerModified)

# try to delete features without editing mode
self.assertFalse(layer.deleteFeatures([fid1, fid2]))

self.assertEqual(len(spy), 0)

# delete features
layer.startEditing()
self.assertTrue(layer.deleteFeatures([fid1, fid3]))

self.assertEqual(len(spy), 1)

checkAfter()

# now try undo/redo
layer.undoStack().undo()
self.assertEqual(len(spy), 2)
layer.undoStack().undo()
self.assertEqual(len(spy), 3)
checkBefore()
layer.undoStack().redo()
self.assertEqual(len(spy), 4)
layer.undoStack().redo()
self.assertEqual(len(spy), 5)
checkAfter()

self.assertEqual(layer.dataProvider().featureCount(), 5)

self.assertTrue(layer.commitChanges())

checkAfter()
self.assertEqual(layer.dataProvider().featureCount(), 3)

def test_DeleteFeatureAfterAddFeature(self):

layer = createEmptyLayer()
Expand Down Expand Up @@ -894,6 +1024,60 @@ def checkBefore():
self.assertTrue(layer.commitChanges())
checkAfter()

def test_ChangeAttributeValues(self):
layer = createLayerWithOnePoint()
fid = 1

def checkAfter():
# check select+nextFeature
fi = layer.getFeatures()
f = next(fi)
self.assertEqual(f[0], "good")
self.assertEqual(f[1], 100)

# check feature at id
f2 = next(layer.getFeatures(QgsFeatureRequest(f.id())))
self.assertEqual(f2[0], "good")
self.assertEqual(f2[1], 100)

def checkBefore():
# check select+nextFeature
f = next(layer.getFeatures())
self.assertEqual(f[0], "test")
self.assertEqual(f[1], 123)

checkBefore()

spy = QSignalSpy(layer.layerModified)

# try to change attribute without editing mode
self.assertFalse(layer.changeAttributeValues(fid, {0: "good", 1: 100}))

self.assertEqual(len(spy), 0)

# change attribute
layer.startEditing()
self.assertTrue(layer.changeAttributeValues(fid, {0: "good", 1: 100}))

self.assertEqual(len(spy), 1)

checkAfter()

# now try undo/redo
layer.undoStack().undo()
self.assertEqual(len(spy), 2)
layer.undoStack().undo()
self.assertEqual(len(spy), 3)
checkBefore()
layer.undoStack().redo()
self.assertEqual(len(spy), 4)
layer.undoStack().redo()
self.assertEqual(len(spy), 5)
checkAfter()

self.assertTrue(layer.commitChanges())
checkAfter()

def test_ChangeAttributeAfterAddFeature(self):
layer = createLayerWithOnePoint()
layer.dataProvider().deleteFeatures([1]) # no need for this feature
Expand Down

0 comments on commit a18d1f1

Please sign in to comment.