mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-31 00:06:02 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			399 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			399 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| """
 | |
| ***************************************************************************
 | |
|     ParametersTest
 | |
|     ---------------------
 | |
|     Date                 : March 2013
 | |
|     Copyright            : (C) 2013 by Victor Olaya
 | |
|     Email                : volayaf at gmail dot com
 | |
| ***************************************************************************
 | |
| *                                                                         *
 | |
| *   This program is free software; you can redistribute it and/or modify  *
 | |
| *   it under the terms of the GNU General Public License as published by  *
 | |
| *   the Free Software Foundation; either version 2 of the License, or     *
 | |
| *   (at your option) any later version.                                   *
 | |
| *                                                                         *
 | |
| ***************************************************************************
 | |
| """
 | |
| 
 | |
| __author__ = 'Victor Olaya'
 | |
| __date__ = 'March 2013'
 | |
| __copyright__ = '(C) 2013, Victor Olaya'
 | |
| 
 | |
| # This will get replaced with a git SHA1 when you do a git archive
 | |
| 
 | |
| __revision__ = '$Format:%H$'
 | |
| 
 | |
| from qgis.testing import start_app, unittest
 | |
| 
 | |
| from processing.core.parameters import (Parameter,
 | |
|                                         ParameterBoolean,
 | |
|                                         ParameterCrs,
 | |
|                                         ParameterDataObject,
 | |
|                                         ParameterExtent,
 | |
|                                         ParameterFile,
 | |
|                                         ParameterFixedTable,
 | |
|                                         ParameterMultipleInput,
 | |
|                                         ParameterNumber,
 | |
|                                         ParameterPoint)
 | |
| 
 | |
| from qgis.core import (QgsRasterLayer,
 | |
|                        QgsVectorLayer)
 | |
| 
 | |
| start_app()
 | |
| 
 | |
| 
 | |
| class ParameterTest(unittest.TestCase):
 | |
| 
 | |
|     def testGetValueAsCommandLineParameter(self):
 | |
|         parameter = Parameter('myName', 'myDesc')
 | |
|         parameter.setValue(None)
 | |
|         self.assertEqual(parameter.getValueAsCommandLineParameter(), "None")
 | |
| 
 | |
|         parameter.setValue("someValue")
 | |
|         self.assertEqual(parameter.getValueAsCommandLineParameter(), 'someValue')
 | |
| 
 | |
|         parameter.setValue(123)
 | |
|         self.assertEqual(parameter.getValueAsCommandLineParameter(), '123')
 | |
| 
 | |
| 
 | |
| class ParameterBooleanTest(unittest.TestCase):
 | |
| 
 | |
|     def testSetValue(self):
 | |
|         parameter = ParameterBoolean('myName', 'myDescription')
 | |
|         self.assertEqual(parameter.value, None)
 | |
|         parameter.setValue(False)
 | |
|         self.assertEqual(parameter.value, False)
 | |
|         parameter.setValue(True)
 | |
|         self.assertEqual(parameter.value, True)
 | |
| 
 | |
|     def testDefault(self):
 | |
|         parameter = ParameterBoolean('myName', 'myDescription', default=False, optional=True)
 | |
|         self.assertEqual(parameter.value, False)
 | |
|         parameter.setValue(None)
 | |
|         self.assertEqual(parameter.value, None)
 | |
| 
 | |
|     def testOptional(self):
 | |
|         optionalParameter = ParameterBoolean('myName', 'myDescription', default=False, optional=True)
 | |
|         self.assertEqual(optionalParameter.value, False)
 | |
|         optionalParameter.setValue(True)
 | |
|         self.assertEqual(optionalParameter.value, True)
 | |
|         self.assertTrue(optionalParameter.setValue(None))
 | |
|         self.assertEqual(optionalParameter.value, None)
 | |
| 
 | |
|         requiredParameter = ParameterBoolean('myName', 'myDescription', default=False, optional=False)
 | |
|         self.assertEqual(requiredParameter.value, False)
 | |
|         requiredParameter.setValue(True)
 | |
|         self.assertEqual(requiredParameter.value, True)
 | |
|         self.assertFalse(requiredParameter.setValue(None))
 | |
|         self.assertEqual(requiredParameter.value, True)
 | |
| 
 | |
| 
 | |
