123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- # -*- coding: utf-8 -*-
- """
- Created on Fri Jul 4 16:32:54 2014
- @author: pietro
- """
- from __future__ import print_function
- from grass.gunittest.case import TestCase
- from grass.gunittest.main import test
- from grass.pygrass.modules.interface.parameter import Parameter, _check_value
- GETTYPE = {
- 'string': str,
- 'integer': int,
- 'float': float,
- 'double': float,
- 'file': str,
- 'all': lambda x: x,
- }
- class TestCheckValueFunction(TestCase):
- def test_single_all(self):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='no', type='all'))
- value = 1
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 1.2
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = "elev"
- self.assertTupleEqual((value, value), _check_value(param, value))
- # test errors
- with self.assertRaises(TypeError):
- _check_value(param, (1, 2))
- def test_single_float_double(self):
- for ptype in ('float', 'double'):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='no', type=ptype))
- value = 1
- self.assertTupleEqual((float(value), value), _check_value(param, value))
- value = 1.2
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = "1"
- self.assertTupleEqual((float(value), value), _check_value(param, value))
- value = "1.35"
- self.assertTupleEqual((float(value), value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(TypeError):
- _check_value(param, (1., 2.))
- def test_multiple_float_double(self):
- for ptype in ('float', 'double'):
- param = Parameter(diz=dict(name='number', required='yes',
- multiple='yes', type=ptype))
- value = (1.4, 2.3)
- self.assertTupleEqual((list(value), value),
- _check_value(param, value))
- value = (1, 2)
- self.assertTupleEqual(([float(v) for v in value], value),
- _check_value(param, value))
- value = ("1", "2")
- self.assertTupleEqual(([float(v) for v in value], value),
- _check_value(param, value))
- value = ("1.4", "2.3")
- self.assertTupleEqual(([float(v) for v in value], value),
- _check_value(param, value))
- value = 1.
- self.assertTupleEqual(([value, ], value),
- _check_value(param, value))
- value = 1
- self.assertTupleEqual(([value, ], value),
- _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(ValueError):
- _check_value(param, ("elev", "slope", "aspect"))
- def test_range_float_double(self):
- for ptype in ('float', 'double'):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='no', type=ptype,
- values=["0.0-2.5", ]))
- value = 1
- self.assertTupleEqual((float(value), value), _check_value(param, value))
- value = 1.2
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = "0"
- self.assertTupleEqual((float(value), value), _check_value(param, value))
- value = "2.5"
- self.assertTupleEqual((float(value), value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(TypeError):
- _check_value(param, (1., 2.))
- with self.assertRaises(ValueError):
- _check_value(param, -1.)
- with self.assertRaises(ValueError):
- _check_value(param, 2.6)
- def test_single_integer(self):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='no', type='integer'))
- value = 1
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 1.2
- self.assertTupleEqual((int(value), value), _check_value(param, value))
- value = "1"
- self.assertTupleEqual((int(value), value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "1.")
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(TypeError):
- _check_value(param, (1, 2))
- def test_multiple_integer(self):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='yes', type='integer'))
- value = (1, 2)
- #import ipdb; ipdb.set_trace()
- self.assertTupleEqual((list(value), value), _check_value(param, value))
- value = (1.2, 2.3)
- self.assertTupleEqual(([int(v) for v in value], value),
- _check_value(param, value))
- value = ("1", "2")
- self.assertTupleEqual(([int(v) for v in value], value),
- _check_value(param, value))
- value = 1
- self.assertTupleEqual(([1, ], value), _check_value(param, value))
- value = 1.2
- self.assertTupleEqual(([int(value), ], value),
- _check_value(param, value))
- value = "1"
- self.assertTupleEqual(([int(value), ], value),
- _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(ValueError):
- _check_value(param, ("elev", "slope", "aspect"))
- def test_keydescvalues(self):
- for ptype in ('integer', 'float'):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='yes',
- keydesc=('range', '(min, max)'),
- type='integer'))
- value = (1, 2)
- self.assertTupleEqual(([value, ], value),
- _check_value(param, value))
- value = [(1, 2), (2, 3)]
- self.assertTupleEqual((value, value), _check_value(param, value))
- with self.assertRaises(TypeError):
- _check_value(param, 1)
- def test_range_integer(self):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='no', type='integer',
- values=["0-10", ]))
- value = 1
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 0
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 10
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 1.2
- self.assertTupleEqual((int(value), value), _check_value(param, value))
- value = "1"
- self.assertTupleEqual((int(value), value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "1.")
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(TypeError):
- _check_value(param, (1, 2))
- with self.assertRaises(ValueError):
- _check_value(param, -1)
- with self.assertRaises(ValueError):
- _check_value(param, 11)
- def test_choice_integer(self):
- param = Parameter(diz=dict(name='int_number', required='yes',
- multiple='no', type='integer',
- values=[2, 4, 6, 8]))
- value = 4
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 2
- self.assertTupleEqual((int(value), value), _check_value(param, value))
- value = "8"
- self.assertTupleEqual((int(value), value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "2.")
- with self.assertRaises(ValueError):
- _check_value(param, "elev")
- with self.assertRaises(TypeError):
- _check_value(param, (1, 2))
- with self.assertRaises(ValueError):
- _check_value(param, 3)
- def test_single_string_file(self):
- for ptype in ('string', 'file'):
- param = Parameter(diz=dict(name='name', required='yes',
- multiple='no', type=ptype))
- value = u'elev'
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = 10
- self.assertTupleEqual((str(value), value),
- _check_value(param, value))
- value = 12.5
- self.assertTupleEqual((str(value), value),
- _check_value(param, value))
- # test errors
- with self.assertRaises(TypeError):
- _check_value(param, ('abc', 'def'))
- def test_multiple_strings(self):
- param = Parameter(diz=dict(name='rastnames', required='yes',
- multiple='yes', type='string'))
- value = ['elev', 'slope', 'aspect']
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = ('elev', 'slope', 'aspect')
- self.assertTupleEqual((list(value), value), _check_value(param, value))
- value = ['1.3', '2.3', '4.5']
- self.assertTupleEqual((value, value), _check_value(param, value))
- value = [1.3, 2.3, 4.5]
- self.assertTupleEqual(([str(v) for v in value], value),
- _check_value(param, value))
- value = (1, 2, 3)
- self.assertTupleEqual(([str(v) for v in value], value),
- _check_value(param, value))
- value = 'elev'
- self.assertTupleEqual(([value, ], value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, ({}, {}, {}))
- def test_choice_string(self):
- values = ["elev", "asp", "slp"]
- param = Parameter(diz=dict(name='rastname', required='yes',
- multiple='no', type='string',
- values=values))
- value = "asp"
- self.assertTupleEqual((value, value), _check_value(param, value))
- # test errors
- with self.assertRaises(ValueError):
- _check_value(param, "2")
- with self.assertRaises(ValueError):
- _check_value(param, "2.")
- with self.assertRaises(TypeError):
- _check_value(param, (1, 2))
- with self.assertRaises(ValueError):
- _check_value(param, "elevation")
- class TestParameterGetBash(TestCase):
- def test_single_float_double(self):
- for ptype in ('float', 'double'):
- param = Parameter(diz=dict(name='number', required='yes',
- multiple='no', type=ptype))
- # set private attributes to skip the check function
- param._value = 1.0
- param._rawvalue = 1.0
- self.assertEqual("number=1.0", param.get_bash())
- param._value = 1.0
- param._rawvalue = "1."
- self.assertEqual("number=1.", param.get_bash())
- def test_multiple_float_double(self):
- for ptype in ('float', 'double'):
- param = Parameter(diz=dict(name='number', required='yes',
- multiple='yes', type=ptype))
- # set private attributes to skip the check function
- param._value = [1.0, ]
- param._rawvalue = 1.0
- self.assertEqual("number=1.0", param.get_bash())
- param._value = [1.0, ]
- param._rawvalue = "1."
- self.assertEqual("number=1.", param.get_bash())
- param._value = [1.0, 2.0, 3.0]
- param._rawvalue = [1.0, 2.0, 3.0]
- self.assertEqual("number=1.0,2.0,3.0", param.get_bash())
- param._value = [1.0, 2.0, 3.0]
- param._rawvalue = ["1.", "2.", "3."]
- self.assertEqual("number=1.,2.,3.", param.get_bash())
- def test_single_string(self):
- param = Parameter(diz=dict(name='rast', required='yes',
- multiple='no', type='string'))
- # set private attributes to skip the check function
- param._value = 'elev'
- param._rawvalue = 'elev'
- self.assertEqual("rast=elev", param.get_bash())
- def test_multiple_strings(self):
- param = Parameter(diz=dict(name='rast', required='yes',
- multiple='yes', type='string'))
- # set private attributes to skip the check function
- param._value = ['elev', 'asp', 'slp']
- param._rawvalue = ['elev', 'asp', 'slp']
- self.assertEqual("rast=elev,asp,slp", param.get_bash())
- param._value = ['elev', ]
- param._rawvalue = 'elev'
- self.assertEqual("rast=elev", param.get_bash())
- def test_keydescvalues(self):
- param = Parameter(diz=dict(name='range', required='yes',
- multiple='yes',
- keydesc=('range', '(min, max)'),
- type='integer'))
- # set private attributes to skip the check function
- param._value = [(1., 2.), ]
- param._rawvalue = (1., 2.)
- self.assertEqual("range=1.0,2.0", param.get_bash())
- param._value = [(1., 2.), (3., 4.)]
- param._rawvalue = [(1., 2.), (3., 4.)]
- self.assertEqual("range=1.0,2.0,3.0,4.0", param.get_bash())
- param._value = [(1., 2.), (3., 4.)]
- param._rawvalue = [('1.0', '2.00'), ('3.000', '4.0000')]
- self.assertEqual("range=1.0,2.00,3.000,4.0000", param.get_bash())
- with self.assertRaises(TypeError):
- _check_value(param, 1)
- if __name__ == '__main__':
- test()
|