open_toontown_panda3d/tests/putil/test_custom_writable.py

55 lines
1.3 KiB
Python

from panda3d.core import TypeRegistry, TypedWritable
from panda3d.core import DatagramBuffer, BamReader, BamWriter
import sys
class CustomObject(TypedWritable):
def __init__(self):
self.field = 0
def get_class_type():
registry = TypeRegistry.ptr()
handle = registry.register_dynamic_type("CustomObject")
registry.record_derivation(handle, TypedWritable)
return handle
def write_datagram(self, writer, dg):
dg.add_uint8(self.field)
def fillin(self, scan, reader):
self.field = scan.get_uint8()
@staticmethod
def make_from_bam(scan, reader):
obj = CustomObject()
obj.fillin(scan, reader)
return obj
BamReader.register_factory(CustomObject.get_class_type(), CustomObject.make_from_bam)
def test_typed_writable_subclass():
obj = CustomObject()
obj.field = 123
base_rc = sys.getrefcount(obj)
assert obj.get_type() == CustomObject.get_class_type()
assert obj.type == CustomObject.get_class_type()
buf = DatagramBuffer()
writer = BamWriter(buf)
writer.init()
writer.write_object(obj)
del writer
reader = BamReader(buf)
reader.init()
obj = reader.read_object()
assert sys.getrefcount(obj) == base_rc + 1
reader.resolve()
del reader
assert sys.getrefcount(obj) == base_rc
assert obj.field == 123