@@ -45,6 +45,7 @@ class TestQgsMapSettings: public QObject
45
45
void testMapLayerListUtils ();
46
46
void testXmlReadWrite ();
47
47
void testSetLayers ();
48
+ void testExpressionContext ();
48
49
49
50
private:
50
51
QString toString ( const QPolygonF &p, int decimalPlaces = 2 ) const ;
@@ -367,5 +368,71 @@ void TestQgsMapSettings::testSetLayers()
367
368
QCOMPARE ( ms.layers (), QList< QgsMapLayer * >() << vlA.get () << vlB.get () );
368
369
}
369
370
371
+ void TestQgsMapSettings::testExpressionContext ()
372
+ {
373
+ QgsMapSettings ms;
374
+ QgsExpressionContext c;
375
+ QVariant r;
376
+
377
+ ms.setOutputSize ( QSize ( 5000 , 5000 ) );
378
+ ms.setExtent ( QgsRectangle ( -1 , 0 , 2 , 2 ) );
379
+ ms.setDestinationCrs ( QgsCoordinateReferenceSystem ( QStringLiteral ( " EPSG:4326" ) ) );
380
+ ms.setRotation ( -32 );
381
+ c << QgsExpressionContextUtils::mapSettingsScope ( ms );
382
+
383
+ QgsExpression e ( QStringLiteral ( " @map_scale" ) );
384
+ r = e.evaluate ( &c );
385
+ QGSCOMPARENEAR ( r.toDouble (), 247990 , 10 );
386
+
387
+ // The old $scale function should silently map to @map_scale, so that older projects work without change
388
+ e = QgsExpression ( QStringLiteral ( " $scale" ) );
389
+ r = e.evaluate ( &c );
390
+ QGSCOMPARENEAR ( r.toDouble (), 247990 , 10 );
391
+
392
+ // no map settings scope -- $scale is meaningless
393
+ e = QgsExpression ( QStringLiteral ( " $scale" ) );
394
+ r = e.evaluate ( nullptr );
395
+ QVERIFY ( !r.isValid () );
396
+
397
+ e = QgsExpression ( QStringLiteral ( " @map_id" ) );
398
+ r = e.evaluate ( &c );
399
+ QCOMPARE ( r.toString (), QStringLiteral ( " canvas" ) );
400
+
401
+ e = QgsExpression ( QStringLiteral ( " @map_rotation" ) );
402
+ r = e.evaluate ( &c );
403
+ QCOMPARE ( r.toDouble (), -32.0 );
404
+
405
+ ms.setRotation ( 0 );
406
+ c << QgsExpressionContextUtils::mapSettingsScope ( ms );
407
+
408
+ e = QgsExpression ( QStringLiteral ( " geom_to_wkt( @map_extent )" ) );
409
+ r = e.evaluate ( &c );
410
+ QCOMPARE ( r.toString (), QStringLiteral ( " Polygon ((-1 -0.5, 2 -0.5, 2 2.5, -1 2.5, -1 -0.5))" ) );
411
+
412
+ e = QgsExpression ( QStringLiteral ( " @map_extent_width" ) );
413
+ r = e.evaluate ( &c );
414
+ QCOMPARE ( r.toDouble (), 3 );
415
+
416
+ e = QgsExpression ( QStringLiteral ( " @map_extent_height" ) );
417
+ r = e.evaluate ( &c );
418
+ QCOMPARE ( r.toDouble (), 3 );
419
+
420
+ e = QgsExpression ( QStringLiteral ( " geom_to_wkt( @map_extent_center )" ) );
421
+ r = e.evaluate ( &c );
422
+ QCOMPARE ( r.toString (), QStringLiteral ( " Point (0.5 1)" ) );
423
+
424
+ e = QgsExpression ( QStringLiteral ( " @map_crs" ) );
425
+ r = e.evaluate ( &c );
426
+ QCOMPARE ( r.toString (), QStringLiteral ( " EPSG:4326" ) );
427
+
428
+ e = QgsExpression ( QStringLiteral ( " @map_crs_definition" ) );
429
+ r = e.evaluate ( &c );
430
+ QCOMPARE ( r.toString (), QStringLiteral ( " +proj=longlat +datum=WGS84 +no_defs" ) );
431
+
432
+ e = QgsExpression ( QStringLiteral ( " @map_units" ) );
433
+ r = e.evaluate ( &c );
434
+ QCOMPARE ( r.toString (), QStringLiteral ( " degrees" ) );
435
+ }
436
+
370
437
QGSTEST_MAIN ( TestQgsMapSettings )
371
438
#include " testqgsmapsettings.moc"
0 commit comments