Skip to content

Commit

Permalink
[processing] Fix QStringList values are not accepted as valid values …
Browse files Browse the repository at this point in the history
…for multi field parameters
  • Loading branch information
nyalldawson committed Jan 30, 2020
1 parent 9bcd980 commit abcb8d2
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/core/processing/qgsprocessingparameters.cpp
Expand Up @@ -1524,6 +1524,10 @@ QStringList QgsProcessingParameters::parameterAsFields( const QgsProcessingParam
for ( const QVariant &var : constToList )
resultStringList << var.toString();
}
else if ( val.type() == QVariant::StringList )
{
resultStringList = val.toStringList();
}
else
resultStringList.append( val.toString().split( ';' ) );
}
Expand All @@ -1540,6 +1544,10 @@ QStringList QgsProcessingParameters::parameterAsFields( const QgsProcessingParam
for ( const QVariant &var : constToList )
resultStringList << var.toString();
}
else if ( definition->defaultValue().type() == QVariant::StringList )
{
resultStringList = definition->defaultValue().toStringList();
}
else
resultStringList.append( definition->defaultValue().toString().split( ';' ) );
}
Expand Down
12 changes: 12 additions & 0 deletions tests/src/analysis/testqgsprocessing.cpp
Expand Up @@ -4913,6 +4913,18 @@ void TestQgsProcessing::parameterField()
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
QCOMPARE( fields, QStringList() << "def" );

// optional with string list default
def.reset( new QgsProcessingParameterField( "optional", QString(), QStringList() << QStringLiteral( "def" ) << QStringLiteral( "abc" ), QString(), QgsProcessingParameterField::Any, true, true ) );
QVERIFY( def->checkValueIsAcceptable( QStringList() << "a" << "b" ) );
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
QCOMPARE( fields, QStringList() << "def" << "abc" );
params.insert( "optional", QVariantList() << "f" << "h" );
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
QCOMPARE( fields, QStringList() << "f" << "h" );
params.insert( "optional", QStringList() << "g" << "h" );
fields = QgsProcessingParameters::parameterAsFields( def.get(), params, context );
QCOMPARE( fields, QStringList() << "g" << "h" );

// optional, no default
def.reset( new QgsProcessingParameterField( "optional", QString(), QVariant(), QString(), QgsProcessingParameterField::Any, false, true ) );
params.insert( "optional", QVariant() );
Expand Down

0 comments on commit abcb8d2

Please sign in to comment.