Skip to content

Commit 3a86771

Browse files
committed
Followup cec5bde : Add tests for expression compiler
1 parent 90d7a7a commit 3a86771

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

tests/src/python/providertestbase.py

+26-15
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
from qgis.core import QgsRectangle, QgsFeatureRequest, QgsGeometry, NULL
1616

1717
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+
1822
'''
1923
This is a collection of tests for vector data providers and kept generic.
2024
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):
2731
'''
2832
def runGetFeatureTests(self, provider):
2933
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+
4355

4456
def testGetFeaturesUncompiled(self):
4557
try:
@@ -77,8 +89,7 @@ def testExtent(self):
7789

7890
def testUnique(self):
7991
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)))
8293

8394
def testFeatureCount(self):
8495
assert self.provider.featureCount() == 5

0 commit comments

Comments
 (0)