def test_self_referential_dictionary(self): s1 = NSString.stringWithString_('hello') s2 = NSString.stringWithString_('world') a = NSMutableDictionary.dictionary() a.setValue_forKey_(s1, s2) a.setValue_forKey_(a, s1) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertEqual(b.valueForKey_(s2), s1) self.assertIs(b.valueForKey_(s1), b)
def test_self_referential_array(self): s1 = NSString.stringWithString_('hello') s2 = NSString.stringWithString_('world') a = NSMutableArray.arrayWithArray_([s1, s2]) a.addObject_(a) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertEqual(b[0], s1) self.assertEqual(b[1], s2) self.assertIs(b[2], b)
def test_more_state(self): a = with_getstate(1.5) self.assertEqual(a.value, 1.5) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, float) a = with_getstate(42) self.assertEqual(a.value, 42) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, (int, long)) a = with_getstate(1<<100) self.assertEqual(a.value, 1<<100) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, (int, long)) a = with_getstate((1,2)) self.assertEqual(a.value, (1,2)) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, tuple) a = only_getstate({'a':42, 'b':9, NSString('otherstr'): 'b'}, {'c': 4, 'd': 7, 42: 'b', 'a': 1, NSString('nsstr'): NSString('xx') }) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, only_getstate) self.assertEqual(b.__dict__, { #'_slots': None, #'_kwds': None, 'a': 42, 'b': 9, 'c': 4, 'd': 7, 42: 'b', 'nsstr': 'xx', 'otherstr': 'b', }) for k in b.__dict__: self.assertNotIsInstance(k, objc.pyobjc_unicode) if sys.version_info[0] == 3: self.assertNotIsInstance(k, bytes) a = with_reduce_func([1,2], (3,4), {'a': 4}, {'d', 'e'}, frozenset(['f']), id) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_reduce_func) self.assertEqual(a.args, b.args) self.assertIsInstance(b.args[0], list) self.assertIsInstance(b.args[1], tuple) self.assertIsInstance(b.args[2], dict) self.assertIsInstance(b.args[3], set) self.assertIsInstance(b.args[4], frozenset)
def test_more_state(self): a = with_getstate(1.5) self.assertEqual(a.value, 1.5) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, float) a = with_getstate(42) self.assertEqual(a.value, 42) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, int) a = with_getstate(1 << 100) self.assertEqual(a.value, 1 << 100) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, int) a = with_getstate((1, 2)) self.assertEqual(a.value, (1, 2)) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_getstate) self.assertEqual(a.value, b.value) self.assertIsInstance(b.value, tuple) a = only_getstate( {"a": 42, "b": 9, NSString("otherstr"): "b"}, {"c": 4, "d": 7, 42: "b", "a": 1, NSString("nsstr"): NSString("xx")}, ) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, only_getstate) self.assertEqual( b.__dict__, {"a": 42, "b": 9, "c": 4, "d": 7, 42: "b", "nsstr": "xx", "otherstr": "b"}, ) for k in b.__dict__: self.assertNotIsInstance(k, objc.pyobjc_unicode) self.assertNotIsInstance(k, bytes) a = with_reduce_func([1, 2], (3, 4), {"a": 4}, {"d", "e"}, frozenset(["f"]), id) buf = self.dumps(a) self.assertIsInstance(buf, NSData) b = self.loads(buf) self.assertIsInstance(b, with_reduce_func) self.assertEqual(a.args, b.args) self.assertIsInstance(b.args[0], list) self.assertIsInstance(b.args[1], tuple) self.assertIsInstance(b.args[2], dict) self.assertIsInstance(b.args[3], set) self.assertIsInstance(b.args[4], frozenset)