def test_basic_object_hook(self): data = b'O:7:"WP_User":1:{s:8:"username";s:5:"admin";}' user = phpserialize3.loads( data, object_hook=phpserialize3.phpobject, decode_strings=True ) self.assertEqual(user.username, "admin") self.assertEqual(user.__name__, "WP_User")
def test_object_hook(self): class User(object): def __init__(self, username): self.username = username def load_object_hook(name, d): return {"WP_User": User}[name](**d) def dump_object_hook(obj): if isinstance(obj, User): return phpserialize3.phpobject("WP_User", {"username": obj.username}) raise LookupError("unknown object") user = User("test") x = phpserialize3.dumps(user, object_hook=dump_object_hook) y = phpserialize3.loads(x, object_hook=load_object_hook, decode_strings=True) self.assertTrue("WP_User" in x) self.assertEqual(type(y), type(user)) self.assertEqual(y.username, user.username)
def test_dumps_and_loads_list(self): x = phpserialize3.loads(phpserialize3.dumps(list(range(2)))) self.assertEqual(x, [0, 1])
def test_dumps_and_loads_dict(self): self.assertEqual( phpserialize3.loads(phpserialize3.dumps({"a": 1, "b": 2, "c": 3})), {"a": 1, "b": 2, "c": 3}, )
def test_loads_binary(self): self.assertEqual( phpserialize3.loads(b's:3:"\001\002\003";', decode_strings=False), b"\001\002\003", )
def test_loads_unicode(self): self.assertEqual( phpserialize3.loads(b's:23:"Bj\xc3\xb6rk Gu\xc3\xb0mundsd\xc3\xb3ttir";'), b"Bj\xc3\xb6rk Gu\xc3\xb0mundsd\xc3\xb3ttir".decode("utf-8"), )
def test_loads_dict(self): self.assertEqual( phpserialize3.loads('a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;}'), {"a": 1, "b": 2, "c": 3}, )