@@ -217,6 +217,7 @@ class TestQgsProcessing: public QObject
217217 void parameterOutputVectorLayer ();
218218 void checkParamValues ();
219219 void combineLayerExtent ();
220+ void processingFeatureSink ();
220221
221222 private:
222223
@@ -1062,15 +1063,15 @@ void TestQgsProcessing::parameters()
10621063 // make sure layer was loaded
10631064 QVERIFY ( !context.temporaryLayerStore ()->mapLayers ().isEmpty () );
10641065
1065- // as sink
1066- QString encoding;
1066+ // parameters as sinks
1067+
10671068 QgsWkbTypes::Type wkbType = QgsWkbTypes::PolygonM;
1068- QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem ( " epsg:3111" );
1069+ QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem ( QStringLiteral ( " epsg:3111" ) );
10691070 QString destId;
10701071 def->setName ( QStringLiteral ( " string" ) );
10711072 params.insert ( QStringLiteral ( " string" ), QStringLiteral ( " memory:mem" ) );
10721073 std::unique_ptr< QgsFeatureSink > sink;
1073- sink.reset ( QgsProcessingParameters::parameterAsSink ( def, params, encoding, fields, wkbType, crs, context, destId ) );
1074+ sink.reset ( QgsProcessingParameters::parameterAsSink ( def, params, fields, wkbType, crs, context, destId ) );
10741075 QVERIFY ( sink.get () );
10751076 QgsVectorLayer *layer = qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::mapLayerFromString ( destId, context ) );
10761077 QVERIFY ( layer );
@@ -1083,8 +1084,8 @@ void TestQgsProcessing::parameters()
10831084 // property defined sink destination
10841085 params.insert ( QStringLiteral ( " prop" ), QgsProperty::fromExpression ( " 'memory:mem2'" ) );
10851086 def->setName ( QStringLiteral ( " prop" ) );
1086- crs = QgsCoordinateReferenceSystem ( " epsg:3113" );
1087- sink.reset ( QgsProcessingParameters::parameterAsSink ( def, params, encoding, fields, wkbType, crs, context, destId ) );
1087+ crs = QgsCoordinateReferenceSystem ( QStringLiteral ( " epsg:3113" ) );
1088+ sink.reset ( QgsProcessingParameters::parameterAsSink ( def, params, fields, wkbType, crs, context, destId ) );
10881089 QVERIFY ( sink.get () );
10891090 layer = qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::mapLayerFromString ( destId, context ) );
10901091 QVERIFY ( layer );
@@ -1094,6 +1095,27 @@ void TestQgsProcessing::parameters()
10941095 QCOMPARE ( layer->wkbType (), wkbType );
10951096 QCOMPARE ( layer->crs (), crs );
10961097
1098+ // QgsProcessingFeatureSink as parameter
1099+ QgsProcessingFeatureSink fs ( QStringLiteral ( " test.shp" ) );
1100+ fs.loadIntoProject = true ;
1101+ QVERIFY ( context.layersToLoadOnCompletion ().isEmpty () );
1102+ params.insert ( QStringLiteral ( " fs" ), QVariant::fromValue ( fs ) );
1103+ def->setName ( QStringLiteral ( " fs" ) );
1104+ crs = QgsCoordinateReferenceSystem ( QStringLiteral ( " epsg:28356" ) );
1105+ sink.reset ( QgsProcessingParameters::parameterAsSink ( def, params, fields, wkbType, crs, context, destId ) );
1106+ QVERIFY ( sink.get () );
1107+ QgsVectorFileWriter *writer = dynamic_cast < QgsVectorFileWriter *>( sink.get () );
1108+ QVERIFY ( writer );
1109+ layer = qobject_cast< QgsVectorLayer *>( QgsProcessingUtils::mapLayerFromString ( destId, context ) );
1110+ QVERIFY ( layer );
1111+ QVERIFY ( layer->isValid () );
1112+ QCOMPARE ( layer->wkbType (), wkbType );
1113+ QCOMPARE ( layer->crs (), crs );
1114+
1115+ // make sure layer was automatically added to list to load on completion
1116+ QCOMPARE ( context.layersToLoadOnCompletion ().size (), 1 );
1117+ QCOMPARE ( context.layersToLoadOnCompletion ().at ( 0 ), destId );
1118+
10971119 delete def;
10981120}
10991121
@@ -2249,5 +2271,21 @@ void TestQgsProcessing::combineLayerExtent()
22492271 QGSCOMPARENEAR ( ext.yMaximum (), 3536664 , 10 );
22502272}
22512273
2274+ void TestQgsProcessing::processingFeatureSink ()
2275+ {
2276+ QVariant sink ( QStringLiteral ( " test.shp" ) );
2277+ QgsProcessingFeatureSink fs ( sink, true );
2278+ QCOMPARE ( fs.sink , sink );
2279+ QVERIFY ( fs.loadIntoProject );
2280+
2281+ // test storing QgsProcessingFeatureSink in variant and retrieving
2282+ QVariant fsInVariant = QVariant::fromValue ( fs );
2283+ QVERIFY ( fsInVariant.isValid () );
2284+
2285+ QgsProcessingFeatureSink fromVar = qvariant_cast<QgsProcessingFeatureSink>( fsInVariant );
2286+ QCOMPARE ( fromVar.sink , sink );
2287+ QVERIFY ( fromVar.loadIntoProject );
2288+ }
2289+
22522290QGSTEST_MAIN ( TestQgsProcessing )
22532291#include " testqgsprocessing.moc"
0 commit comments