def testMultiVectorIn(self): """ Test vector multilayer input parameter """ alg = RAlgorithm(description_file=os.path.join( test_data_path, 'test_multivectorin.rsx')) alg.initAlgorithm() param = alg.parameterDefinition('Layer') self.assertEqual(param.type(), 'multilayer') self.assertEqual(param.layerType(), QgsProcessing.TypeVectorAnyGeometry) context = QgsProcessingContext() feedback = QgsProcessingFeedback() script = alg.build_import_commands( { 'Layer': [ os.path.join(test_data_path, 'lines.shp'), os.path.join(test_data_path, 'points.gml') ] }, context, feedback) self.assertEqual(script, [ 'tempvar0 <- readOGR("{}")'.format( os.path.join(test_data_path, 'lines.shp')), 'tempvar1 <- readOGR("{}")'.format( os.path.join(test_data_path, 'points.gml')), 'Layer = list(tempvar0,tempvar1)' ]) script = alg.build_import_commands({'Layer': []}, context, feedback) self.assertEqual(script, ['Layer = list()'])
def testMultiRasterIn(self): """ Test raster multilayer input parameter """ alg = RAlgorithm(description_file=os.path.join( test_data_path, 'test_multirasterin.rsx')) alg.initAlgorithm() raster_param = alg.parameterDefinition('Layer') self.assertEqual(raster_param.type(), 'multilayer') self.assertEqual(raster_param.layerType(), QgsProcessing.TypeRaster) context = QgsProcessingContext() feedback = QgsProcessingFeedback() script = alg.build_import_commands( { 'Layer': [ os.path.join(test_data_path, 'dem.tif'), os.path.join(test_data_path, 'dem2.tif') ] }, context, feedback) self.assertEqual(script, [ 'tempvar0 <- brick("{}")'.format( os.path.join(test_data_path, 'dem.tif')), 'tempvar1 <- brick("{}")'.format( os.path.join(test_data_path, 'dem2.tif')), 'Layer = list(tempvar0,tempvar1)' ]) script = alg.build_import_commands({'Layer': []}, context, feedback) self.assertEqual(script, ['Layer = list()'])
def testMultiFieldIn(self): """ Test multiple field input parameter """ alg = RAlgorithm(description_file=os.path.join( test_data_path, 'test_field_multiple.rsx')) alg.initAlgorithm() param = alg.parameterDefinition('MultiField') self.assertEqual(param.type(), 'field') self.assertTrue(param.allowMultiple()) context = QgsProcessingContext() feedback = QgsProcessingFeedback() script = alg.build_import_commands( {'Layer': os.path.join(test_data_path, 'lines.shp')}, context, feedback) self.assertEqual(script, [ 'Layer <- readOGR("{}")'.format( os.path.join(test_data_path, 'lines.shp')), 'MultiField <- NULL' ]) script = alg.build_import_commands( { 'Layer': os.path.join(test_data_path, 'lines.shp'), 'MultiField': ['a'] }, context, feedback) self.assertEqual(script, [ 'Layer <- readOGR("{}")'.format( os.path.join(test_data_path, 'lines.shp')), 'MultiField <- c("a")' ]) script = alg.build_import_commands( { 'Layer': os.path.join(test_data_path, 'lines.shp'), 'MultiField': ['a', 'b"c'] }, context, feedback) self.assertEqual(script, [ 'Layer <- readOGR("{}")'.format( os.path.join(test_data_path, 'lines.shp')), 'MultiField <- c("a","b\\"c")' ])
def testAlgHelp(self): # pylint: disable=too-many-locals,too-many-statements """ Test algorithm help """ alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_1.rsx')) alg.initAlgorithm() self.assertIn('A polygon layer', alg.shortHelpString()) self.assertIn('Me2', alg.shortHelpString()) self.assertIn('Test help.', alg.shortHelpString()) # param help if Qgis.QGIS_VERSION_INT >= 31604: polyg_param = alg.parameterDefinition('polyg') self.assertEqual(polyg_param.help(), 'A polygon layer') # no help file alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_2.rsx')) alg.initAlgorithm() self.assertEqual(alg.shortHelpString(), "")
def testScriptParsing(self): # pylint: disable=too-many-locals,too-many-statements """ Test script file parsing """ alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_1.rsx')) alg.initAlgorithm() self.assertFalse(alg.error) self.assertEqual(alg.name(), 'test_algorithm_1') self.assertEqual(alg.displayName(), 'test algorithm 1') self.assertIn('test_algorithm_1.rsx', 'test_algorithm_1.rsx') self.assertTrue(alg.show_plots) self.assertFalse(alg.r_templates.use_raster) self.assertTrue(alg.pass_file_names) alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_2.rsx')) alg.initAlgorithm() self.assertFalse(alg.error) self.assertEqual(alg.name(), 'mytest') self.assertEqual(alg.displayName(), 'my test') self.assertEqual(alg.group(), 'my group') self.assertEqual(alg.groupId(), 'my group') self.assertFalse(alg.show_plots) self.assertTrue(alg.r_templates.use_raster) self.assertFalse(alg.pass_file_names) # test that inputs were created correctly raster_param = alg.parameterDefinition('in_raster') self.assertEqual(raster_param.type(), 'raster') vector_param = alg.parameterDefinition('in_vector') self.assertEqual(vector_param.type(), 'source') field_param = alg.parameterDefinition('in_field') self.assertEqual(field_param.type(), 'field') self.assertEqual(field_param.parentLayerParameterName(), 'in_vector') extent_param = alg.parameterDefinition('in_extent') self.assertEqual(extent_param.type(), 'extent') string_param = alg.parameterDefinition('in_string') self.assertEqual(string_param.type(), 'string') file_param = alg.parameterDefinition('in_file') self.assertEqual(file_param.type(), 'file') number_param = alg.parameterDefinition('in_number') self.assertEqual(number_param.type(), 'number') self.assertEqual(number_param.dataType(), QgsProcessingParameterNumber.Double) enum_param = alg.parameterDefinition('in_enum') self.assertEqual(enum_param.type(), 'enum') enum_param = alg.parameterDefinition('in_enum2') self.assertEqual(enum_param.type(), 'enum') self.assertEqual(enum_param.options(), ['normal', 'log10', 'ln', 'sqrt', 'exp']) bool_param = alg.parameterDefinition('in_bool') self.assertEqual(bool_param.type(), 'boolean') # outputs vector_output = alg.outputDefinition('out_vector') self.assertEqual(vector_output.type(), 'outputVector') self.assertEqual(vector_output.dataType(), QgsProcessing.TypeVectorAnyGeometry) vector_dest_param = alg.parameterDefinition('param_vector_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorAnyGeometry) table_output = alg.outputDefinition('out_table') self.assertEqual(table_output.type(), 'outputVector') self.assertEqual(table_output.dataType(), QgsProcessing.TypeVector) table_dest_param = alg.parameterDefinition('param_table_dest') self.assertEqual(table_dest_param.type(), 'vectorDestination') self.assertEqual(table_dest_param.dataType(), QgsProcessing.TypeVector) vector_dest_param = alg.parameterDefinition('param_vector_dest2') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorAnyGeometry) vector_dest_param = alg.parameterDefinition('param_vector_point_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorPoint) vector_dest_param = alg.parameterDefinition('param_vector_line_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorLine) vector_dest_param = alg.parameterDefinition( 'param_vector_polygon_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorPolygon) raster_output = alg.outputDefinition('out_raster') self.assertEqual(raster_output.type(), 'outputRaster') raster_dest_param = alg.parameterDefinition('param_raster_dest') self.assertEqual(raster_dest_param.type(), 'rasterDestination') number_output = alg.outputDefinition('out_number') self.assertEqual(number_output.type(), 'outputNumber') string_output = alg.outputDefinition('out_string') self.assertEqual(string_output.type(), 'outputString') layer_output = alg.outputDefinition('out_layer') self.assertEqual(layer_output.type(), 'outputLayer') folder_output = alg.outputDefinition('out_folder') self.assertEqual(folder_output.type(), 'outputFolder') folder_dest_param = alg.parameterDefinition('param_folder_dest') self.assertEqual(folder_dest_param.type(), 'folderDestination') html_output = alg.outputDefinition('out_html') self.assertEqual(html_output.type(), 'outputHtml') html_dest_param = alg.parameterDefinition('param_html_dest') self.assertEqual(html_dest_param.type(), 'fileDestination') file_output = alg.outputDefinition('out_file') self.assertEqual(file_output.type(), 'outputFile') file_dest_param = alg.parameterDefinition('param_file_dest') self.assertEqual(file_dest_param.type(), 'fileDestination') csv_output = alg.outputDefinition('out_csv') self.assertEqual(csv_output.type(), 'outputFile') csv_dest_param = alg.parameterDefinition('param_csv_dest') self.assertEqual(csv_dest_param.type(), 'fileDestination') self.assertEqual(csv_dest_param.defaultFileExtension(), 'csv') # test display_name alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_3.rsx')) alg.initAlgorithm() self.assertFalse(alg.error) self.assertEqual(alg.name(), 'thealgid') self.assertEqual(alg.displayName(), 'the algo title') self.assertEqual(alg.group(), 'my group') self.assertEqual(alg.groupId(), 'my group') # test that inputs are defined as parameter description alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_4.rsx')) alg.initAlgorithm() self.assertFalse(alg.error) self.assertEqual(alg.name(), 'mytest') self.assertEqual(alg.displayName(), 'my test') self.assertEqual(alg.group(), 'my group') self.assertEqual(alg.groupId(), 'my group') raster_param = alg.parameterDefinition('in_raster') self.assertEqual(raster_param.type(), 'raster') vector_param = alg.parameterDefinition('in_vector') self.assertEqual(vector_param.type(), 'source') field_param = alg.parameterDefinition('in_field') self.assertEqual(field_param.type(), 'field') self.assertEqual(field_param.parentLayerParameterName(), 'in_vector') extent_param = alg.parameterDefinition('in_extent') self.assertEqual(extent_param.type(), 'extent') crs_param = alg.parameterDefinition('in_crs') self.assertEqual(crs_param.type(), 'crs') string_param = alg.parameterDefinition('in_string') self.assertEqual(string_param.type(), 'string') number_param = alg.parameterDefinition('in_number') self.assertEqual(number_param.type(), 'number') self.assertEqual(number_param.dataType(), QgsProcessingParameterNumber.Integer) enum_param = alg.parameterDefinition('in_enum') self.assertEqual(enum_param.type(), 'enum') bool_param = alg.parameterDefinition('in_bool') self.assertEqual(bool_param.type(), 'boolean') file_param = alg.parameterDefinition('in_file') self.assertEqual(file_param.type(), 'file') self.assertEqual(file_param.behavior(), QgsProcessingParameterFile.File) folder_param = alg.parameterDefinition('in_folder') self.assertEqual(folder_param.type(), 'file') self.assertEqual(folder_param.behavior(), QgsProcessingParameterFile.Folder) gpkg_param = alg.parameterDefinition('in_gpkg') self.assertEqual(gpkg_param.type(), 'file') self.assertEqual(gpkg_param.behavior(), QgsProcessingParameterFile.File) self.assertEqual(gpkg_param.extension(), 'gpkg') img_param = alg.parameterDefinition('in_img') self.assertEqual(img_param.type(), 'file') self.assertEqual(img_param.behavior(), QgsProcessingParameterFile.File) self.assertEqual(img_param.extension(), '') self.assertEqual(img_param.fileFilter(), 'PNG Files (*.png);; JPG Files (*.jpg *.jpeg)') vector_dest_param = alg.parameterDefinition('param_vector_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorAnyGeometry) vector_dest_param = alg.parameterDefinition('param_vector_point_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorPoint) vector_dest_param = alg.parameterDefinition('param_vector_line_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorLine) vector_dest_param = alg.parameterDefinition( 'param_vector_polygon_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorPolygon) table_dest_param = alg.parameterDefinition('param_table_dest') self.assertEqual(table_dest_param.type(), 'vectorDestination') self.assertEqual(table_dest_param.dataType(), QgsProcessing.TypeVector) raster_dest_param = alg.parameterDefinition('param_raster_dest') self.assertEqual(raster_dest_param.type(), 'rasterDestination') folder_dest_param = alg.parameterDefinition('param_folder_dest') self.assertEqual(folder_dest_param.type(), 'folderDestination') file_dest_param = alg.parameterDefinition('param_file_dest') self.assertEqual(file_dest_param.type(), 'fileDestination') html_dest_param = alg.parameterDefinition('param_html_dest') self.assertEqual(html_dest_param.type(), 'fileDestination') self.assertEqual(html_dest_param.fileFilter(), 'HTML Files (*.html)') self.assertEqual(html_dest_param.defaultFileExtension(), 'html') csv_dest_param = alg.parameterDefinition('param_csv_dest') self.assertEqual(csv_dest_param.type(), 'fileDestination') self.assertEqual(csv_dest_param.fileFilter(), 'CSV Files (*.csv)') self.assertEqual(csv_dest_param.defaultFileExtension(), 'csv') img_dest_param = alg.parameterDefinition('param_img_dest') self.assertEqual(img_dest_param.type(), 'fileDestination') self.assertEqual(img_dest_param.fileFilter(), 'PNG Files (*.png);; JPG Files (*.jpg *.jpeg)') self.assertEqual(img_dest_param.defaultFileExtension(), 'png')
def testScriptParsing(self): # pylint: disable=too-many-locals,too-many-statements """ Test script file parsing """ alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_1.rsx')) alg.initAlgorithm() self.assertFalse(alg.error) self.assertEqual(alg.name(), 'test_algorithm_1') self.assertEqual(alg.displayName(), 'test algorithm 1') self.assertIn('test_algorithm_1.rsx', 'test_algorithm_1.rsx') self.assertTrue(alg.show_plots) self.assertFalse(alg.use_raster_package) self.assertTrue(alg.pass_file_names) alg = RAlgorithm(description_file=os.path.join(test_data_path, 'test_algorithm_2.rsx')) alg.initAlgorithm() self.assertFalse(alg.error) self.assertEqual(alg.name(), 'mytest') self.assertEqual(alg.displayName(), 'my test') self.assertEqual(alg.group(), 'my group') self.assertEqual(alg.groupId(), 'my group') self.assertFalse(alg.show_plots) self.assertTrue(alg.use_raster_package) self.assertFalse(alg.pass_file_names) # test that inputs were created correctly raster_param = alg.parameterDefinition('in_raster') self.assertEqual(raster_param.type(), 'raster') vector_param = alg.parameterDefinition('in_vector') self.assertEqual(vector_param.type(), 'source') field_param = alg.parameterDefinition('in_field') self.assertEqual(field_param.type(), 'field') self.assertEqual(field_param.parentLayerParameterName(), 'in_vector') extent_param = alg.parameterDefinition('in_extent') self.assertEqual(extent_param.type(), 'extent') string_param = alg.parameterDefinition('in_string') self.assertEqual(string_param.type(), 'string') file_param = alg.parameterDefinition('in_file') self.assertEqual(file_param.type(), 'file') number_param = alg.parameterDefinition('in_number') self.assertEqual(number_param.type(), 'number') self.assertEqual(number_param.dataType(), QgsProcessingParameterNumber.Double) enum_param = alg.parameterDefinition('in_enum') self.assertEqual(enum_param.type(), 'enum') enum_param = alg.parameterDefinition('in_enum2') self.assertEqual(enum_param.type(), 'enum') self.assertEqual(enum_param.options(), ['normal', 'log10', 'ln', 'sqrt', 'exp']) bool_param = alg.parameterDefinition('in_bool') self.assertEqual(bool_param.type(), 'boolean') # outputs vector_output = alg.outputDefinition('out_vector') self.assertEqual(vector_output.type(), 'outputVector') self.assertEqual(vector_output.dataType(), QgsProcessing.TypeVectorAnyGeometry) vector_dest_param = alg.parameterDefinition('param_vector_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorAnyGeometry) table_output = alg.outputDefinition('out_table') self.assertEqual(table_output.type(), 'outputVector') self.assertEqual(table_output.dataType(), QgsProcessing.TypeVector) table_dest_param = alg.parameterDefinition('param_table_dest') self.assertEqual(table_dest_param.type(), 'vectorDestination') self.assertEqual(table_dest_param.dataType(), QgsProcessing.TypeVector) vector_dest_param = alg.parameterDefinition('param_vector_dest2') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorAnyGeometry) vector_dest_param = alg.parameterDefinition('param_vector_point_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorPoint) vector_dest_param = alg.parameterDefinition('param_vector_line_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorLine) vector_dest_param = alg.parameterDefinition( 'param_vector_polygon_dest') self.assertEqual(vector_dest_param.type(), 'vectorDestination') self.assertEqual(vector_dest_param.dataType(), QgsProcessing.TypeVectorPolygon) raster_output = alg.outputDefinition('out_raster') self.assertEqual(raster_output.type(), 'outputRaster') raster_dest_param = alg.parameterDefinition('param_raster_dest') self.assertEqual(raster_dest_param.type(), 'rasterDestination') number_output = alg.outputDefinition('out_number') self.assertEqual(number_output.type(), 'outputNumber') string_output = alg.outputDefinition('out_string') self.assertEqual(string_output.type(), 'outputString') layer_output = alg.outputDefinition('out_layer') self.assertEqual(layer_output.type(), 'outputLayer') folder_output = alg.outputDefinition('out_folder') self.assertEqual(folder_output.type(), 'outputFolder') folder_dest_param = alg.parameterDefinition('param_folder_dest') self.assertEqual(folder_dest_param.type(), 'folderDestination') html_output = alg.outputDefinition('out_html') self.assertEqual(html_output.type(), 'outputHtml') html_dest_param = alg.parameterDefinition('param_html_dest') self.assertEqual(html_dest_param.type(), 'fileDestination')