170 changes: 51 additions & 119 deletions tests/src/python/test_qgsvectorlayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import os
from PyQt4.QtCore import QVariant

from qgis.core import QgsVectorLayer, QgsFeature, QgsGeometry, QgsPoint, QgsField, QgsFields, QgsMapLayerRegistry, QgsVectorJoinInfo
from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsGeometry, QgsPoint, QgsField, QgsFields, QgsMapLayerRegistry, QgsVectorJoinInfo
from utilities import (unitTestDataPath,
getQgisTestApp,
TestCase,
Expand Down Expand Up @@ -100,23 +100,18 @@ def checkAfter():
assert layer.pendingFeatureCount() == 1

# check select+nextFeature
layer.select([])
f = QgsFeature()
assert layer.nextFeature(f)
f = layer.getFeatures().next()
assert f.geometry().asPoint() == QgsPoint(1,2)

# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest(f.id())).next()
assert f2.geometry().asPoint() == QgsPoint(1,2)

def checkBefore():
assert layer.pendingFeatureCount() == 0

# check select+nextFeature
layer.select([])
f = QgsFeature()
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)


checkBefore()
Expand Down Expand Up @@ -154,27 +149,22 @@ def checkAfter():
assert layer.pendingFeatureCount() == 0

# check select+nextFeature
layer.select([])
f = QgsFeature()
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)

# check feature at id
f2 = QgsFeature()
assert not layer.featureAtId(fid, f2)
self.assertRaises(StopIteration, layer.getFeatures(QgsFeatureRequest(fid)).next)

def checkBefore():
assert layer.pendingFeatureCount() == 1

# check select+nextFeature
layer.select([])
f = QgsFeature()
assert layer.nextFeature(f)
fi = layer.getFeatures()
f = fi.next()
assert f.geometry().asPoint() == QgsPoint(100,200)
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, fi.next)

# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(fid, f2)
f2 = layer.getFeatures(QgsFeatureRequest(fid)).next()


checkBefore()
Expand Down Expand Up @@ -215,9 +205,7 @@ def checkBefore():
assert layer.pendingFeatureCount() == 0

# check select+nextFeature
layer.select([])
f = QgsFeature()
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)

def checkAfter1():
assert layer.pendingFeatureCount() == 1
Expand Down Expand Up @@ -262,22 +250,18 @@ def test_ChangeAttribute(self):

def checkAfter():
# check select+nextFeature
f = QgsFeature()
layer.select([0,1])
assert layer.nextFeature(f)
assert f.attributes()[0].toString() == "good"
fi = layer.getFeatures()
f = fi.next()
assert f[0].toString() == "good"

# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
assert f2.attributes()[0].toString() == "good"
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2[0].toString() == "good"

def checkBefore():
# check select+nextFeature
f = QgsFeature()
layer.select([0,1])
assert layer.nextFeature(f)
assert f.attributes()[0].toString() == "test"
f = layer.getFeatures().next()
assert f[0].toString() == "test"

checkBefore()

Expand Down Expand Up @@ -311,27 +295,23 @@ def test_ChangeAttributeAfterAddFeature(self):
def checkAfter():
assert len(layer.pendingFields()) == 2
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
fi = layer.getFeatures()
f = fi.next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toString() == "hello"
assert attrs[1].toInt()[0] == 12

assert not layer.nextFeature(f)
self.assertRaises(StopIteration, fi.next)

# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2[0].toString() == "hello"
assert f2[1].toInt()[0] == 12

def checkBefore():
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)

checkBefore()

Expand Down Expand Up @@ -365,20 +345,15 @@ def test_ChangeGeometry(self):

def checkAfter():
# check select+nextFeature
f = QgsFeature()
layer.select([])
assert layer.nextFeature(f)
f = layer.getFeatures().next()
assert f.geometry().asPoint() == QgsPoint(300,400)
# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2.geometry().asPoint() == QgsPoint(300,400)

def checkBefore():
# check select+nextFeature
f = QgsFeature()
layer.select([])
assert layer.nextFeature(f)
f = layer.getFeatures().next()
assert f.geometry().asPoint() == QgsPoint(100,200)

# try to change geometry without editing mode
Expand Down Expand Up @@ -411,22 +386,17 @@ def test_ChangeGeometryAfterChangeAttribute(self):

def checkAfter():
# check select+nextFeature
f = QgsFeature()
layer.select([])
assert layer.nextFeature(f)
f = layer.getFeatures().next()
assert f.geometry().asPoint() == QgsPoint(300,400)
assert f[0].toString() == "changed"
# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2.geometry().asPoint() == QgsPoint(300,400)
assert f2[0].toString() == "changed"

