summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_extension.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/test_extension.py b/test/test_extension.py
new file mode 100644
index 0000000..45e6027
--- /dev/null
+++ b/test/test_extension.py
@@ -0,0 +1,24 @@
+import array
+import msgpack
+
+def test_extension_type():
+ class MyPacker(msgpack.Packer):
+ def handle_extended_type(self, obj):
+ if isinstance(obj, array.array):
+ fmt = "ext 32"
+ typecode = 123 # application specific typecode
+ data = obj.tostring()
+ return fmt, typecode, data
+
+ class MyUnpacker(msgpack.Unpacker):
+ def handle_extended_type(self, typecode, data):
+ assert typecode == 123
+ obj = array.array('d')
+ obj.fromstring(data)
+ return obj
+
+ obj = [42, 'hello', array.array('d', [1.1, 2.2, 3.3])]
+ s = msgpack.packb(obj, MyPacker)
+ obj2 = msgpack.unpackb(s, MyUnpacker)
+ assert obj == obj2
+