test_textencoder.py 2.3 KB

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