mirror of
https://github.com/panda3d/panda3d.git
synced 2026-01-08 16:09:37 -06:00
98 lines
2.3 KiB
Python
98 lines
2.3 KiB
Python
import sys
|
|
import pytest
|
|
from panda3d.core import TextEncoder
|
|
|
|
|
|
def valid_characters():
|
|
"""Generator yielding all valid Unicode code points."""
|
|
|
|
for i in range(0xd800):
|
|
yield chr(i)
|
|
|
|
for i in range(0xe000, sys.maxunicode + 1):
|
|
if i != 0xfeff and i & 0xfffe != 0xfffe:
|
|
yield chr(i)
|
|
|
|
|
|
def test_text_decode_iso8859():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_iso8859)
|
|
|
|
for i in range(255):
|
|
enc = chr(i).encode('latin-1')
|
|
assert len(enc) == 1
|
|
|
|
dec = encoder.decode_text(enc)
|
|
assert len(dec) == 1
|
|
assert ord(dec) == i
|
|
|
|
|
|
def test_text_decode_utf8():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_utf8)
|
|
|
|
for c in valid_characters():
|
|
enc = c.encode('utf-8')
|
|
assert len(enc) <= 4
|
|
|
|
dec = encoder.decode_text(enc)
|
|
assert len(dec) == 1
|
|
assert dec == c
|
|
|
|
|
|
def test_text_decode_utf16be():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_utf16be)
|
|
|
|
for c in valid_characters():
|
|
enc = c.encode('utf-16be')
|
|
|
|
dec = encoder.decode_text(enc)
|
|
assert len(c) == len(dec)
|
|
assert c == dec
|
|
|
|
|
|
def test_text_encode_iso8859():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_iso8859)
|
|
|
|
for i in range(255):
|
|
c = chr(i)
|
|
enc = encoder.encode_wtext(c)
|
|
assert enc == c.encode('latin-1')
|
|
|
|
|
|
def test_text_encode_utf8():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_utf8)
|
|
|
|
for c in valid_characters():
|
|
enc = encoder.encode_wtext(c)
|
|
assert enc == c.encode('utf-8')
|
|
|
|
|
|
def test_text_encode_utf16be():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_utf16be)
|
|
|
|
for c in valid_characters():
|
|
enc = encoder.encode_wtext(c)
|
|
assert enc == c.encode('utf-16-be')
|
|
|
|
|
|
def test_text_append_unicode_char():
|
|
encoder = TextEncoder()
|
|
encoder.set_encoding(TextEncoder.E_iso8859)
|
|
|
|
code_points = []
|
|
for code_point in [0, 1, 127, 128, 255, 256, 0xfffd, 0x10000, 0x10ffff]:
|
|
if code_point <= sys.maxunicode:
|
|
code_points.append(code_point)
|
|
encoder.append_unicode_char(code_point)
|
|
|
|
encoded = encoder.get_wtext()
|
|
assert len(encoded) == len(code_points)
|
|
|
|
for a, b in zip(code_points, encoded):
|
|
assert a == ord(b)
|