def checkBefore():
# check select+nextFeature
f = QgsFeature()
layer.select([])
assert layer.nextFeature(f)
f = layer.getFeatures().next()
assert f.geometry().asPoint() == QgsPoint(100,200)
assert f[0].toString() == "test"

Expand Down Expand Up @@ -462,20 +432,15 @@ def test_ChangeGeometryAfterAddFeature(self):
def checkAfter():
assert len(layer.pendingFields()) == 2
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
assert f.geometry().asPoint() == QgsPoint(2,2)
# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2.geometry().asPoint() == QgsPoint(2,2)

def checkBefore():
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)

checkBefore()

Expand Down Expand Up @@ -516,9 +481,7 @@ def checkBefore():
assert flds[1].name() == "fldint"

# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toString() == "test"
Expand All @@ -533,18 +496,15 @@ def checkAfter():
assert flds[2].name() == "fld1"

# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 3
assert attrs[0].toString() == "test"
assert attrs[1].toInt()[0] == 123
assert not attrs[2].isValid()

# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2[0].toString() == "test"
assert f2[1].toInt()[0] == 123
assert not f2[2].isValid()
Expand Down Expand Up @@ -585,24 +545,19 @@ def test_AddAttributeAfterAddFeature(self):
def checkBefore():
assert len(layer.pendingFields()) == 2
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)

def checkAfter():
assert len(layer.pendingFields()) == 3
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 3
assert attrs[0].toString() == "hello"
assert attrs[1].toInt()[0] == 42
assert not attrs[2].isValid()
# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert f2[0].toString() == "hello"
assert f2[1].toInt()[0] == 42
assert not f2[2].isValid()
Expand Down Expand Up @@ -655,9 +610,7 @@ def checkBefore():
assert flds[1].name() == "fldint"
assert flds[2].name() == "flddouble"

f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 3
assert attrs[0].toString() == "test"
Expand All @@ -678,9 +631,7 @@ def checkAfterOneDelete():
assert flds[1].name() == "flddouble"
assert layer.pendingAllAttributesList() == [0,1]

f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toInt()[0] == 123
Expand All @@ -698,15 +649,12 @@ def checkAfterTwoDeletes():
assert len(flds) == 1
assert flds[0].name() == "flddouble"

f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 1
assert attrs[0].toDouble()[0] == 5.5
# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert len(f2.attributes()) == 1
assert f2[0].toDouble()[0] == 5.5

Expand Down Expand Up @@ -735,16 +683,13 @@ def checkAfter(): # layer should be unchanged
assert flds[1].name() == "fldint"

# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toString() == "test"
assert attrs[1].toInt()[0] == 123
# check feature at id
f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert len(f2.attributes()) == 2
assert f2[0].toString() == "test"
assert f2[1].toInt()[0] == 123
Expand Down Expand Up @@ -781,16 +726,12 @@ def test_DeleteAttributeAfterAddFeature(self):
def checkBefore():
assert len(layer.pendingFields()) == 2
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert not layer.nextFeature(f)
self.assertRaises(StopIteration, layer.getFeatures().next)

def checkAfter1():
assert len(layer.pendingFields()) == 2
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toString() == "hello"
Expand All @@ -799,9 +740,7 @@ def checkAfter1():
def checkAfter2():
assert len(layer.pendingFields()) == 1
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 1
assert attrs[0].toInt()[0] == 42
Expand Down Expand Up @@ -835,29 +774,23 @@ def test_DeleteAttributeAfterChangeValue(self):

def checkBefore():
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toString() == "test"
assert attrs[1].toInt()[0] == 123

def checkAfter1():
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 2
assert attrs[0].toString() == "changed"
assert attrs[1].toInt()[0] == 123

def checkAfter2():
# check feature
f = QgsFeature()
layer.select(layer.pendingAllAttributesList())
assert layer.nextFeature(f)
f = layer.getFeatures().next()
attrs = f.attributes()
assert len(attrs) == 1
assert attrs[0].toInt()[0] == 123
Expand Down Expand Up @@ -946,8 +879,7 @@ def test_join(self):
assert attrs[3].toInt()[0] == 321
assert fi.nextFeature(f) == False

f2 = QgsFeature()
assert layer.featureAtId(f.id(), f2)
f2 = layer.getFeatures(QgsFeatureRequest( f.id() )).next()
assert len(f2.attributes()) == 4
assert f2[2].toString() == "foo"
assert f2[3].toInt()[0] == 321
Expand Down