@@ -104,6 +104,7 @@ class TestQgsProcessing: public QObject
104
104
void removeProvider ();
105
105
void compatibleLayers ();
106
106
void normalizeLayerSource ();
107
+ void mapLayers ();
107
108
void mapLayerFromString ();
108
109
void algorithm ();
109
110
void features ();
@@ -331,7 +332,7 @@ void TestQgsProcessing::normalizeLayerSource()
331
332
QCOMPARE ( QgsProcessingUtils::normalizeLayerSource ( " data\\ layers \" new\"\\ test.shp" ), QString ( " data/layers 'new'/test.shp" ) );
332
333
}
333
334
334
- void TestQgsProcessing::mapLayerFromString ()
335
+ void TestQgsProcessing::mapLayers ()
335
336
{
336
337
// test mapLayerFromProject
337
338
@@ -364,7 +365,7 @@ void TestQgsProcessing::mapLayerFromString()
364
365
QCOMPARE ( QgsProcessingUtils::mapLayerFromProject ( r1->id (), &p ), r1 );
365
366
QCOMPARE ( QgsProcessingUtils::mapLayerFromProject ( v1->id (), &p ), v1 );
366
367
367
- // test mapLayerFromString
368
+ // test loadMapLayerFromString
368
369
QgsMapLayer *l = QgsProcessingUtils::loadMapLayerFromString ( raster2 );
369
370
QVERIFY ( l->isValid () );
370
371
QCOMPARE ( l->type (), QgsMapLayer::RasterLayer );
@@ -379,6 +380,71 @@ void TestQgsProcessing::mapLayerFromString()
379
380
delete l;
380
381
}
381
382
383
+ void TestQgsProcessing::mapLayerFromString ()
384
+ {
385
+ // test mapLayerFromString
386
+
387
+ QgsProcessingContext c;
388
+ QgsProject p;
389
+
390
+ // add a bunch of layers to a project
391
+ QString testDataDir = QStringLiteral ( TEST_DATA_DIR ) + ' /' ; // defined in CmakeLists.txt
392
+ QString raster1 = testDataDir + " tenbytenraster.asc" ;
393
+ QString raster2 = testDataDir + " landsat.tif" ;
394
+ QFileInfo fi1 ( raster1 );
395
+ QgsRasterLayer *r1 = new QgsRasterLayer ( fi1.filePath (), " R1" );
396
+ QVERIFY ( r1->isValid () );
397
+ QFileInfo fi2 ( raster2 );
398
+ QgsRasterLayer *r2 = new QgsRasterLayer ( fi2.filePath (), " ar2" );
399
+ QVERIFY ( r2->isValid () );
400
+
401
+ QgsVectorLayer *v1 = new QgsVectorLayer ( " Polygon" , " V4" , " memory" );
402
+ QgsVectorLayer *v2 = new QgsVectorLayer ( " Point" , " v1" , " memory" );
403
+ p.addMapLayers ( QList<QgsMapLayer *>() << r1 << r2 << v1 << v2 );
404
+
405
+ // no project set yet
406
+ QVERIFY ( ! QgsProcessingUtils::mapLayerFromString ( QString (), c ) );
407
+ QVERIFY ( ! QgsProcessingUtils::mapLayerFromString ( QStringLiteral ( " v1" ), c ) );
408
+
409
+ c.setProject ( &p );
410
+
411
+ // layers from current project
412
+ QVERIFY ( ! QgsProcessingUtils::mapLayerFromString ( QString (), c ) );
413
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( raster1, c ), r1 );
414
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( raster2, c ), r2 );
415
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( " R1" , c ), r1 );
416
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( " ar2" , c ), r2 );
417
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( " V4" , c ), v1 );
418
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( " v1" , c ), v2 );
419
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( r1->id (), c ), r1 );
420
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( v1->id (), c ), v1 );
421
+
422
+ // check that layers in context temporary store are used
423
+ QgsVectorLayer *v5 = new QgsVectorLayer ( " Polygon" , " V5" , " memory" );
424
+ QgsVectorLayer *v6 = new QgsVectorLayer ( " Point" , " v6" , " memory" );
425
+ c.temporaryLayerStore ().addMapLayers ( QList<QgsMapLayer *>() << v5 << v6 );
426
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( " V5" , c ), v5 );
427
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( " v6" , c ), v6 );
428
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( v5->id (), c ), v5 );
429
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( v6->id (), c ), v6 );
430
+ QVERIFY ( ! QgsProcessingUtils::mapLayerFromString ( " aaaaa" , c ) );
431
+
432
+ // if specified, check that layers can be loaded
433
+ QVERIFY ( ! QgsProcessingUtils::mapLayerFromString ( " aaaaa" , c ) );
434
+ QString newRaster = testDataDir + " requires_warped_vrt.tif" ;
435
+ // don't allow loading
436
+ QVERIFY ( ! QgsProcessingUtils::mapLayerFromString ( newRaster, c, false ) );
437
+ // allow loading
438
+ QgsMapLayer *loadedLayer = QgsProcessingUtils::mapLayerFromString ( newRaster, c, true );
439
+ QVERIFY ( loadedLayer->isValid () );
440
+ QCOMPARE ( loadedLayer->type (), QgsMapLayer::RasterLayer );
441
+ // should now be in temporary store
442
+ QCOMPARE ( c.temporaryLayerStore ().mapLayer ( loadedLayer->id () ), loadedLayer );
443
+
444
+ // since it's now in temporary store, should be accessible even if we deny loading new layers
445
+ QCOMPARE ( QgsProcessingUtils::mapLayerFromString ( newRaster, c, false ), loadedLayer );
446
+ }
447
+
382
448
void TestQgsProcessing::algorithm ()
383
449
{
384
450
DummyAlgorithm alg ( " test" );
0 commit comments