summaryrefslogtreecommitdiff
path: root/python/test
diff options
context:
space:
mode:
Diffstat (limited to 'python/test')
-rw-r--r--python/test/test_case.py101
-rw-r--r--python/test/test_format.py74
-rw-r--r--python/test/test_pack.py28
-rw-r--r--python/test/test_sequnpack.py36
4 files changed, 239 insertions, 0 deletions
diff --git a/python/test/test_case.py b/python/test/test_case.py
new file mode 100644
index 0000000..d754fb0
--- /dev/null
+++ b/python/test/test_case.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+from nose import main
+from nose.tools import *
+from msgpack import packs, unpacks
+
+def check(length, obj):
+ v = packs(obj)
+ assert_equal(len(v), length, "%r length should be %r but get %r" % (obj, length, len(v)))
+ assert_equal(unpacks(v), obj)
+
+def test_1():
+ for o in [None, True, False, 0, 1, (1 << 6), (1 << 7) - 1, -1,
+ -((1<<5)-1), -(1<<5)]:
+ check(1, o)
+
+def test_2():
+ for o in [1 << 7, (1 << 8) - 1,
+ -((1<<5)+1), -(1<<7)
+ ]:
+ check(2, o)
+
+def test_3():
+ for o in [1 << 8, (1 << 16) - 1,
+ -((1<<7)+1), -(1<<15)]:
+ check(3, o)
+
+def test_5():
+ for o in [1 << 16, (1 << 32) - 1,
+ -((1<<15)+1), -(1<<31)]:
+ check(5, o)
+
+def test_9():
+ for o in [1 << 32, (1 << 64) - 1,
+ -((1<<31)+1), -(1<<63),
+ 1.0, 0.1, -0.1, -1.0]:
+ check(9, o)
+
+
+def check_raw(overhead, num):
+ check(num + overhead, " " * num)
+
+def test_fixraw():
+ check_raw(1, 0)
+ check_raw(1, (1<<5) - 1)
+
+def test_raw16():
+ check_raw(3, 1<<5)
+ check_raw(3, (1<<16) - 1)
+
+def test_raw32():
+ check_raw(5, 1<<16)
+
+
+def check_array(overhead, num):
+ check(num + overhead, [None] * num)
+
+def test_fixarray():
+ check_array(1, 0)
+ check_array(1, (1 << 4) - 1)
+
+def test_array16():
+ check_array(3, 1 << 4)
+ check_array(3, (1<<16)-1)
+
+def test_array32():
+ check_array(5, (1<<16))
+
+
+def match(obj, buf):
+ assert_equal(packs(obj), buf)
+ assert_equal(unpacks(buf), obj)
+
+def test_match():
+ cases = [
+ (None, '\xc0'),
+ (False, '\xc2'),
+ (True, '\xc3'),
+ (0, '\x00'),
+ (127, '\x7f'),
+ (128, '\xcc\x80'),
+ (256, '\xcd\x01\x00'),
+ (-1, '\xff'),
+ (-33, '\xd0\xdf'),
+ (-129, '\xd1\xff\x7f'),
+ ({1:1}, '\x81\x01\x01'),
+ (1.0, "\xcb\x3f\xf0\x00\x00\x00\x00\x00\x00"),
+ ([], '\x90'),
+ (range(15),"\x9f\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e"),
+ (range(16),"\xdc\x00\x10\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"),
+ ({}, '\x80'),
+ (dict([(x,x) for x in range(15)]), '\x8f\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07\x07\x08\x08\t\t\n\n\x0b\x0b\x0c\x0c\r\r\x0e\x0e'),
+ (dict([(x,x) for x in range(16)]), '\xde\x00\x10\x00\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x06\x07\x07\x08\x08\t\t\n\n\x0b\x0b\x0c\x0c\r\r\x0e\x0e\x0f\x0f'),
+ ]
+
+ for v, p in cases:
+ match(v, p)
+
+if __name__ == '__main__':
+ main()
diff --git a/python/test/test_format.py b/python/test/test_format.py
new file mode 100644
index 0000000..009a764
--- /dev/null
+++ b/python/test/test_format.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+from nose import main
+from nose.tools import *
+from msgpack import unpacks
+
+def check(src, should):
+ assert_equal(unpacks(src), should)
+
+def testSimpleValue():
+ check("\x93\xc0\xc2\xc3",
+ [None, False, True])
+
+def testFixnum():
+ check("\x92\x93\x00\x40\x7f\x93\xe0\xf0\xff",
+ [[0,64,127], [-32,-16,-1]]
+ )
+
+def testFixArray():
+ check("\x92\x90\x91\x91\xc0",
+ [[],[[None]]],
+ )
+
+def testFixRaw():
+ check("\x94\xa0\xa1a\xa2bc\xa3def",
+ ["", "a", "bc", "def"],
+ )
+
+def testFixMap():
+ check(
+ "\x82\xc2\x81\xc0\xc0\xc3\x81\xc0\x80",
+ {False: {None: None}, True:{None:{}}},
+ )
+
+def testUnsignedInt():
+ check(
+ "\x99\xcc\x00\xcc\x80\xcc\xff\xcd\x00\x00\xcd\x80\x00"
+ "\xcd\xff\xff\xce\x00\x00\x00\x00\xce\x80\x00\x00\x00"
+ "\xce\xff\xff\xff\xff",
+ [0, 128, 255, 0, 32768, 65535, 0, 2147483648, 4294967295],
+ )
+
+def testSignedInt():
+ check("\x99\xd0\x00\xd0\x80\xd0\xff\xd1\x00\x00\xd1\x80\x00"
+ "\xd1\xff\xff\xd2\x00\x00\x00\x00\xd2\x80\x00\x00\x00"
+ "\xd2\xff\xff\xff\xff",
+ [0, -128, -1, 0, -32768, -1, 0, -2147483648, -1])
+
+def testRaw():
+ check("\x96\xda\x00\x00\xda\x00\x01a\xda\x00\x02ab\xdb\x00\x00"
+ "\x00\x00\xdb\x00\x00\x00\x01a\xdb\x00\x00\x00\x02ab",
+ ["", "a", "ab", "", "a", "ab"])
+
+def testArray():
+ check("\x96\xdc\x00\x00\xdc\x00\x01\xc0\xdc\x00\x02\xc2\xc3\xdd\x00"
+ "\x00\x00\x00\xdd\x00\x00\x00\x01\xc0\xdd\x00\x00\x00\x02"
+ "\xc2\xc3",
+ [[], [None], [False,True], [], [None], [False,True]])
+
+def testMap():
+ check(
+ "\x96"
+ "\xde\x00\x00"
+ "\xde\x00\x01\xc0\xc2"
+ "\xde\x00\x02\xc0\xc2\xc3\xc2"
+ "\xdf\x00\x00\x00\x00"
+ "\xdf\x00\x00\x00\x01\xc0\xc2"
+ "\xdf\x00\x00\x00\x02\xc0\xc2\xc3\xc2",
+ [{}, {None: False}, {True: False, None: False}, {},
+ {None: False}, {True: False, None: False}])
+
+if __name__ == '__main__':
+ main()
diff --git a/python/test/test_pack.py b/python/test/test_pack.py
new file mode 100644
index 0000000..86badb5
--- /dev/null
+++ b/python/test/test_pack.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+from nose import main
+from nose.tools import *
+
+from msgpack import packs, unpacks
+
+def check(data):
+ re = unpacks(packs(data))
+ assert_equal(re, data)
+
+def testPack():
+ test_data = [
+ 0, 1, 127, 128, 255, 256, 65535, 65536,
+ -1, -32, -33, -128, -129, -32768, -32769,
+ 1.0,
+ "", "a", "a"*31, "a"*32,
+ None, True, False,
+ [], [[]], [[], None],
+ {None: 0},
+ (1<<23),
+ ]
+ for td in test_data:
+ check(td)
+
+if __name__ == '__main__':
+ main()
diff --git a/python/test/test_sequnpack.py b/python/test/test_sequnpack.py
new file mode 100644
index 0000000..789ccd2
--- /dev/null
+++ b/python/test/test_sequnpack.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+from __future__ import unicode_literals, print_function
+
+from msgpack import Unpacker
+
+def test_foobar():
+ unpacker = Unpacker(read_size=3)
+ unpacker.feed(b'foobar')
+ assert unpacker.unpack() == ord('f')
+ assert unpacker.unpack() == ord('o')
+ assert unpacker.unpack() == ord('o')
+ assert unpacker.unpack() == ord('b')
+ assert unpacker.unpack() == ord('a')
+ assert unpacker.unpack() == ord('r')
+ try:
+ o = unpacker.unpack()
+ print("Oops!", o)
+ assert 0
+ except StopIteration:
+ assert 1
+ else:
+ assert 0
+ unpacker.feed(b'foo')
+ unpacker.feed(b'bar')
+
+ k = 0
+ for o, e in zip(unpacker, b'foobarbaz'):
+ assert o == ord(e)
+ k += 1
+ assert k == len(b'foobar')
+
+if __name__ == '__main__':
+ test_foobar()
+