| class ParameterCRSTest(unittest.TestCase):
 | |
| 
 | |
|     def testSetValue(self):
 | |
|         parameter = ParameterCrs('myName', 'myDesc')
 | |
|         self.assertTrue(parameter.setValue('EPSG:12003'))
 | |
|         self.assertEqual(parameter.value, 'EPSG:12003')
 | |
| 
 | |
|     def testOptional(self):
 | |
|         optionalParameter = ParameterCrs('myName', 'myDesc', default='EPSG:4326', optional=True)
 | |
|         self.assertEqual(optionalParameter.value, 'EPSG:4326')
 | |
|         optionalParameter.setValue('EPSG:12003')
 | |
|         self.assertEqual(optionalParameter.value, 'EPSG:12003')
 | |
|         self.assertTrue(optionalParameter.setValue(None))
 | |
|         self.assertEqual(optionalParameter.value, None)
 | |
| 
 | |
|         requiredParameter = ParameterCrs('myName', 'myDesc', default='EPSG:4326', optional=False)
 | |
|         self.assertEqual(requiredParameter.value, 'EPSG:4326')
 | |
|         requiredParameter.setValue('EPSG:12003')
 | |
|         self.assertEqual(requiredParameter.value, 'EPSG:12003')
 | |
|         self.assertFalse(requiredParameter.setValue(None))
 | |
|         self.assertEqual(requiredParameter.value, 'EPSG:12003')
 | |
| 
 | |
| 
 | |
| class ParameterDataObjectTest(unittest.TestCase):
 | |
| 
 | |
|     def testGetValueAsCommandLineParameter(self):
 | |
|         parameter = ParameterDataObject('myName', 'myDesc')
 | |
|         parameter.setValue(None)
 | |
|         self.assertEqual(parameter.getValueAsCommandLineParameter(), "None")
 | |
| 
 | |
|         parameter = ParameterDataObject('myName', 'myDesc')
 | |
|         parameter.setValue("someFile.dat")
 | |
|         self.assertEqual(parameter.getValueAsCommandLineParameter(), '"someFile.dat"')
 | |
| 
 | |
| 
 | |
| class ParameterExtentTest(unittest.TestCase):
 | |
| 
 | |
|     def testSetValue(self):
 | |
|         parameter = ParameterExtent('myName', 'myDesc')
 | |
|         self.assertTrue(parameter.setValue('0,2,2,4'))
 | |
|         self.assertEqual(parameter.value, '0,2,2,4')
 | |
| 
 | |
|     def testSetInvalidValue(self):
 | |
|         parameter = ParameterExtent('myName', 'myDesc')
 | |
|         self.assertFalse(parameter.setValue('0,2,0'))
 | |
|         self.assertFalse(parameter.setValue('0,2,0,a'))
 | |
| 
 | |
|     def testOptional(self):
 | |
|         optionalParameter = ParameterExtent('myName', 'myDesc', default='0,1,0,1', optional=True)
 | |
|         self.assertEqual(optionalParameter.value, '0,1,0,1')
 | |
|         optionalParameter.setValue('1,2,3,4')
 | |
|         self.assertEqual(optionalParameter.value, '1,2,3,4')
 | |
|         self.assertTrue(optionalParameter.setValue(None))
 | |
|         # Extent is unique in that it will let you set `None`, whereas other
 | |
|         # optional parameters become "default" when assigning None.
 | |
|         self.assertEqual(optionalParameter.value, None)
 | |
| 
 | |
|         requiredParameter = ParameterExtent('myName', 'myDesc', default='0,1,0,1', optional=False)
 | |
|         self.assertEqual(requiredParameter.value, '0,1,0,1')
 | |
|         requiredParameter.setValue('1,2,3,4')
 | |
|         self.assertEqual(requiredParameter.value, '1,2,3,4')
 | |
|         self.assertFalse(requiredParameter.setValue(None))
 | |
|         self.assertEqual(requiredParameter.value, '1,2,3,4')
 | |
| 
 | |
| 
 | |
| class ParameterPointTest(unittest.TestCase):
 | |
| 
 | |
|     def testSetValue(self):
 | |
|         parameter = ParameterPoint('myName', 'myDesc')
 | |
|         self.assertTrue(parameter.setValue('0,2'))
 | |
|         self.assertEqual(parameter.value, '0,2')
 | |
