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;
|
sipType = sipType_QgsProcessingParameterFeatureSource;
|
||||||
else if ( sipCpp->type() == "sink" )
|
else if ( sipCpp->type() == "sink" )
|
||||||
sipType = sipType_QgsProcessingParameterFeatureSink;
|
sipType = sipType_QgsProcessingParameterFeatureSink;
|
||||||
|
else if ( sipCpp->type() == "vectorOut" )
|
||||||
|
sipType = sipType_QgsProcessingParameterVectorOutput;
|
||||||
else if ( sipCpp->type() == "rasterOut" )
|
else if ( sipCpp->type() == "rasterOut" )
|
||||||
sipType = sipType_QgsProcessingParameterRasterOutput;
|
sipType = sipType_QgsProcessingParameterRasterOutput;
|
||||||
else if ( sipCpp->type() == "fileOut" )
|
else if ( sipCpp->type() == "fileOut" )
|
||||||
@ -1173,6 +1175,10 @@ class QgsProcessingParameterVectorLayer : QgsProcessingParameterDefinition
|
|||||||
%End
|
%End
|
||||||
|
|
||||||
virtual QString type() const;
|
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 );
|
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
|
class QgsProcessingParameterRasterOutput : QgsProcessingParameterDefinition
|
||||||
|
@ -744,7 +744,7 @@ QgsProcessingParameterDefinition *QgsProcessingParameters::parameterFromVariantM
|
|||||||
def.reset( new QgsProcessingParameterString( name ) );
|
def.reset( new QgsProcessingParameterString( name ) );
|
||||||
else if ( type == QStringLiteral( "expression" ) )
|
else if ( type == QStringLiteral( "expression" ) )
|
||||||
def.reset( new QgsProcessingParameterExpression( name ) );
|
def.reset( new QgsProcessingParameterExpression( name ) );
|
||||||
else if ( type == QStringLiteral( "table" ) )
|
else if ( type == QStringLiteral( "vector" ) )
|
||||||
def.reset( new QgsProcessingParameterVectorLayer( name ) );
|
def.reset( new QgsProcessingParameterVectorLayer( name ) );
|
||||||
else if ( type == QStringLiteral( "field" ) )
|
else if ( type == QStringLiteral( "field" ) )
|
||||||
def.reset( new QgsProcessingParameterField( name ) );
|
def.reset( new QgsProcessingParameterField( name ) );
|
||||||
@ -752,6 +752,8 @@ QgsProcessingParameterDefinition *QgsProcessingParameters::parameterFromVariantM
|
|||||||
def.reset( new QgsProcessingParameterFeatureSource( name ) );
|
def.reset( new QgsProcessingParameterFeatureSource( name ) );
|
||||||
else if ( type == QStringLiteral( "sink" ) )
|
else if ( type == QStringLiteral( "sink" ) )
|
||||||
def.reset( new QgsProcessingParameterFeatureSink( name ) );
|
def.reset( new QgsProcessingParameterFeatureSink( name ) );
|
||||||
|
else if ( type == QStringLiteral( "vectorOut" ) )
|
||||||
|
def.reset( new QgsProcessingParameterVectorOutput( name ) );
|
||||||
else if ( type == QStringLiteral( "rasterOut" ) )
|
else if ( type == QStringLiteral( "rasterOut" ) )
|
||||||
def.reset( new QgsProcessingParameterRasterOutput( name ) );
|
def.reset( new QgsProcessingParameterRasterOutput( name ) );
|
||||||
else if ( type == QStringLiteral( "fileOut" ) )
|
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 )
|
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 )
|
: QgsProcessingParameterDefinition( name, description, defaultValue, optional )
|
||||||
, mParentLayerParameter( parentLayerParameterName )
|
, mParentLayerParameter( parentLayerParameterName )
|
||||||
@ -2208,3 +2250,100 @@ bool QgsProcessingParameterFolderOutput::checkValueIsAcceptable( const QVariant
|
|||||||
|
|
||||||
return true;
|
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;
|
sipType = sipType_QgsProcessingParameterFeatureSource;
|
||||||
else if ( sipCpp->type() == "sink" )
|
else if ( sipCpp->type() == "sink" )
|
||||||
sipType = sipType_QgsProcessingParameterFeatureSink;
|
sipType = sipType_QgsProcessingParameterFeatureSink;
|
||||||
|
else if ( sipCpp->type() == "vectorOut" )
|
||||||
|
sipType = sipType_QgsProcessingParameterVectorOutput;
|
||||||
else if ( sipCpp->type() == "rasterOut" )
|
else if ( sipCpp->type() == "rasterOut" )
|
||||||
sipType = sipType_QgsProcessingParameterRasterOutput;
|
sipType = sipType_QgsProcessingParameterRasterOutput;
|
||||||
else if ( sipCpp->type() == "fileOut" )
|
else if ( sipCpp->type() == "fileOut" )
|
||||||
@ -1138,6 +1140,8 @@ class CORE_EXPORT QgsProcessingParameterVectorLayer : public QgsProcessingParame
|
|||||||
bool optional = false );
|
bool optional = false );
|
||||||
|
|
||||||
QString type() const override { return QStringLiteral( "vector" ); }
|
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;
|
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
|
* \class QgsProcessingParameterRasterOutput
|
||||||
* \ingroup core
|
* \ingroup core
|
||||||
|
@ -314,8 +314,10 @@ class TestQgsProcessing: public QObject
|
|||||||
void parameterString();
|
void parameterString();
|
||||||
void parameterExpression();
|
void parameterExpression();
|
||||||
void parameterField();
|
void parameterField();
|
||||||
|
void parameterVectorLayer();
|
||||||
void parameterFeatureSource();
|
void parameterFeatureSource();
|
||||||
void parameterFeatureSink();
|
void parameterFeatureSink();
|
||||||
|
void parameterVectorOut();
|
||||||
void parameterRasterOut();
|
void parameterRasterOut();
|
||||||
void parameterFileOut();
|
void parameterFileOut();
|
||||||
void parameterFolderOut();
|
void parameterFolderOut();
|
||||||
@ -2593,6 +2595,96 @@ void TestQgsProcessing::parameterField()
|
|||||||
QCOMPARE( fields, QStringList() << "abc" << "def" );
|
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()
|
void TestQgsProcessing::parameterFeatureSource()
|
||||||
{
|
{
|
||||||
// setup a context
|
// 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()
|
void TestQgsProcessing::parameterRasterOut()
|
||||||
{
|
{
|
||||||
// setup a context
|
// setup a context
|
||||||
|
Loading…
x
Reference in New Issue
Block a user