@@ -222,8 +222,47 @@ def runGetFeatureTests(self, provider):
222222 # against numeric literals
223223 self .assert_query (provider , 'num_char IN (2, 4, 5)' , [2 , 4 , 5 ])
224224
225+ #function
226+ self .assert_query (provider , 'sqrt(pk) >= 2' , [4 , 5 ])
227+ self .assert_query (provider , 'radians(cnt) < 2' , [1 , 5 ])
228+ self .assert_query (provider , 'degrees(pk) <= 200' , [1 , 2 , 3 ])
229+ self .assert_query (provider , 'abs(cnt) <= 200' , [1 , 2 , 5 ])
230+ self .assert_query (provider , 'cos(pk) < 0' , [2 , 3 , 4 ])
231+ self .assert_query (provider , 'sin(pk) < 0' , [4 , 5 ])
232+ self .assert_query (provider , 'tan(pk) < 0' , [2 , 3 , 5 ])
233+ self .assert_query (provider , 'acos(-1) < pk' , [4 , 5 ])
234+ self .assert_query (provider , 'asin(1) < pk' , [2 , 3 , 4 , 5 ])
235+ self .assert_query (provider , 'atan(3.14) < pk' , [2 , 3 , 4 , 5 ])
236+ self .assert_query (provider , 'atan2(3.14, pk) < 1' , [3 , 4 , 5 ])
237+ self .assert_query (provider , 'exp(pk) < 10' , [1 , 2 ])
238+ self .assert_query (provider , 'ln(pk) <= 1' , [1 , 2 ])
239+ self .assert_query (provider , 'log(3, pk) <= 1' , [1 , 2 , 3 ])
240+ self .assert_query (provider , 'log10(pk) < 0.5' , [1 , 2 , 3 ])
241+ self .assert_query (provider , 'round(3.14) <= pk' , [3 , 4 , 5 ])
242+ self .assert_query (provider , 'floor(3.14) <= pk' , [3 , 4 , 5 ])
243+ self .assert_query (provider , 'ceil(3.14) <= pk' , [4 , 5 ])
244+ self .assert_query (provider , 'pk < pi()' , [1 , 2 , 3 ])
245+
246+ self .assert_query (provider , 'round(cnt / 66.67) <= 2' , [1 , 5 ])
247+ self .assert_query (provider , 'floor(cnt / 66.67) <= 2' , [1 , 2 , 5 ])
248+ self .assert_query (provider , 'ceil(cnt / 66.67) <= 2' , [1 , 5 ])
249+ self .assert_query (provider , 'pk < pi() / 2' , [1 ])
250+
225251 # geometry
252+ # azimuth and touches tests are deactivated because they do not pass for WFS provider
253+ #self.assert_query(provider, 'azimuth($geometry,geom_from_wkt( \'Point (-70 70)\')) < pi()', [1, 5])
254+ self .assert_query (provider , 'x($geometry) < -70' , [1 , 5 ])
255+ self .assert_query (provider , 'y($geometry) > 70' , [2 , 4 , 5 ])
256+ self .assert_query (provider , 'xmin($geometry) < -70' , [1 , 5 ])
257+ self .assert_query (provider , 'ymin($geometry) > 70' , [2 , 4 , 5 ])
258+ self .assert_query (provider , 'xmax($geometry) < -70' , [1 , 5 ])
259+ self .assert_query (provider , 'ymax($geometry) > 70' , [2 , 4 , 5 ])
260+ self .assert_query (provider , 'disjoint($geometry,geom_from_wkt( \' Polygon ((-72.2 66.1, -65.2 66.1, -65.2 72.0, -72.2 72.0, -72.2 66.1))\' ))' , [4 , 5 ])
226261 self .assert_query (provider , 'intersects($geometry,geom_from_wkt( \' Polygon ((-72.2 66.1, -65.2 66.1, -65.2 72.0, -72.2 72.0, -72.2 66.1))\' ))' , [1 , 2 ])
262+ #self.assert_query(provider, 'touches($geometry,geom_from_wkt( \'Polygon ((-70.332 66.33, -65.32 66.33, -65.32 78.3, -70.332 78.3, -70.332 66.33))\'))', [1, 4])
263+ self .assert_query (provider , 'contains(geom_from_wkt( \' Polygon ((-72.2 66.1, -65.2 66.1, -65.2 72.0, -72.2 72.0, -72.2 66.1))\' ),$geometry)' , [1 , 2 ])
264+ self .assert_query (provider , 'distance($geometry,geom_from_wkt( \' Point (-70 70)\' )) > 7' , [4 , 5 ])
265+ self .assert_query (provider , 'intersects($geometry,geom_from_gml( \' <gml:Polygon srsName="EPSG:4326"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>-72.2,66.1 -65.2,66.1 -65.2,72.0 -72.2,72.0 -72.2,66.1</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon>\' ))' , [1 , 2 ])
227266
228267 # combination of an uncompilable expression and limit
229268 feature = next (self .vl .getFeatures ('pk=4' ))
@@ -240,19 +279,46 @@ def runGetFeatureTests(self, provider):
240279 values = [f ['pk' ] for f in self .vl .getFeatures (request )]
241280 self .assertEqual (values , [4 ])
242281
282+ def runPolyGetFeatureTests (self , provider ):
283+ assert len ([f for f in provider .getFeatures ()]) == 4
284+
285+ # geometry
286+ self .assert_query (provider , 'x($geometry) < -70' , [1 ])
287+ self .assert_query (provider , 'y($geometry) > 79' , [1 , 2 ])
288+ self .assert_query (provider , 'xmin($geometry) < -70' , [1 , 3 ])
289+ self .assert_query (provider , 'ymin($geometry) < 76' , [3 ])
290+ self .assert_query (provider , 'xmax($geometry) > -68' , [2 , 3 ])
291+ self .assert_query (provider , 'ymax($geometry) > 80' , [1 , 2 ])
292+ self .assert_query (provider , 'area($geometry) > 10' , [1 ])
293+ self .assert_query (provider , 'perimeter($geometry) < 12' , [2 , 3 ])
294+ self .assert_query (provider , 'relate($geometry,geom_from_wkt( \' Polygon ((-68.2 82.1, -66.95 82.1, -66.95 79.05, -68.2 79.05, -68.2 82.1))\' )) = \' FF2FF1212\' ' , [1 , 3 ])
295+ self .assert_query (provider , 'relate($geometry,geom_from_wkt( \' Polygon ((-68.2 82.1, -66.95 82.1, -66.95 79.05, -68.2 79.05, -68.2 82.1))\' ), \' ****F****\' )' , [1 , 3 ])
296+ self .assert_query (provider , 'crosses($geometry,geom_from_wkt( \' Linestring (-68.2 82.1, -66.95 82.1, -66.95 79.05)\' ))' , [2 ])
297+ self .assert_query (provider , 'overlaps($geometry,geom_from_wkt( \' Polygon ((-68.2 82.1, -66.95 82.1, -66.95 79.05, -68.2 79.05, -68.2 82.1))\' ))' , [2 ])
298+ self .assert_query (provider , 'within($geometry,geom_from_wkt( \' Polygon ((-75.1 76.1, -75.1 81.6, -68.8 81.6, -68.8 76.1, -75.1 76.1))\' ))' , [1 ])
299+ self .assert_query (provider , 'overlaps(translate($geometry,-1,-1),geom_from_wkt( \' Polygon ((-75.1 76.1, -75.1 81.6, -68.8 81.6, -68.8 76.1, -75.1 76.1))\' ))' , [1 ])
300+ self .assert_query (provider , 'overlaps(buffer($geometry,1),geom_from_wkt( \' Polygon ((-75.1 76.1, -75.1 81.6, -68.8 81.6, -68.8 76.1, -75.1 76.1))\' ))' , [1 , 3 ])
301+ self .assert_query (provider , 'intersects(centroid($geometry),geom_from_wkt( \' Polygon ((-74.4 78.2, -74.4 79.1, -66.8 79.1, -66.8 78.2, -74.4 78.2))\' ))' , [2 ])
302+ self .assert_query (provider , 'intersects(point_on_surface($geometry),geom_from_wkt( \' Polygon ((-74.4 78.2, -74.4 79.1, -66.8 79.1, -66.8 78.2, -74.4 78.2))\' ))' , [1 , 2 ])
303+ self .assert_query (provider , 'distance($geometry,geom_from_wkt( \' Point (-70 70)\' )) > 7' , [1 , 2 ])
304+
243305 def testGetFeaturesUncompiled (self ):
244306 self .compiled = False
245307 try :
246308 self .disableCompiler ()
247309 except AttributeError :
248310 pass
249311 self .runGetFeatureTests (self .provider )
312+ if hasattr (self , 'poly_provider' ):
313+ self .runPolyGetFeatureTests (self .poly_provider )
250314
251- def testGetFeaturesCompiled (self ):
315+ def testPolyGetFeaturesCompiled (self ):
252316 try :
253317 self .enableCompiler ()
254318 self .compiled = True
255319 self .runGetFeatureTests (self .provider )
320+ if hasattr (self , 'poly_provider' ):
321+ self .runPolyGetFeatureTests (self .poly_provider )
256322 except AttributeError :
257323 print ('Provider does not support compiling' )
258324
0 commit comments