| 
 | |
|     def testSetInvalidValue(self):
 | |
|         parameter = ParameterPoint('myName', 'myDesc')
 | |
|         self.assertFalse(parameter.setValue('0'))
 | |
|         self.assertFalse(parameter.setValue('0,a'))
 | |
| 
 | |
|     def testOptional(self):
 | |
|         optionalParameter = ParameterPoint('myName', 'myDesc', default='0,1', optional=True)
 | |
|         self.assertEqual(optionalParameter.value, '0,1')
 | |
|         optionalParameter.setValue('1,2')
 | |
|         self.assertEqual(optionalParameter.value, '1,2')
 | |
|         self.assertTrue(optionalParameter.setValue(None))
 | |
|         # Extent is unique in that it will let you set `None`, whereas other
 | |
|         # optional parameters become "default" when assigning None.
 | |
|         self.assertEqual(optionalParameter.value, None)
 | |
| 
 | |
|         requiredParameter = ParameterPoint('myName', 'myDesc', default='0,1', optional=False)
 | |
|         self.assertEqual(requiredParameter.value, '0,1')
 | |
|         requiredParameter.setValue('1,2')
 | |
|         self.assertEqual(requiredParameter.value, '1,2')
 | |
|         self.assertFalse(requiredParameter.setValue(None))
 | |
|         self.assertEqual(requiredParameter.value, '1,2')
 | |
| 
 | |
| 
 | |
| class ParameterFileTest(unittest.TestCase):
 | |
| 
 | |
|     def testSetValue(self):
 | |
|         parameter = ParameterFile('myName', 'myDesc')
 | |
|         self.assertTrue(parameter.setValue('myFile.png'))
 | |
|         self.assertEqual(parameter.value, 'myFile.png')
 | |
| 
 | |
|     def testOptional(self):
 | |
|         optionalParameter = ParameterFile('myName', 'myDesc', optional=True)
 | |
|         self.assertTrue(optionalParameter.setValue('myFile.png'))
 | |
|         self.assertEqual(optionalParameter.value, 'myFile.png')
 | |
| 
 | |
|         self.assertTrue(optionalParameter.setValue(""))
 | |
|         self.assertEqual(optionalParameter.value, '')
 | |
| 
 | |
|         self.assertTrue(optionalParameter.setValue(None))
 | |
|         self.assertEqual(optionalParameter.value, None)
 | |
| 
 | |
|         requiredParameter = ParameterFile('myName', 'myDesc', optional=False)
 | |
|         self.assertTrue(requiredParameter.setValue('myFile.png'))
 | |
|         self.assertEqual(requiredParameter.value, 'myFile.png')
 | |
| 
 | |
|         self.assertFalse(requiredParameter.setValue(''))
 | |
|         self.assertEqual(requiredParameter.value, 'myFile.png')
 | |
| 
 | |
|         self.assertFalse(requiredParameter.setValue('  '))
 | |
|         self.assertEqual(requiredParameter.value, 'myFile.png')
 | |
| 
 | |
|         self.assertFalse(requiredParameter.setValue(None))
 | |
|         self.assertEqual(requiredParameter.value, 'myFile.png')
 | |
| 
 | |
|     def testSetValueWithExtension(self):
 | |
|         parameter = ParameterFile('myName', 'myDesc', ext="png")
 | |
|         self.assertTrue(parameter.setValue('myFile.png'))
 | |
|         self.assertEqual(parameter.value, 'myFile.png')
 | |
| 
 | |
|         self.assertFalse(parameter.setValue('myFile.bmp'))
 | |
|         self.assertEqual(parameter.value, 'myFile.png')
 | |
| 
 | |
|     def testGetValueAsCommandLineParameter(self):
 | |
|         parameter = ParameterFile('myName', 'myDesc')
 | |
|         parameter.setValue('myFile.png')
 | |
|         self.assertEqual(parameter.getValueAsCommandLineParameter(), '"myFile.png"')
 | |
| 
 | |
| 
 | |
| class TestParameterFixedTable(unittest.TestCase):
 | |
| 
 | |
|     def testTableToString(self):
 | |
|         table = [
 | |
|             ['a0', 'a1', 'a2'],
 | |
|             ['b0', 'b1', 'b2']
 | |
|         ]
 | |
