test_utils.py 3.2 KB

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