mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-28 00:17:30 -05:00
Add missing tests for vector input parameter, add vector out parameter
This commit is contained in:
parent
0da3652257
commit
c685ec2b30
@ -171,6 +171,8 @@ class QgsProcessingParameterDefinition
|
||||
sipType = sipType_QgsProcessingParameterFeatureSource;
|
||||
else if ( sipCpp->type() == "sink" )
|
||||
sipType = sipType_QgsProcessingParameterFeatureSink;
|
||||
else if ( sipCpp->type() == "vectorOut" )
|
||||
sipType = sipType_QgsProcessingParameterVectorOutput;
|
||||
else if ( sipCpp->type() == "rasterOut" )
|
||||
sipType = sipType_QgsProcessingParameterRasterOutput;
|
||||
else if ( sipCpp->type() == "fileOut" )
|
||||
@ -1173,6 +1175,10 @@ class QgsProcessingParameterVectorLayer : QgsProcessingParameterDefinition
|
||||
%End
|
||||
|
||||
virtual QString type() const;
|
||||
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
|
||||
|
||||
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
|
||||
|
||||
|
||||
};
|
||||
|
||||
@ -1355,6 +1361,60 @@ class QgsProcessingParameterFeatureSink : QgsProcessingParameterDefinition
|
||||
virtual bool fromVariantMap( const QVariantMap &map );
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
class QgsProcessingParameterVectorOutput : QgsProcessingParameterDefinition
|
||||
{
|
||||
%Docstring
|
||||
A vector layer output parameter. Consider using the more flexible QgsProcessingParameterFeatureSink wherever
|
||||
possible.
|
||||
.. versionadded:: 3.0
|
||||
%End
|
||||
|
||||
%TypeHeaderCode
|
||||
#include "qgsprocessingparameters.h"
|
||||
%End
|
||||
public:
|
||||
|
||||
QgsProcessingParameterVectorOutput( const QString &name, const QString &description = QString(), QgsProcessingParameterDefinition::LayerType type = QgsProcessingParameterDefinition::TypeVectorAny, const QVariant &defaultValue = QVariant(),
|
||||
bool optional = false );
|
||||
%Docstring
|
||||
Constructor for QgsProcessingParameterVectorOutput.
|
||||
%End
|
||||
|
||||
virtual QString type() const;
|
||||
virtual bool isDestination() const;
|
||||
virtual bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = 0 ) const;
|
||||
|
||||
virtual QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const;
|
||||
|
||||
|
||||
QgsProcessingParameterDefinition::LayerType dataType() const;
|
||||
%Docstring
|
||||
Returns the layer type for layers associated with the parameter.
|
||||
.. seealso:: setDataType()
|
||||
:rtype: QgsProcessingParameterDefinition.LayerType
|
||||
%End
|
||||
|
||||
bool hasGeometry() const;
|
||||
%Docstring
|
||||
Returns true if the layer is likely to include geometries. In cases were presence of geometry
|
||||
cannot be reliably determined in advance, this method will default to returning true.
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
void setDataType( QgsProcessingParameterDefinition::LayerType type );
|
||||
%Docstring
|
||||
Sets the layer ``type`` for the layers associated with the parameter.
|
||||
.. seealso:: dataType()
|
||||
%End
|
||||
|
||||
virtual QVariantMap toVariantMap() const;
|
||||
|
||||
virtual bool fromVariantMap( const QVariantMap &map );
|
||||
|
||||
|
||||
};
|
||||
|
||||
class QgsProcessingParameterRasterOutput : QgsProcessingParameterDefinition
|
||||
|
@ -744,7 +744,7 @@ QgsProcessingParameterDefinition *QgsProcessingParameters::parameterFromVariantM
|
||||
def.reset( new QgsProcessingParameterString( name ) );
|
||||
else if ( type == QStringLiteral( "expression" ) )
|
||||
def.reset( new QgsProcessingParameterExpression( name ) );
|
||||
else if ( type == QStringLiteral( "table" ) )
|
||||
else if ( type == QStringLiteral( "vector" ) )
|
||||
def.reset( new QgsProcessingParameterVectorLayer( name ) );
|
||||
else if ( type == QStringLiteral( "field" ) )
|
||||
def.reset( new QgsProcessingParameterField( name ) );
|
||||
@ -752,6 +752,8 @@ QgsProcessingParameterDefinition *QgsProcessingParameters::parameterFromVariantM
|
||||
def.reset( new QgsProcessingParameterFeatureSource( name ) );
|
||||
else if ( type == QStringLiteral( "sink" ) )
|
||||
def.reset( new QgsProcessingParameterFeatureSink( name ) );
|
||||
else if ( type == QStringLiteral( "vectorOut" ) )
|
||||
def.reset( new QgsProcessingParameterVectorOutput( name ) );
|
||||
else if ( type == QStringLiteral( "rasterOut" ) )
|
||||
def.reset( new QgsProcessingParameterRasterOutput( name ) );
|
||||
else if ( type == QStringLiteral( "fileOut" ) )
|
||||
@ -1737,6 +1739,46 @@ QgsProcessingParameterVectorLayer::QgsProcessingParameterVectorLayer( const QStr
|
||||
|
||||
}
|
||||
|
||||
bool QgsProcessingParameterVectorLayer::checkValueIsAcceptable( const QVariant &var, QgsProcessingContext *context ) const
|
||||
{
|
||||
if ( !var.isValid() )
|
||||
return mFlags & FlagOptional;
|
||||
|
||||
if ( var.canConvert<QgsProperty>() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( qobject_cast< QgsVectorLayer * >( qvariant_cast<QObject *>( var ) ) )
|
||||
return true;
|
||||
|
||||
if ( var.type() != QVariant::String || var.toString().isEmpty() )
|
||||
return mFlags & FlagOptional;
|
||||
|
||||
if ( !context )
|
||||
{
|
||||
// that's as far as we can get without a context
|
||||
return true;
|
||||
}
|
||||
|
||||
// try to load as layer
|
||||
if ( QgsProcessingUtils::mapLayerFromString( var.toString(), *context ) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
QString QgsProcessingParameterVectorLayer::valueAsPythonString( const QVariant &val, QgsProcessingContext &context ) const
|
||||
{
|
||||
if ( val.canConvert<QgsProperty>() )
|
||||
return QStringLiteral( "QgsProperty.fromExpression('%1')" ).arg( val.value< QgsProperty >().asExpression() );
|
||||
|
||||
QVariantMap p;
|
||||
p.insert( name(), val );
|
||||
QgsVectorLayer *layer = QgsProcessingParameters::parameterAsVectorLayer( this, p, context );
|
||||
return layer ? QgsProcessingUtils::normalizeLayerSource( layer->source() ).prepend( '\'' ).append( '\'' ) : QString();
|
||||
}
|
||||
|
||||
QgsProcessingParameterField::QgsProcessingParameterField( const QString &name, const QString &description, const QVariant &defaultValue, const QString &parentLayerParameterName, DataType type, bool allowMultiple, bool optional )
|
||||
: QgsProcessingParameterDefinition( name, description, defaultValue, optional )
|
||||
, mParentLayerParameter( parentLayerParameterName )
|
||||
@ -2208,3 +2250,100 @@ bool QgsProcessingParameterFolderOutput::checkValueIsAcceptable( const QVariant
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QgsProcessingParameterVectorOutput::QgsProcessingParameterVectorOutput( const QString &name, const QString &description, QgsProcessingParameterDefinition::LayerType type, const QVariant &defaultValue, bool optional )
|
||||
: QgsProcessingParameterDefinition( name, description, defaultValue, optional )
|
||||
, mDataType( type )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool QgsProcessingParameterVectorOutput::checkValueIsAcceptable( const QVariant &input, QgsProcessingContext * ) const
|
||||
{
|
||||
QVariant var = input;
|
||||
if ( !var.isValid() )
|
||||
return mFlags & FlagOptional;
|
||||
|
||||
if ( var.canConvert<QgsProcessingOutputLayerDefinition>() )
|
||||
{
|
||||
QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( var );
|
||||
var = fromVar.sink;
|
||||
}
|
||||
|
||||
if ( var.canConvert<QgsProperty>() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( var.type() != QVariant::String )
|
||||
return false;
|
||||
|
||||
if ( var.toString().isEmpty() )
|
||||
return mFlags & FlagOptional;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QString QgsProcessingParameterVectorOutput::valueAsPythonString( const QVariant &value, QgsProcessingContext & ) const
|
||||
{
|
||||
if ( value.canConvert<QgsProperty>() )
|
||||
return QStringLiteral( "QgsProperty.fromExpression('%1')" ).arg( value.value< QgsProperty >().asExpression() );
|
||||
|
||||
if ( value.canConvert<QgsProcessingOutputLayerDefinition>() )
|
||||
{
|
||||
QgsProcessingOutputLayerDefinition fromVar = qvariant_cast<QgsProcessingOutputLayerDefinition>( value );
|
||||
if ( fromVar.sink.propertyType() == QgsProperty::StaticProperty )
|
||||
{
|
||||
return QStringLiteral( "QgsProcessingOutputLayerDefinition('%1')" ).arg( fromVar.sink.staticValue().toString() );
|
||||
}
|
||||
else
|
||||
{
|
||||
return QStringLiteral( "QgsProcessingOutputLayerDefinition(QgsProperty.fromExpression('%1'))" ).arg( fromVar.sink.asExpression() );
|
||||
}
|
||||
}
|
||||
|
||||
return value.toString().prepend( '\'' ).append( '\'' );
|
||||
}
|
||||
|
||||
QgsProcessingParameterDefinition::LayerType QgsProcessingParameterVectorOutput::dataType() const
|
||||
{
|
||||
return mDataType;
|
||||
}
|
||||
|
||||
bool QgsProcessingParameterVectorOutput::hasGeometry() const
|
||||
{
|
||||
switch ( mDataType )
|
||||
{
|
||||
case TypeAny:
|
||||
case TypeVectorAny:
|
||||
case TypeVectorPoint:
|
||||
case TypeVectorLine:
|
||||
case TypeVectorPolygon:
|
||||
case TypeTable:
|
||||
return true;
|
||||
|
||||
case TypeRaster:
|
||||
case TypeFile:
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void QgsProcessingParameterVectorOutput::setDataType( QgsProcessingParameterDefinition::LayerType type )
|
||||
{
|
||||
mDataType = type;
|
||||
}
|
||||
|
||||
QVariantMap QgsProcessingParameterVectorOutput::toVariantMap() const
|
||||
{
|
||||
QVariantMap map = QgsProcessingParameterDefinition::toVariantMap();
|
||||
map.insert( QStringLiteral( "data_type" ), mDataType );
|
||||
return map;
|
||||
}
|
||||
|
||||
bool QgsProcessingParameterVectorOutput::fromVariantMap( const QVariantMap &map )
|
||||
{
|
||||
QgsProcessingParameterDefinition::fromVariantMap( map );
|
||||
mDataType = static_cast< QgsProcessingParameterDefinition::LayerType >( map.value( QStringLiteral( "data_type" ) ).toInt() );
|
||||
return true;
|
||||
}
|
||||
|
@ -206,6 +206,8 @@ class CORE_EXPORT QgsProcessingParameterDefinition
|
||||
sipType = sipType_QgsProcessingParameterFeatureSource;
|
||||
else if ( sipCpp->type() == "sink" )
|
||||
sipType = sipType_QgsProcessingParameterFeatureSink;
|
||||
else if ( sipCpp->type() == "vectorOut" )
|
||||
sipType = sipType_QgsProcessingParameterVectorOutput;
|
||||
else if ( sipCpp->type() == "rasterOut" )
|
||||
sipType = sipType_QgsProcessingParameterRasterOutput;
|
||||
else if ( sipCpp->type() == "fileOut" )
|
||||
@ -1138,6 +1140,8 @@ class CORE_EXPORT QgsProcessingParameterVectorLayer : public QgsProcessingParame
|
||||
bool optional = false );
|
||||
|
||||
QString type() const override { return QStringLiteral( "vector" ); }
|
||||
bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = nullptr ) const override;
|
||||
QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const override;
|
||||
|
||||
};
|
||||
|
||||
@ -1312,6 +1316,55 @@ class CORE_EXPORT QgsProcessingParameterFeatureSink : public QgsProcessingParame
|
||||
QgsProcessingParameterDefinition::LayerType mDataType = QgsProcessingParameterDefinition::TypeVectorAny;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \class QgsProcessingParameterVectorOutput
|
||||
* \ingroup core
|
||||
* A vector layer output parameter. Consider using the more flexible QgsProcessingParameterFeatureSink wherever
|
||||
* possible.
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
class CORE_EXPORT QgsProcessingParameterVectorOutput : public QgsProcessingParameterDefinition
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor for QgsProcessingParameterVectorOutput.
|
||||
*/
|
||||
QgsProcessingParameterVectorOutput( const QString &name, const QString &description = QString(), QgsProcessingParameterDefinition::LayerType type = QgsProcessingParameterDefinition::TypeVectorAny, const QVariant &defaultValue = QVariant(),
|
||||
bool optional = false );
|
||||
|
||||
QString type() const override { return QStringLiteral( "vectorOut" ); }
|
||||
bool isDestination() const override { return true; }
|
||||
bool checkValueIsAcceptable( const QVariant &input, QgsProcessingContext *context = nullptr ) const override;
|
||||
QString valueAsPythonString( const QVariant &value, QgsProcessingContext &context ) const override;
|
||||
|
||||
/**
|
||||
* Returns the layer type for layers associated with the parameter.
|
||||
* \see setDataType()
|
||||
*/
|
||||
QgsProcessingParameterDefinition::LayerType dataType() const;
|
||||
|
||||
/**
|
||||
* Returns true if the layer is likely to include geometries. In cases were presence of geometry
|
||||
* cannot be reliably determined in advance, this method will default to returning true.
|
||||
*/
|
||||
bool hasGeometry() const;
|
||||
|
||||
/**
|
||||
* Sets the layer \a type for the layers associated with the parameter.
|
||||
* \see dataType()
|
||||
*/
|
||||
void setDataType( QgsProcessingParameterDefinition::LayerType type );
|
||||
|
||||
QVariantMap toVariantMap() const override;
|
||||
bool fromVariantMap( const QVariantMap &map ) override;
|
||||
|
||||
private:
|
||||
|
||||
QgsProcessingParameterDefinition::LayerType mDataType = QgsProcessingParameterDefinition::TypeVectorAny;
|
||||
};
|
||||
|
||||
/**
|
||||
* \class QgsProcessingParameterRasterOutput
|
||||
* \ingroup core
|
||||
|
@ -314,8 +314,10 @@ class TestQgsProcessing: public QObject
|
||||
void parameterString();
|
||||
void parameterExpression();
|
||||
void parameterField();
|
||||
void parameterVectorLayer();
|
||||
void parameterFeatureSource();
|
||||
void parameterFeatureSink();
|
||||
void parameterVectorOut();
|
||||
void parameterRasterOut();
|
||||
void parameterFileOut();
|
||||
void parameterFolderOut();
|
||||
@ -2593,6 +2595,96 @@ void TestQgsProcessing::parameterField()
|
||||
QCOMPARE( fields, QStringList() << "abc" << "def" );
|
||||
}
|
||||
|
||||
void TestQgsProcessing::parameterVectorLayer()
|
||||
{
|
||||
// setup a context
|
||||
QgsProject p;
|
||||
p.setCrs( QgsCoordinateReferenceSystem::fromEpsgId( 28353 ) );
|
||||
QString testDataDir = QStringLiteral( TEST_DATA_DIR ) + '/'; //defined in CmakeLists.txt
|
||||
QString vector1 = testDataDir + "multipoint.shp";
|
||||
QString raster = testDataDir + "landsat.tif";
|
||||
QFileInfo fi1( raster );
|
||||
QFileInfo fi2( vector1 );
|
||||
QgsRasterLayer *r1 = new QgsRasterLayer( fi1.filePath(), "R1" );
|
||||
QgsVectorLayer *v1 = new QgsVectorLayer( fi2.filePath(), "V4", "ogr" );
|
||||
p.addMapLayers( QList<QgsMapLayer *>() << v1 << r1 );
|
||||
QgsProcessingContext context;
|
||||
context.setProject( &p );
|
||||
|
||||
// not optional!
|
||||
std::unique_ptr< QgsProcessingParameterVectorLayer > def( new QgsProcessingParameterVectorLayer( "non_optional", QString(), QString( "somelayer" ), false ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( false ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( true ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( 5 ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "layer12312312" ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( "" ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( QVariant() ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( QgsProcessingFeatureSourceDefinition( "layer1231123" ) ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( QVariant::fromValue( v1 ) ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( QVariant::fromValue( r1 ) ) );
|
||||
|
||||
// should be OK
|
||||
QVERIFY( def->checkValueIsAcceptable( "c:/Users/admin/Desktop/roads_clipped_transformed_v1_reprojected_final_clipped_aAAA.shp" ) );
|
||||
// ... unless we use context, when the check that the layer actually exists is performed
|
||||
QVERIFY( !def->checkValueIsAcceptable( "c:/Users/admin/Desktop/roads_clipped_transformed_v1_reprojected_final_clipped_aAAA.shp", &context ) );
|
||||
|
||||
// using existing map layer ID
|
||||
QVariantMap params;
|
||||
params.insert( "non_optional", v1->id() );
|
||||
QCOMPARE( QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context )->id(), v1->id() );
|
||||
|
||||
// using existing layer
|
||||
params.insert( "non_optional", QVariant::fromValue( v1 ) );
|
||||
QCOMPARE( QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context )->id(), v1->id() );
|
||||
|
||||
// not vector layer
|
||||
params.insert( "non_optional", r1->id() );
|
||||
QVERIFY( !QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context ) );
|
||||
|
||||
// using existing non-vector layer
|
||||
params.insert( "non_optional", QVariant::fromValue( r1 ) );
|
||||
QVERIFY( !QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context ) );
|
||||
|
||||
// string representing a layer source
|
||||
params.insert( "non_optional", vector1 );
|
||||
QCOMPARE( QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context )->publicSource(), vector1 );
|
||||
|
||||
// nonsense string
|
||||
params.insert( "non_optional", QString( "i'm not a layer, and nothing you can do will make me one" ) );
|
||||
QVERIFY( !QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context ) );
|
||||
|
||||
QCOMPARE( def->valueAsPythonString( vector1, context ), QString( "'" ) + testDataDir + QStringLiteral( "multipoint.shp'" ) );
|
||||
QCOMPARE( def->valueAsPythonString( v1->id(), context ), QString( "'" ) + testDataDir + QStringLiteral( "multipoint.shp'" ) );
|
||||
QCOMPARE( def->valueAsPythonString( QVariant::fromValue( v1 ), context ), QString( "'" ) + testDataDir + QStringLiteral( "multipoint.shp'" ) );
|
||||
QCOMPARE( def->valueAsPythonString( QVariant::fromValue( QgsProperty::fromExpression( "\"a\"=1" ) ), context ), QStringLiteral( "QgsProperty.fromExpression('\"a\"=1')" ) );
|
||||
QVariantMap map = def->toVariantMap();
|
||||
QgsProcessingParameterVectorLayer fromMap( "x" );
|
||||
QVERIFY( fromMap.fromVariantMap( map ) );
|
||||
QCOMPARE( fromMap.name(), def->name() );
|
||||
QCOMPARE( fromMap.description(), def->description() );
|
||||
QCOMPARE( fromMap.flags(), def->flags() );
|
||||
QCOMPARE( fromMap.defaultValue(), def->defaultValue() );
|
||||
def.reset( dynamic_cast< QgsProcessingParameterVectorLayer *>( QgsProcessingParameters::parameterFromVariantMap( map ) ) );
|
||||
QVERIFY( dynamic_cast< QgsProcessingParameterVectorLayer *>( def.get() ) );
|
||||
|
||||
// optional
|
||||
def.reset( new QgsProcessingParameterVectorLayer( "optional", QString(), v1->id(), true ) );
|
||||
params.insert( "optional", QVariant() );
|
||||
QCOMPARE( QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context )->id(), v1->id() );
|
||||
QVERIFY( def->checkValueIsAcceptable( false ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( true ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( 5 ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "layer12312312" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "c:/Users/admin/Desktop/roads_clipped_transformed_v1_reprojected_final_clipped_aAAA.shp" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( QVariant() ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( QgsProcessingFeatureSourceDefinition( "layer1231123" ) ) );
|
||||
|
||||
//optional with direct layer default
|
||||
def.reset( new QgsProcessingParameterVectorLayer( "optional", QString(), QVariant::fromValue( v1 ), true ) );
|
||||
QCOMPARE( QgsProcessingParameters::parameterAsVectorLayer( def.get(), params, context )->id(), v1->id() );
|
||||
}
|
||||
|
||||
void TestQgsProcessing::parameterFeatureSource()
|
||||
{
|
||||
// setup a context
|
||||
@ -2747,6 +2839,68 @@ void TestQgsProcessing::parameterFeatureSink()
|
||||
|
||||
}
|
||||
|
||||
void TestQgsProcessing::parameterVectorOut()
|
||||
{
|
||||
// setup a context
|
||||
QgsProject p;
|
||||
p.setCrs( QgsCoordinateReferenceSystem::fromEpsgId( 28353 ) );
|
||||
QgsProcessingContext context;
|
||||
context.setProject( &p );
|
||||
|
||||
// not optional!
|
||||
std::unique_ptr< QgsProcessingParameterVectorOutput > def( new QgsProcessingParameterVectorOutput( "non_optional", QString(), QgsProcessingParameterDefinition::TypeVectorAny, QString( "EPSG:3113" ), false ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( false ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( true ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( 5 ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "layer12312312" ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( "" ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( QVariant() ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( QgsProcessingOutputLayerDefinition( "layer1231123" ) ) );
|
||||
|
||||
// should be OK with or without context - it's an output layer!
|
||||
QVERIFY( def->checkValueIsAcceptable( "c:/Users/admin/Desktop/roads_clipped_transformed_v1_reprojected_final_clipped_aAAA.shp" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "c:/Users/admin/Desktop/roads_clipped_transformed_v1_reprojected_final_clipped_aAAA.shp", &context ) );
|
||||
|
||||
QCOMPARE( def->valueAsPythonString( QStringLiteral( "abc" ), context ), QStringLiteral( "'abc'" ) );
|
||||
QCOMPARE( def->valueAsPythonString( QVariant::fromValue( QgsProcessingOutputLayerDefinition( "abc" ) ), context ), QStringLiteral( "QgsProcessingOutputLayerDefinition('abc')" ) );
|
||||
QCOMPARE( def->valueAsPythonString( QVariant::fromValue( QgsProcessingOutputLayerDefinition( QgsProperty::fromValue( "abc" ) ) ), context ), QStringLiteral( "QgsProcessingOutputLayerDefinition('abc')" ) );
|
||||
QCOMPARE( def->valueAsPythonString( QVariant::fromValue( QgsProcessingOutputLayerDefinition( QgsProperty::fromExpression( "\"abc\" || \"def\"" ) ) ), context ), QStringLiteral( "QgsProcessingOutputLayerDefinition(QgsProperty.fromExpression('\"abc\" || \"def\"'))" ) );
|
||||
QCOMPARE( def->valueAsPythonString( QVariant::fromValue( QgsProperty::fromExpression( "\"a\"=1" ) ), context ), QStringLiteral( "QgsProperty.fromExpression('\"a\"=1')" ) );
|
||||
|
||||
QVariantMap map = def->toVariantMap();
|
||||
QgsProcessingParameterVectorOutput fromMap( "x" );
|
||||
QVERIFY( fromMap.fromVariantMap( map ) );
|
||||
QCOMPARE( fromMap.name(), def->name() );
|
||||
QCOMPARE( fromMap.description(), def->description() );
|
||||
QCOMPARE( fromMap.flags(), def->flags() );
|
||||
QCOMPARE( fromMap.defaultValue(), def->defaultValue() );
|
||||
QCOMPARE( fromMap.dataType(), def->dataType() );
|
||||
def.reset( dynamic_cast< QgsProcessingParameterVectorOutput *>( QgsProcessingParameters::parameterFromVariantMap( map ) ) );
|
||||
QVERIFY( dynamic_cast< QgsProcessingParameterVectorOutput *>( def.get() ) );
|
||||
|
||||
// optional
|
||||
def.reset( new QgsProcessingParameterVectorOutput( "optional", QString(), QgsProcessingParameterDefinition::TypeVectorAny, QString(), true ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( false ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( true ) );
|
||||
QVERIFY( !def->checkValueIsAcceptable( 5 ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "layer12312312" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "c:/Users/admin/Desktop/roads_clipped_transformed_v1_reprojected_final_clipped_aAAA.shp" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( "" ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( QVariant() ) );
|
||||
QVERIFY( def->checkValueIsAcceptable( QgsProcessingOutputLayerDefinition( "layer1231123" ) ) );
|
||||
|
||||
// test hasGeometry
|
||||
QVERIFY( QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeAny ).hasGeometry() );
|
||||
QVERIFY( QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeVectorAny ).hasGeometry() );
|
||||
QVERIFY( QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeVectorPoint ).hasGeometry() );
|
||||
QVERIFY( QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeVectorLine ).hasGeometry() );
|
||||
QVERIFY( QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeVectorPolygon ).hasGeometry() );
|
||||
QVERIFY( !QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeRaster ).hasGeometry() );
|
||||
QVERIFY( !QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeFile ).hasGeometry() );
|
||||
QVERIFY( QgsProcessingParameterVectorOutput( "test", QString(), QgsProcessingParameterDefinition::TypeTable ).hasGeometry() );
|
||||
|
||||
}
|
||||
|
||||
void TestQgsProcessing::parameterRasterOut()
|
||||
{
|
||||
// setup a context
|
||||
|
Loading…
x
Reference in New Issue
Block a user