76 lines
3.4 KiB
Python
76 lines
3.4 KiB
Python
import unittest
|
|
|
|
import hippolyzer.lib.base.serialization as se
|
|
from hippolyzer.lib.base.datatypes import UUID
|
|
from hippolyzer.lib.base.message.message_formatting import HumanMessageSerializer
|
|
from hippolyzer.lib.base.templates import TextureEntrySubfieldSerializer, TEFaceBitfield, TextureEntry
|
|
|
|
EXAMPLE_TE = b'\x89UgG$\xcbC\xed\x92\x0bG\xca\xed\x15F_\x08\xca*\x98:\x18\x02,\r\xf4\x1e\xc6\xf5\x91\x01]\x83\x014' \
|
|
b'\x00\x90i+\x10\x80\xa1\xaa\xa2g\x11o\xa8]\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x00\x00\x00\x80?' \
|
|
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' \
|
|
b'\x00\x00\x00\x00\x00\x00\x00'
|
|
|
|
|
|
class TemplateTests(unittest.TestCase):
|
|
def test_te_round_trips(self):
|
|
deserialized = TextureEntrySubfieldSerializer.deserialize(None, EXAMPLE_TE)
|
|
serialized = TextureEntrySubfieldSerializer.serialize(None, deserialized)
|
|
self.assertEqual(EXAMPLE_TE, serialized)
|
|
|
|
def test_realize_te(self):
|
|
deserialized: TextureEntry = TextureEntrySubfieldSerializer.deserialize(None, EXAMPLE_TE)
|
|
realized = deserialized.realize(num_faces=4)
|
|
self.assertEqual(UUID('ca2a983a-1802-2c0d-f41e-c6f591015d83'), realized["Textures"][3])
|
|
with self.assertRaises(ValueError):
|
|
deserialized.realize(3)
|
|
|
|
def test_face_bitfield_round_trips(self):
|
|
test_val = b"\x81\x03"
|
|
reader = se.BufferReader("!", test_val)
|
|
deserialized = reader.read(TEFaceBitfield)
|
|
|
|
writer = se.BufferWriter("!")
|
|
writer.write(TEFaceBitfield, deserialized)
|
|
self.assertEqual(writer.copy_buffer(), test_val)
|
|
|
|
def test_can_use_templated_pod_message(self):
|
|
pod_te = {
|
|
'Textures': {
|
|
None: '89556747-24cb-43ed-920b-47caed15465f',
|
|
(3,): 'ca2a983a-1802-2c0d-f41e-c6f591015d83',
|
|
(0,): '34009069-2b10-80a1-aaa2-67116fa85dc6'
|
|
},
|
|
'Color': {None: b'\xff\xff\xff\xff'},
|
|
'ScalesS': {None: 1.0},
|
|
'ScalesT': {None: 1.0},
|
|
'OffsetsS': {None: 0.0},
|
|
'OffsetsT': {None: 0.0},
|
|
'Rotation': {None: 0.0},
|
|
'BasicMaterials': {None: {'Bump': 0, 'FullBright': False, 'Shiny': 'OFF'}},
|
|
'MediaFlags': {None: {'WebPage': False, 'TexGen': 'DEFAULT', '_Unused': 0}}, 'Glow': {None: 0},
|
|
'Materials': {None: '00000000-0000-0000-0000-000000000000'},
|
|
}
|
|
msg = HumanMessageSerializer.from_human_string(f"""
|
|
OUT ObjectImage
|
|
[AgentData]
|
|
AgentID = {UUID()}
|
|
SessionID = {UUID()}
|
|
[ObjectData]
|
|
ObjectLocalID = 700966
|
|
MediaURL = b''
|
|
TextureEntry =| {repr(pod_te)}
|
|
""")
|
|
# Make sure from/to_human_string doesn't change meaning
|
|
str_msg = HumanMessageSerializer.to_human_string(msg, beautify=True)
|
|
msg = HumanMessageSerializer.from_human_string(str_msg)
|
|
spec = msg["ObjectData"][0].get_serializer("TextureEntry")
|
|
data_field = msg["ObjectData"]["TextureEntry"]
|
|
# Serialization order and format should match indra's exactly
|
|
self.assertEqual(EXAMPLE_TE, data_field)
|
|
deser = spec.deserialize(None, data_field, pod=True)
|
|
self.assertEqual(deser, pod_te)
|
|
|
|
def test_textureentry_defaults(self):
|
|
te = TextureEntry()
|
|
self.assertEqual(UUID('89556747-24cb-43ed-920b-47caed15465f'), te.Textures[None])
|