|         self.assertEqual(ParameterFixedTable.tableToString(table), 'a0,a1,a2,b0,b1,b2')
 | |
| 
 | |
|         table = [['a0']]
 | |
|         self.assertEqual(ParameterFixedTable.tableToString(table), 'a0')
 | |
| 
 | |
|         table = [[]]
 | |
|         self.assertEqual(ParameterFixedTable.tableToString(table), '')
 | |
| 
 | |
|     def testSetStringValue(self):
 | |
|         parameter = ParameterFixedTable('myName', 'myDesc')
 | |
|         self.assertTrue(parameter.setValue('1,2,3'))
 | |
|         self.assertEqual(parameter.value, '1,2,3')
 | |
| 
 | |
|     def testSet2DListValue(self):
 | |
|         table = [
 | |
|             ['a0', 'a1', 'a2'],
 | |
|             ['b0', 'b1', 'b2']
 | |
|         ]
 | |
|         parameter = ParameterFixedTable('myName', 'myDesc')
 | |
|         self.assertTrue(parameter.setValue(table))
 | |
|         self.assertEqual(parameter.value, 'a0,a1,a2,b0,b1,b2')
 | |
| 
 | |
|     def testOptional(self):
 | |
|         parameter = ParameterFixedTable('myName', 'myDesc', optional=True)
 | |
|         self.assertTrue(parameter.setValue('1,2,3'))
 | |
|         self.assertEqual(parameter.value, '1,2,3')
 | |
| 
 | |
|         self.assertTrue(parameter.setValue(None))
 | |
|         self.assertEqual(parameter.value, None)
 | |
| 
 | |
|         parameter = ParameterFixedTable('myName', 'myDesc', optional=False)
 | |
|         self.assertFalse(parameter.setValue(None))
 | |
|         self.assertEqual(parameter.value, None)
 | |
| 
 | |
|         self.assertTrue(parameter.setValue('1,2,3'))
 | |
|         self.assertEqual(parameter.value, '1,2,3')
 | |
| 
 | |
|         self.assertFalse(parameter.setValue(None))
 | |
|         self.assertEqual(parameter.value, '1,2,3')
 | |
| 
 | |
| 
 | |
| class ParameterMultipleInputTest(unittest.TestCase):
 | |
| 
 | |
|     def testOptional(self):
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', optional=True)
 | |
|         self.assertTrue(parameter.setValue('myLayerFile.shp'))
 | |
|         self.assertEqual(parameter.value, 'myLayerFile.shp')
 | |
| 
 | |
|         self.assertTrue(parameter.setValue(None))
 | |
|         self.assertEqual(parameter.value, None)
 | |
| 
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', optional=False)
 | |
|         self.assertFalse(parameter.setValue(None))
 | |
|         self.assertEqual(parameter.value, None)
 | |
| 
 | |
|         self.assertTrue(parameter.setValue("myLayerFile.shp"))
 | |
|         self.assertEqual(parameter.value, "myLayerFile.shp")
 | |
| 
 | |
|         self.assertFalse(parameter.setValue(None))
 | |
|         self.assertEqual(parameter.value, "myLayerFile.shp")
 | |
| 
 | |
|     def testMultipleInput(self):
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', optional=True)
 | |
|         self.assertTrue(parameter.setMinNumInputs(1))
 | |
| 
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', optional=False)
 | |
|         self.assertFalse(parameter.setMinNumInputs(0))
 | |
| 
 | |
|         parameter.setMinNumInputs(2)
 | |
|         self.assertTrue(parameter.setValue(['myLayerFile.shp', 'myLayerFile2.shp']))
 | |
| 
 | |
|         parameter.setMinNumInputs(3)
 | |
|         self.assertFalse(parameter.setValue(['myLayerFile.shp', 'myLayerFile2.shp']))
 | |
| 
 | |
|     def testGetAsStringWhenRaster(self):
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', datatype=ParameterMultipleInput.TYPE_RASTER)
 | |
| 
 | |
|         # With Path
 | |
|         self.assertEqual(parameter.getAsString('/some/path'), '/some/path')
 | |
| 
 | |
|         # With Layer
 | |
|         layer = QgsRasterLayer('/path/to/myRaster.tif', 'myRaster')
 | |
