test_parameter.py 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Fri Jul 4 16:32:54 2014
  4. @author: pietro
  5. """
  6. from __future__ import print_function
  7. import unittest
  8. from grass.pygrass.modules.interface.parameter import Parameter, _check_value
  9. GETTYPE = {
  10. 'string': str,
  11. 'integer': int,
  12. 'float': float,
  13. 'double': float,
  14. 'file': str,
  15. 'all': lambda x: x,
  16. }
  17. class TestCheckValueFunction(unittest.TestCase):
  18. def test_single_all(self):
  19. param = Parameter(diz=dict(name='int_number', required='yes',
  20. multiple='no', type='all'))
  21. value = 1
  22. self.assertTupleEqual((value, value), _check_value(param, value))
  23. value = 1.2
  24. self.assertTupleEqual((value, value), _check_value(param, value))
  25. value = "elev"
  26. self.assertTupleEqual((value, value), _check_value(param, value))
  27. # test errors
  28. with self.assertRaises(TypeError):
  29. _check_value(param, (1, 2))
  30. def test_single_float_double(self):
  31. for ptype in ('float', 'double'):
  32. param = Parameter(diz=dict(name='int_number', required='yes',
  33. multiple='no', type=ptype))
  34. value = 1
  35. self.assertTupleEqual((float(value), value), _check_value(param, value))
  36. value = 1.2
  37. self.assertTupleEqual((value, value), _check_value(param, value))
  38. value = "1"
  39. self.assertTupleEqual((float(value), value), _check_value(param, value))
  40. value = "1.35"
  41. self.assertTupleEqual((float(value), value), _check_value(param, value))
  42. # test errors
  43. with self.assertRaises(ValueError):
  44. _check_value(param, "elev")
  45. with self.assertRaises(TypeError):
  46. _check_value(param, (1., 2.))
  47. def test_multiple_float_double(self):
  48. for ptype in ('float', 'double'):
  49. param = Parameter(diz=dict(name='number', required='yes',
  50. multiple='yes', type=ptype))
  51. value = (1.4, 2.3)
  52. self.assertTupleEqual((list(value), value),
  53. _check_value(param, value))
  54. value = (1, 2)
  55. self.assertTupleEqual(([float(v) for v in value], value),
  56. _check_value(param, value))
  57. value = ("1", "2")
  58. self.assertTupleEqual(([float(v) for v in value], value),
  59. _check_value(param, value))
  60. value = ("1.4", "2.3")
  61. self.assertTupleEqual(([float(v) for v in value], value),
  62. _check_value(param, value))
  63. # test errors
  64. with self.assertRaises(TypeError):
  65. _check_value(param, 1.)
  66. with self.assertRaises(TypeError):
  67. _check_value(param, 1)
  68. with self.assertRaises(ValueError):
  69. _check_value(param, ("elev", "slope", "aspect"))
  70. def test_range_float_double(self):
  71. for ptype in ('float', 'double'):
  72. param = Parameter(diz=dict(name='int_number', required='yes',
  73. multiple='no', type=ptype,
  74. values=["0.0-2.5", ]))
  75. value = 1
  76. self.assertTupleEqual((float(value), value), _check_value(param, value))
  77. value = 1.2
  78. self.assertTupleEqual((value, value), _check_value(param, value))
  79. value = "0"
  80. self.assertTupleEqual((float(value), value), _check_value(param, value))
  81. value = "2.5"
  82. self.assertTupleEqual((float(value), value), _check_value(param, value))
  83. # test errors
  84. with self.assertRaises(ValueError):
  85. _check_value(param, "elev")
  86. with self.assertRaises(TypeError):
  87. _check_value(param, (1., 2.))
  88. with self.assertRaises(ValueError):
  89. _check_value(param, -1.)
  90. with self.assertRaises(ValueError):
  91. _check_value(param, 2.6)
  92. def test_single_integer(self):
  93. param = Parameter(diz=dict(name='int_number', required='yes',
  94. multiple='no', type='integer'))
  95. value = 1
  96. self.assertTupleEqual((value, value), _check_value(param, value))
  97. value = 1.2
  98. self.assertTupleEqual((int(value), value), _check_value(param, value))
  99. value = "1"
  100. self.assertTupleEqual((int(value), value), _check_value(param, value))
  101. # test errors
  102. with self.assertRaises(ValueError):
  103. _check_value(param, "1.")
  104. with self.assertRaises(ValueError):
  105. _check_value(param, "elev")
  106. with self.assertRaises(TypeError):
  107. _check_value(param, (1, 2))
  108. def test_multiple_integer(self):
  109. param = Parameter(diz=dict(name='int_number', required='yes',
  110. multiple='yes', type='integer'))
  111. value = (1, 2)
  112. self.assertTupleEqual((list(value), value), _check_value(param, value))
  113. value = (1.2, 2.3)
  114. self.assertTupleEqual(([int(v) for v in value], value),
  115. _check_value(param, value))
  116. value = ("1", "2")
  117. self.assertTupleEqual(([int(v) for v in value], value),
  118. _check_value(param, value))
  119. # test errors
  120. with self.assertRaises(TypeError):
  121. _check_value(param, 1)
  122. with self.assertRaises(TypeError):
  123. _check_value(param, 1.0)
  124. with self.assertRaises(TypeError):
  125. _check_value(param, "1.")
  126. with self.assertRaises(TypeError):
  127. _check_value(param, "elev")
  128. with self.assertRaises(ValueError):
  129. _check_value(param, ("elev", "slope", "aspect"))
  130. def test_range_integer(self):
  131. param = Parameter(diz=dict(name='int_number', required='yes',
  132. multiple='no', type='integer',
  133. values=["0-10", ]))
  134. value = 1
  135. self.assertTupleEqual((value, value), _check_value(param, value))
  136. value = 0
  137. self.assertTupleEqual((value, value), _check_value(param, value))
  138. value = 10
  139. self.assertTupleEqual((value, value), _check_value(param, value))
  140. value = 1.2
  141. self.assertTupleEqual((int(value), value), _check_value(param, value))
  142. value = "1"
  143. self.assertTupleEqual((int(value), value), _check_value(param, value))
  144. # test errors
  145. with self.assertRaises(ValueError):
  146. _check_value(param, "1.")
  147. with self.assertRaises(ValueError):
  148. _check_value(param, "elev")
  149. with self.assertRaises(TypeError):
  150. _check_value(param, (1, 2))
  151. with self.assertRaises(ValueError):
  152. _check_value(param, -1)
  153. with self.assertRaises(ValueError):
  154. _check_value(param, 11)
  155. def test_choice_integer(self):
  156. param = Parameter(diz=dict(name='int_number', required='yes',
  157. multiple='no', type='integer',
  158. values=[2, 4, 6, 8]))
  159. value = 4
  160. self.assertTupleEqual((value, value), _check_value(param, value))
  161. value = 2
  162. self.assertTupleEqual((int(value), value), _check_value(param, value))
  163. value = "8"
  164. self.assertTupleEqual((int(value), value), _check_value(param, value))
  165. # test errors
  166. with self.assertRaises(ValueError):
  167. _check_value(param, "2.")
  168. with self.assertRaises(ValueError):
  169. _check_value(param, "elev")
  170. with self.assertRaises(TypeError):
  171. _check_value(param, (1, 2))
  172. #import ipdb; ipdb.set_trace()
  173. with self.assertRaises(ValueError):
  174. _check_value(param, 3)
  175. def test_single_string_file(self):
  176. for ptype in ('string', 'file'):
  177. param = Parameter(diz=dict(name='name', required='yes',
  178. multiple='no', type=ptype))
  179. value = u'elev'
  180. self.assertTupleEqual((value, value), _check_value(param, value))
  181. # test errors
  182. with self.assertRaises(ValueError):
  183. _check_value(param, 1)
  184. with self.assertRaises(ValueError):
  185. _check_value(param, 1.0)
  186. with self.assertRaises(TypeError):
  187. _check_value(param, ('abc', 'def'))
  188. def test_multiple_strings(self):
  189. param = Parameter(diz=dict(name='rastnames', required='yes',
  190. multiple='yes', type='string'))
  191. value = ['elev', 'slope', 'aspect']
  192. self.assertTupleEqual((value, value), _check_value(param, value))
  193. value = ('elev', 'slope', 'aspect')
  194. self.assertTupleEqual((list(value), value), _check_value(param, value))
  195. value = ['1.3', '2.3', '4.5']
  196. self.assertTupleEqual((value, value), _check_value(param, value))
  197. # test errors
  198. with self.assertRaises(ValueError):
  199. _check_value(param, (1, 2, 3))
  200. def test_choice_string(self):
  201. values = ["elev", "asp", "slp"]
  202. param = Parameter(diz=dict(name='rastname', required='yes',
  203. multiple='no', type='string',
  204. values=values))
  205. value="asp"
  206. self.assertTupleEqual((value, value), _check_value(param, value))
  207. # test errors
  208. with self.assertRaises(ValueError):
  209. _check_value(param, "2")
  210. with self.assertRaises(ValueError):
  211. _check_value(param, "2.")
  212. with self.assertRaises(TypeError):
  213. _check_value(param, (1, 2))
  214. with self.assertRaises(ValueError):
  215. _check_value(param, "elevation")
  216. if __name__ == '__main__':
  217. unittest.main()