15
15
from qgis .core import QgsRectangle , QgsFeatureRequest , QgsGeometry , NULL
16
16
17
17
class ProviderTestCase (object ):
18
+ def assert_query (self , provider , expression , expected ):
19
+ result = set ([f ['pk' ] for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression (expression ))])
20
+ assert set (expected ) == result , 'Expected {} and got {} when testing expression "{}"' .format (set (expected ), result , expression )
21
+
18
22
'''
19
23
This is a collection of tests for vector data providers and kept generic.
20
24
To make use of it, subclass it and set self.provider to a provider you want to test.
@@ -27,19 +31,27 @@ class ProviderTestCase(object):
27
31
'''
28
32
def runGetFeatureTests (self , provider ):
29
33
assert len ([f for f in provider .getFeatures ()]) == 5
30
- assert len ([f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('name IS NOT NULL' ))]) == 4
31
- assert len (
32
- [f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('name LIKE \' Apple\' ' ))]) == 1
33
- assert len (
34
- [f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('name ILIKE \' aPple\' ' ))]) == 1
35
- assert len (
36
- [f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('name ILIKE \' %pp%\' ' ))]) == 1
37
- assert len ([f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('cnt > 0' ))]) == 4
38
- assert len ([f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('cnt < 0' ))]) == 1
39
- assert len ([f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('cnt >= 100' ))]) == 4
40
- assert len ([f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('cnt <= 100' ))]) == 2
41
- assert len (
42
- [f for f in provider .getFeatures (QgsFeatureRequest ().setFilterExpression ('pk IN (1, 2, 4, 8)' ))]) == 3
34
+ self .assert_query (provider , 'name ILIKE \' QGIS\' ' , [])
35
+ self .assert_query (provider , '"name" IS NULL' , [5 ])
36
+ self .assert_query (provider , '"name" IS NOT NULL' , [1 , 2 , 3 , 4 ])
37
+ self .assert_query (provider , '"name" NOT LIKE \' Ap%\' ' , [1 , 3 , 4 ])
38
+ self .assert_query (provider , '"name" NOT ILIKE \' QGIS\' ' , [1 , 2 , 3 , 4 ])
39
+ self .assert_query (provider , '"name" NOT ILIKE \' pEAR\' ' , [1 , 2 , 4 ])
40
+ self .assert_query (provider , 'name LIKE \' Apple\' ' , [2 ])
41
+ self .assert_query (provider , 'name ILIKE \' aPple\' ' , [2 ])
42
+ self .assert_query (provider , 'name ILIKE \' %pp%\' ' , [2 ])
43
+ self .assert_query (provider , 'cnt > 0' , [1 , 2 , 3 , 4 ])
44
+ self .assert_query (provider , 'cnt < 0' , [5 ])
45
+ self .assert_query (provider , 'cnt >= 100' , [1 , 2 , 3 , 4 ])
46
+ self .assert_query (provider , 'cnt <= 100' , [1 , 5 ])
47
+ self .assert_query (provider , 'pk IN (1, 2, 4, 8)' , [1 , 2 , 4 ])
48
+ self .assert_query (provider , 'cnt = 50 * 2' , [1 ])
49
+ self .assert_query (provider , 'cnt = 99 + 1' , [1 ])
50
+ self .assert_query (provider , 'cnt = 1100 % 1000' , [1 ])
51
+ self .assert_query (provider , '"name" || \' \' || "cnt" = \' Orange 100\' ' , [1 ])
52
+ self .assert_query (provider , 'cnt = 10 ^ 2' , [1 ])
53
+ self .assert_query (provider , '"name" ~ \' [OP]ra[gne]+\' ' , [1 ])
54
+
43
55
44
56
def testGetFeaturesUncompiled (self ):
45
57
try :
@@ -77,8 +89,7 @@ def testExtent(self):
77
89
78
90
def testUnique (self ):
79
91
assert set (self .provider .uniqueValues (1 )) == set ([- 200 , 100 , 200 , 300 , 400 ])
80
- assert set ([u'Apple' , u'Honey' , u'Orange' , u'Pear' , NULL ]) == set (
81
- self .provider .uniqueValues (2 )), 'Got {}' .format (set (self .provider .uniqueValues (2 )))
92
+ assert set ([u'Apple' , u'Honey' , u'Orange' , u'Pear' , NULL ]) == set (self .provider .uniqueValues (2 )), 'Got {}' .format (set (self .provider .uniqueValues (2 )))
82
93
83
94
def testFeatureCount (self ):
84
95
assert self .provider .featureCount () == 5
0 commit comments