123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- """
- 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.0, 2.0))
- 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.0
- 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.0, 2.0))
- with self.assertRaises(ValueError):
- _check_value(param, -1.0)
- 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 = "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.0, 2.0),
- ]
- param._rawvalue = (1.0, 2.0)
- self.assertEqual("range=1.0,2.0", param.get_bash())
- param._value = [(1.0, 2.0), (3.0, 4.0)]
- param._rawvalue = [(1.0, 2.0), (3.0, 4.0)]
- self.assertEqual("range=1.0,2.0,3.0,4.0", param.get_bash())
- param._value = [(1.0, 2.0), (3.0, 4.0)]
- 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()
|