diff --git a/tests/src/core/testqgsogcutils.cpp b/tests/src/core/testqgsogcutils.cpp index 0cf41512338..80c21e17c87 100644 --- a/tests/src/core/testqgsogcutils.cpp +++ b/tests/src/core/testqgsogcutils.cpp @@ -56,6 +56,9 @@ class TestQgsOgcUtils : public QObject void testExpressionFromOgcFilter(); void testExpressionFromOgcFilter_data(); + void testExpressionFromOgcFilterWithLongLong(); + void testExpressionFromOgcFilterWithLongLong_data(); + void testExpressionFromOgcFilterWFS20(); void testExpressionFromOgcFilterWFS20_data(); @@ -464,6 +467,56 @@ void TestQgsOgcUtils::testExpressionFromOgcFilter() QCOMPARE( dumpText, expr->expression() ); } +void TestQgsOgcUtils::testExpressionFromOgcFilterWithLongLong_data() +{ + QTest::addColumn( "xmlText" ); + QTest::addColumn( "dumpText" ); + QTest::newRow( "Literal less than" ) << QString( + "" + "" + "id" + "1" + "" + "" + "id" + "3" + "" + "" ) + << QStringLiteral( "id > 1 AND id < 3" ); +} + +void TestQgsOgcUtils::testExpressionFromOgcFilterWithLongLong() +{ + QFETCH( QString, xmlText ); + QFETCH( QString, dumpText ); + + QDomDocument doc; + + QVERIFY( doc.setContent( xmlText, true ) ); + QDomElement rootElem = doc.documentElement(); + + QgsVectorLayer layer( "Point?crs=epsg:4326", "temp", "memory" ); + + QgsField longlongField( QStringLiteral( "id" ), QVariant::LongLong ); + + QList fields; + fields.append( longlongField ); + layer.dataProvider()->addAttributes( fields ); + layer.updateFields(); + + std::shared_ptr expr( QgsOgcUtils::expressionFromOgcFilter( rootElem, &layer ) ); + QVERIFY( expr.get() ); + + qDebug( "OGC XML : %s", xmlText.toAscii().data() ); + qDebug( "EXPR-DUMP: %s", expr->expression().toAscii().data() ); + + if ( expr->hasParserError() ) + qDebug( "ERROR: %s ", expr->parserErrorString().toAscii().data() ); + QVERIFY( !expr->hasParserError() ); + + QCOMPARE( dumpText, expr->expression() ); +} + void TestQgsOgcUtils::testExpressionToOgcFilter() { QFETCH( QString, exprText );