test_textencoder.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import sys
  2. import pytest
  3. from panda3d.core import TextEncoder
  4. if sys.version_info >= (3, 0):
  5. unichr = chr
  6. xrange = range
  7. def valid_characters():
  8. """Generator yielding all valid Unicode code points."""
  9. for i in xrange(0xd800):
  10. yield unichr(i)
  11. for i in xrange(0xe000, sys.maxunicode + 1):
  12. if i != 0xfeff and i & 0xfffe != 0xfffe:
  13. yield unichr(i)
  14. def test_text_decode_iso8859():
  15. encoder = TextEncoder()
  16. encoder.set_encoding(TextEncoder.E_iso8859)
  17. for i in xrange(255):
  18. enc = unichr(i).encode('latin-1')
  19. assert len(enc) == 1
  20. dec = encoder.decode_text(enc)
  21. assert len(dec) == 1
  22. assert ord(dec) == i
  23. def test_text_decode_utf8():
  24. encoder = TextEncoder()
  25. encoder.set_encoding(TextEncoder.E_utf8)
  26. for c in valid_characters():
  27. enc = c.encode('utf-8')
  28. assert len(enc) <= 4
  29. dec = encoder.decode_text(enc)
  30. assert len(dec) == 1
  31. assert dec == c
  32. def test_text_decode_utf16be():
  33. encoder = TextEncoder()
  34. encoder.set_encoding(TextEncoder.E_utf16be)
  35. for c in valid_characters():
  36. enc = c.encode('utf-16be')
  37. dec = encoder.decode_text(enc)
  38. assert len(c) == len(dec)
  39. assert c == dec
  40. def test_text_encode_iso8859():
  41. encoder = TextEncoder()
  42. encoder.set_encoding(TextEncoder.E_iso8859)
  43. for i in xrange(255):
  44. c = unichr(i)
  45. enc = encoder.encode_wtext(c)
  46. assert enc == c.encode('latin-1')
  47. def test_text_encode_utf8():
  48. encoder = TextEncoder()
  49. encoder.set_encoding(TextEncoder.E_utf8)
  50. for c in valid_characters():
  51. enc = encoder.encode_wtext(c)
  52. assert enc == c.encode('utf-8')
  53. def test_text_encode_utf16be():
  54. encoder = TextEncoder()
  55. encoder.set_encoding(TextEncoder.E_utf16be)
  56. for c in valid_characters():
  57. enc = encoder.encode_wtext(c)
  58. assert enc == c.encode('utf-16-be')
  59. def test_text_append_unicode_char():
  60. encoder = TextEncoder()
  61. encoder.set_encoding(TextEncoder.E_iso8859)
  62. code_points = []
  63. for code_point in [0, 1, 127, 128, 255, 256, 0xfffd, 0x10000, 0x10ffff]:
  64. if code_point <= sys.maxunicode:
  65. code_points.append(code_point)
  66. encoder.append_unicode_char(code_point)
  67. encoded = encoder.get_wtext()
  68. assert len(encoded) == len(code_points)
  69. for a, b in zip(code_points, encoded):
  70. assert a == ord(b)