test_parameter.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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. with self.assertRaises(ValueError):
  173. _check_value(param, 3)
  174. def test_single_string_file(self):
  175. for ptype in ('string', 'file'):
  176. param = Parameter(diz=dict(name='name', required='yes',
  177. multiple='no', type=ptype))
  178. value = u'elev'
  179. self.assertTupleEqual((value, value), _check_value(param, value))
  180. value = 10
  181. self.assertTupleEqual((str(value), value),
  182. _check_value(param, value))
  183. value = 12.5
  184. self.assertTupleEqual((str(value), value),
  185. _check_value(param, value))
  186. # test errors
  187. with self.assertRaises(TypeError):
  188. _check_value(param, ('abc', 'def'))
  189. def test_multiple_strings(self):
  190. param = Parameter(diz=dict(name='rastnames', required='yes',
  191. multiple='yes', type='string'))
  192. value = ['elev', 'slope', 'aspect']
  193. self.assertTupleEqual((value, value), _check_value(param, value))
  194. value = ('elev', 'slope', 'aspect')
  195. self.assertTupleEqual((list(value), value), _check_value(param, value))
  196. value = ['1.3', '2.3', '4.5']
  197. self.assertTupleEqual((value, value), _check_value(param, value))
  198. value = [1.3, 2.3, 4.5]
  199. self.assertTupleEqual(([str(v) for v in value], value),
  200. _check_value(param, value))
  201. value = (1, 2, 3)
  202. self.assertTupleEqual(([str(v) for v in value], value),
  203. _check_value(param, value))
  204. # test errors
  205. with self.assertRaises(ValueError):
  206. _check_value(param, ({}, {}, {}))
  207. def test_choice_string(self):
  208. values = ["elev", "asp", "slp"]
  209. param = Parameter(diz=dict(name='rastname', required='yes',
  210. multiple='no', type='string',
  211. values=values))
  212. value="asp"
  213. self.assertTupleEqual((value, value), _check_value(param, value))
  214. # test errors
  215. with self.assertRaises(ValueError):
  216. _check_value(param, "2")
  217. with self.assertRaises(ValueError):
  218. _check_value(param, "2.")
  219. with self.assertRaises(TypeError):
  220. _check_value(param, (1, 2))
  221. with self.assertRaises(ValueError):
  222. _check_value(param, "elevation")
  223. if __name__ == '__main__':
  224. unittest.main()