test_utils.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import sys
  4. from grass.gunittest.case import TestCase
  5. from grass.gunittest.main import test
  6. from grass.script import utils
  7. class EnvironChange(TestCase):
  8. env = dict()
  9. NOT_FOUND = 'Not found!'
  10. def setUp(self):
  11. self.original_env = {k: os.environ.get(k, self.NOT_FOUND)
  12. for k in self.env.keys()}
  13. for k, v in self.env.items():
  14. os.environ[k] = v
  15. def tearDown(self):
  16. for k, v in self.env.items():
  17. oval = self.original_env[k]
  18. if oval == self.NOT_FOUND:
  19. os.environ.pop(k)
  20. else:
  21. os.environ[k] = oval
  22. class LcAllC(EnvironChange):
  23. env = dict(LC_ALL='C')
  24. class TestEncode(TestCase):
  25. """Tests function `encode` that convert value to bytes."""
  26. def test_bytes(self):
  27. self.assertEqual(b'text', utils.encode(b'text'))
  28. def test_unicode(self):
  29. self.assertEqual(b'text', utils.encode(u'text'))
  30. def test_bytes_garbage_in_out(self):
  31. """If the input is bytes we should not touch it for encoding"""
  32. self.assertEqual(b'P\xc5\x99\xc3\xad\xc5\xa1ern\xc3\xbd k\xc5\xaf\xc5\x88',
  33. utils.encode('Příšerný kůň'))
  34. def test_int(self):
  35. """If the input is an integer return bytes"""
  36. if sys.version_info.major >= 3:
  37. self.assertRaises(TypeError, utils.encode, 1234567890)
  38. else:
  39. self.assertEqual('1234567890', utils.encode(1234567890))
  40. def test_float(self):
  41. """If the input is a float return bytes"""
  42. if sys.version_info.major >= 3:
  43. self.assertRaises(TypeError, utils.encode, 12345.6789)
  44. else:
  45. self.assertEqual('12345.6789', utils.encode(12345.6789))
  46. def test_none(self):
  47. """If the input is a boolean return bytes"""
  48. if sys.version_info.major >= 3:
  49. self.assertRaises(TypeError, utils.encode, None)
  50. else:
  51. self.assertEqual('None', utils.encode(None))
  52. class TestDecode(TestCase):
  53. """Tests function `decode` that converts value to unicode."""
  54. def test_bytes(self):
  55. self.assertEqual(u'text', utils.decode(b'text'))
  56. def test_unicode(self):
  57. self.assertEqual(u'text', utils.decode(u'text'))
  58. def test_int(self):
  59. """If the input is an integer return bytes"""
  60. if sys.version_info.major >= 3:
  61. self.assertRaises(TypeError, utils.decode, 1234567890)
  62. else:
  63. self.assertEqual(u'1234567890', utils.decode(1234567890))
  64. def test_float(self):
  65. """If the input is a float return bytes"""
  66. if sys.version_info.major >= 3:
  67. self.assertRaises(TypeError, utils.decode, 12345.6789)
  68. else:
  69. self.assertEqual(u'12345.6789', utils.decode(12345.6789))
  70. def test_none(self):
  71. """If the input is a boolean return bytes"""
  72. if sys.version_info.major >= 3:
  73. self.assertRaises(TypeError, utils.decode, None)
  74. else:
  75. self.assertEqual(u'None', utils.decode(None))
  76. class TestEncodeLcAllC(TestEncode, LcAllC):
  77. pass
  78. class TestDecodeLcAllC(TestDecode, LcAllC):
  79. pass
  80. if __name__ == '__main__':
  81. test()