diff --git a/python/plugins/processing/core/parameters.py b/python/plugins/processing/core/parameters.py index 7c9d897848ab..04e3a11de1ba 100644 --- a/python/plugins/processing/core/parameters.py +++ b/python/plugins/processing/core/parameters.py @@ -709,9 +709,10 @@ class ParameterString(Parameter): ESCAPED_NEWLINE = '\\n' def __init__(self, name='', description='', default=None, multiline=False, - optional=False): + optional=False, evaluateExpressions=False): Parameter.__init__(self, name, description, default, optional) self.multiline = parseBool(multiline) + self.evaluateExpressions = parseBool(evaluateExpressions) def setValue(self, obj): if obj is None: diff --git a/python/plugins/processing/gui/AlgorithmDialog.py b/python/plugins/processing/gui/AlgorithmDialog.py index 6b8480ebb25b..45c9408d2e65 100644 --- a/python/plugins/processing/gui/AlgorithmDialog.py +++ b/python/plugins/processing/gui/AlgorithmDialog.py @@ -169,14 +169,16 @@ def setParamValue(self, param, widget, alg=None): return param.setValue(widget.getValue()) elif isinstance(param, ParameterString): if param.multiline: - return param.setValue(unicode(widget.toPlainText())) + text = unicode(widget.toPlainText()) else: text = widget.text() + + if param.evaluateExpressions: try: text = self.evaluateExpression(text) except: pass - return param.setValue(text) + return param.setValue(text) elif isinstance(param, ParameterGeometryPredicate): return param.setValue(widget.value()) else: diff --git a/python/plugins/processing/tests/ParametersTest.py b/python/plugins/processing/tests/ParametersTest.py index 83a2c0add1ce..30ad4580720f 100644 --- a/python/plugins/processing/tests/ParametersTest.py +++ b/python/plugins/processing/tests/ParametersTest.py @@ -36,7 +36,8 @@ ParameterFixedTable, ParameterMultipleInput, ParameterNumber, - ParameterPoint) + ParameterPoint, + ParameterString) from qgis.core import (QgsRasterLayer, QgsVectorLayer) @@ -394,5 +395,28 @@ def testOptional(self): self.assertEqual(requiredParameter.value, 5) +class ParameterStringTest(unittest.TestCase): + + def testSetValue(self): + parameter = ParameterString('myName', 'myDescription') + self.assertTrue(parameter.setValue('test')) + self.assertEqual(parameter.value, 'test') + + def testOptional(self): + optionalParameter = ParameterString('myName', 'myDesc', default='test', optional=True) + self.assertEqual(optionalParameter.value, 'test') + optionalParameter.setValue('check') + self.assertEqual(optionalParameter.value, 'check') + self.assertTrue(optionalParameter.setValue(None)) + self.assertEqual(optionalParameter.value, None) + + requiredParameter = ParameterCrs('myName', 'myDesc', default='test', optional=False) + self.assertEqual(requiredParameter.value, 'test') + requiredParameter.setValue('check') + self.assertEqual(requiredParameter.value, 'check') + self.assertFalse(requiredParameter.setValue(None)) + self.assertEqual(requiredParameter.value, 'check') + + if __name__ == '__main__': unittest.main()