|         self.assertEqual(parameter.getAsString(layer), '/path/to/myRaster.tif')
 | |
| 
 | |
|         # TODO With Layer Name, instead of Layer object
 | |
| 
 | |
|     def testGetAsStringWhenFile(self):
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', datatype=ParameterMultipleInput.TYPE_FILE)
 | |
|         self.assertEqual(parameter.getAsString('/some/path'), '/some/path')
 | |
| 
 | |
|     def testGetAsStringWhenVector(self):
 | |
|         parameter = ParameterMultipleInput('myName', 'myDesc', datatype=ParameterMultipleInput.TYPE_VECTOR_ANY)
 | |
| 
 | |
|         # With Path
 | |
|         self.assertEqual(parameter.getAsString('/some/path'), '/some/path')
 | |
| 
 | |
|         # With Layer
 | |
|         layer = QgsVectorLayer('/path/to/myVector.shp', 'myVector', 'memory')
 | |
|         self.assertEqual(parameter.getAsString(layer), '/path/to/myVector.shp')
 | |
| 
 | |
|         # TODO With Layer Name, instead of Layer object
 | |
| 
 | |
| 
 | |
| class ParameterNumberTest(unittest.TestCase):
 | |
| 
 | |
|     def testSetValue(self):
 | |
|         parameter = ParameterNumber('myName', 'myDescription')
 | |
|         self.assertTrue(parameter.setValue(5))
 | |
|         self.assertEqual(parameter.value, 5)
 | |
| 
 | |
|     def testSetValueOnlyValidNumbers(self):
 | |
|         parameter = ParameterNumber('myName', 'myDescription')
 | |
|         self.assertFalse(parameter.setValue('not a number'))
 | |
|         self.assertEqual(parameter.value, None)
 | |
| 
 | |
|     def testIsInteger(self):
 | |
|         floatParameter = ParameterNumber('myname', 'myDescription', default=1.0)
 | |
|         self.assertFalse(floatParameter.isInteger)
 | |
|         intParameter = ParameterNumber('myname', 'myDescription', default=10)
 | |
|         self.assertTrue(intParameter.isInteger)
 | |
|         strFloatParameter = ParameterNumber('myname', 'myDescription', default="1.0")
 | |
|         self.assertFalse(strFloatParameter.isInteger)
 | |
|         strIntParameter = ParameterNumber('myname', 'myDescription', default="10")
 | |
|         self.assertTrue(strIntParameter.isInteger)
 | |
| 
 | |
|     def testMaxValue(self):
 | |
|         parameter = ParameterNumber('myName', 'myDescription', maxValue=10)
 | |
|         self.assertFalse(parameter.setValue(11))
 | |
|         self.assertEqual(parameter.value, None)
 | |
|         self.assertTrue(parameter.setValue(10))
 | |
|         self.assertEqual(parameter.value, 10)
 | |
| 
 | |
|     def testMinValue(self):
 | |
|         parameter = ParameterNumber('myName', 'myDescription', minValue=3)
 | |
|         self.assertFalse(parameter.setValue(1))
 | |
|         self.assertEqual(parameter.value, None)
 | |
|         self.assertFalse(parameter.setValue(-2))
 | |
|         self.assertEqual(parameter.value, None)
 | |
|         self.assertTrue(parameter.setValue(3))
 | |
|         self.assertEqual(parameter.value, 3)
 | |
| 
 | |
|     def testOptional(self):
 | |
|         optionalParameter = ParameterNumber('myName', 'myDescription', default=1.0, optional=True)
 | |
|         self.assertEqual(optionalParameter.value, 1.0)
 | |
|         optionalParameter.setValue(5)
 | |
|         self.assertEqual(optionalParameter.value, 5)
 | |
|         self.assertTrue(optionalParameter.setValue(None))
 | |
|         self.assertEqual(optionalParameter.value, None)
 | |
| 
 | |
|         requiredParameter = ParameterNumber('myName', 'myDescription', default=1.0, optional=False)
 | |
|         self.assertEqual(requiredParameter.value, 1.0)
 | |
|         requiredParameter.setValue(5)
 | |
|         self.assertEqual(requiredParameter.value, 5)
 | |
|         self.assertFalse(requiredParameter.setValue(None))
 | |
|         self.assertEqual(requiredParameter.value, 5)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     unittest.main()
 |