@@ -61,6 +61,9 @@ class TestQgsOgcUtils : public QObject
61
61
void testExpressionFromOgcFilter ();
62
62
void testExpressionFromOgcFilter_data ();
63
63
64
+ void testExpressionFromOgcFilterWFS20 ();
65
+ void testExpressionFromOgcFilterWFS20_data ();
66
+
64
67
void testExpressionToOgcFilter ();
65
68
void testExpressionToOgcFilter_data ();
66
69
@@ -264,6 +267,63 @@ void TestQgsOgcUtils::testGeometryToGML()
264
267
doc.removeChild ( elemLine );
265
268
}
266
269
270
+ void TestQgsOgcUtils::testExpressionFromOgcFilterWFS20_data ()
271
+ {
272
+ QTest::addColumn<QString>( " xmlText" );
273
+ QTest::addColumn<QString>( " dumpText" );
274
+
275
+ QTest::newRow ( " =" ) << QString (
276
+ " <fes:Filter xmlns:fes=\" http://www.opengis.net/fes/2.0\" >"
277
+ " <fes:PropertyIsEqualTo>"
278
+ " <fes:ValueReference>NAME</fes:ValueReference>"
279
+ " <fes:Literal>New York</fes:Literal>"
280
+ " </fes:PropertyIsEqualTo></fes:Filter>" )
281
+ << QStringLiteral ( " NAME = 'New York'" );
282
+
283
+ QTest::newRow ( " bbox coordinates" ) << QString (
284
+ " <Filter>"
285
+ " <BBOX><ValueReference>Name>NAME</ValueReference><gml:Box srsName='foo'>"
286
+ " <gml:coordinates>135.2239,34.4879 135.8578,34.8471</gml:coordinates></gml:Box></BBOX>"
287
+ " </Filter>" )
288
+ << QStringLiteral ( " intersects_bbox($geometry, geom_from_gml('<Box srsName=\" foo\" ><coordinates>135.2239,34.4879 135.8578,34.8471</coordinates></Box>'))" );
289
+
290
+ QTest::newRow ( " bbox corner" )
291
+ << QString (
292
+ " <fes:Filter>"
293
+ " <fes:BBOX>"
294
+ " <fes:ValueReference>my_geometry_name</fes:ValueReference>"
295
+ " <gml:Envelope>"
296
+ " <gml:lowerCorner>49 2</gml:lowerCorner>"
297
+ " <gml:upperCorner>50 3</gml:upperCorner>"
298
+ " </gml:Envelope>"
299
+ " </fes:BBOX>"
300
+ " </fes:Filter>" )
301
+ << QStringLiteral ( " intersects_bbox($geometry, geom_from_gml('<Envelope><lowerCorner>49 2</lowerCorner><upperCorner>50 3</upperCorner></Envelope>'))" );
302
+ }
303
+
304
+ void TestQgsOgcUtils::testExpressionFromOgcFilterWFS20 ()
305
+ {
306
+ QFETCH ( QString, xmlText );
307
+ QFETCH ( QString, dumpText );
308
+
309
+ QDomDocument doc;
310
+ QVERIFY ( doc.setContent ( xmlText, true ) );
311
+ QDomElement rootElem = doc.documentElement ();
312
+
313
+ QgsVectorLayer layer ( " Point?crs=epsg:4326&field=LITERAL:string(20)" , " temp" , " memory" );
314
+
315
+ std::shared_ptr<QgsExpression> expr ( QgsOgcUtils::expressionFromOgcFilter ( rootElem, QgsOgcUtils::FILTER_FES_2_0, &layer ) );
316
+ QVERIFY ( expr.get () );
317
+
318
+ qDebug ( " OGC XML : %s" , xmlText.toAscii ().data () );
319
+ qDebug ( " EXPR-DUMP: %s" , expr->expression ().toAscii ().data () );
320
+
321
+ if ( expr->hasParserError () )
322
+ qDebug ( " ERROR: %s " , expr->parserErrorString ().toAscii ().data () );
323
+ QVERIFY ( !expr->hasParserError () );
324
+
325
+ QCOMPARE ( dumpText, expr->expression () );
326
+ }
267
327
268
328
void TestQgsOgcUtils::testExpressionFromOgcFilter_data ()
269
329
{
0 commit comments