@@ -545,6 +545,84 @@ class TestQgsExpression: public QObject
545
545
QCOMPARE ( vPerimeter.toDouble (), 20 . );
546
546
}
547
547
548
+ void eval_geometry_constructor_data ()
549
+ {
550
+ QTest::addColumn<QString>( " string" );
551
+ QTest::addColumn<void *>( " geomptr" );
552
+ QTest::addColumn<bool >( " evalError" );
553
+
554
+ QgsPoint point ( 123 , 456 );
555
+ QgsPolyline line;
556
+ line << QgsPoint ( 1 , 1 ) << QgsPoint ( 4 , 2 ) << QgsPoint ( 3 , 1 );
557
+
558
+ QgsPolyline polyline, polygon_ring;
559
+ polyline << QgsPoint ( 0 , 0 ) << QgsPoint ( 10 , 0 );
560
+ polygon_ring << QgsPoint ( 1 , 1 ) << QgsPoint ( 6 , 1 ) << QgsPoint ( 6 , 6 ) << QgsPoint ( 1 , 6 ) << QgsPoint ( 1 , 1 );
561
+ QgsPolygon polygon;
562
+ polygon << polygon_ring;
563
+
564
+ QTest::newRow ( " geomFromWKT Point" ) << " geomFromWKT('" +QgsGeometry::fromPoint ( point )->exportToWkt ()+" ')" << ( void * ) QgsGeometry::fromPoint ( point ) << false ;
565
+ QTest::newRow ( " geomFromWKT Line" ) << " geomFromWKT('" +QgsGeometry::fromPolyline ( line )->exportToWkt ()+" ')" << ( void * ) QgsGeometry::fromPolyline ( line ) << false ;
566
+ QTest::newRow ( " geomFromWKT Polyline" ) << " geomFromWKT('" +QgsGeometry::fromPolyline ( polyline )->exportToWkt ()+" ')" << ( void * ) QgsGeometry::fromPolyline ( polyline ) << false ;
567
+ QTest::newRow ( " geomFromWKT Polygon" ) << " geomFromWKT('" +QgsGeometry::fromPolygon ( polygon )->exportToWkt ()+" ')" << ( void * ) QgsGeometry::fromPolygon ( polygon ) << false ;
568
+ }
569
+
570
+ void eval_geometry_constructor ()
571
+ {
572
+ QFETCH ( QString, string );
573
+ QFETCH ( void *, geomptr );
574
+ QFETCH ( bool , evalError );
575
+
576
+ QgsGeometry* geom = ( QgsGeometry* ) geomptr;
577
+
578
+ QgsFeature f;
579
+ f.setGeometry ( geom );
580
+
581
+ QgsExpression exp ( string );
582
+ QCOMPARE ( exp.hasParserError (), false );
583
+ QCOMPARE ( exp.needsGeometry (), false );
584
+ QVariant out = exp.evaluate ( &f );
585
+ QCOMPARE ( exp.hasEvalError (), evalError );
586
+
587
+ QCOMPARE ( out.canConvert <QgsGeometry*>(), true );
588
+ QgsGeometry* outGeom = out.value <QgsGeometry*>();
589
+ QCOMPARE ( geom->equals ( outGeom ), true );
590
+ }
591
+
592
+ void eval_spatial_operator_data ()
593
+ {
594
+ QTest::addColumn<QString>( " string" );
595
+ QTest::addColumn<void *>( " geomptr" );
596
+ QTest::addColumn<bool >( " evalError" );
597
+ QTest::addColumn<QVariant>( " result" );
598
+
599
+ QgsPoint point ( 0 , 0 );
600
+ QTest::newRow ( " No Intersects" ) << " intersects( $geometry, geomFromWKT('LINESTRING ( 2 0, 0 2 )') )" << ( void * ) QgsGeometry::fromPoint ( point ) << false << QVariant ( 0 );
601
+ QTest::newRow ( " Intersects" ) << " intersects( $geometry, geomFromWKT('LINESTRING ( 0 0, 0 2 )') )" << ( void * ) QgsGeometry::fromPoint ( point ) << false << QVariant ( 1 );
602
+ QTest::newRow ( " No Disjoint" ) << " disjoint( $geometry, geomFromWKT('LINESTRING ( 0 0, 0 2 )') )" << ( void * ) QgsGeometry::fromPoint ( point ) << false << QVariant ( 0 );
603
+ QTest::newRow ( " Disjoint" ) << " disjoint( $geometry, geomFromWKT('LINESTRING ( 2 0, 0 2 )') )" << ( void * ) QgsGeometry::fromPoint ( point ) << false << QVariant ( 1 );
604
+ }
605
+
606
+ void eval_spatial_operator ()
607
+ {
608
+ QFETCH ( QString, string );
609
+ QFETCH ( void *, geomptr );
610
+ QFETCH ( bool , evalError );
611
+ QFETCH ( QVariant, result );
612
+
613
+ QgsGeometry* geom = ( QgsGeometry* ) geomptr;
614
+
615
+ QgsFeature f;
616
+ f.setGeometry ( geom );
617
+
618
+ QgsExpression exp ( string );
619
+ QCOMPARE ( exp.hasParserError (), false );
620
+ QCOMPARE ( exp.needsGeometry (), true );
621
+ QVariant out = exp.evaluate ( &f );
622
+ QCOMPARE ( exp.hasEvalError (), evalError );
623
+ QCOMPARE ( out.toInt (), result.toInt () );
624
+ }
625
+
548
626
void eval_special_columns ()
549
627
{
550
628
QTest::addColumn<QString>( " string" );
0 commit comments