def test_keyed_archive_data(self): # This is the structure of a NSKeyedArchive packed plist data = { '$version': 100000, '$objects': [ '$null', { 'pytype': 1, '$class': UID(2), 'NS.string': 'KeyArchive UID Test' }, { '$classname': 'OC_BuiltinPythonUnicode', '$classes': [ 'OC_BuiltinPythonUnicode', 'OC_PythonUnicode', 'NSString', 'NSObject' ], '$classhints': ['OC_PythonString', 'NSString'] } ], '$archiver': 'NSKeyedArchiver', '$top': { 'root': UID(1) } } self.assertEqual(plistlib.loads(TESTDATA["KEYED_ARCHIVE"]), data)
def test_invalid_uid(self): with self.assertRaises(TypeError): UID("not an int") with self.assertRaises(ValueError): UID(2**64) with self.assertRaises(ValueError): UID(-19)
def dict(self, ast, _=None): retval = self._dict_type() for entry in ast: retval[entry.k] = entry.v if self.cfuid and len(retval) == 1 and isinstance(retval.get("CF$UID"), int): return UID(retval["CF$UID"]) return retval
def test_uid(self): data = UID(1) self.assertEqual(plistlib.loads(plistlib.dumps(data, fmt=plistlib.FMT_BINARY)), data) dict_data = { 'uid0': UID(0), 'uid2': UID(2), 'uid8': UID(2 ** 8), 'uid16': UID(2 ** 16), 'uid32': UID(2 ** 32), 'uid63': UID(2 ** 63) } self.assertEqual(plistlib.loads(plistlib.dumps(dict_data, fmt=plistlib.FMT_BINARY)), dict_data)
def test_modified_uid_huge(self): huge_uid = UID(1) huge_uid.data = 2**64 # dodge the size check in the constructor with self.assertRaises(OverflowError): plistlib.dumps(huge_uid, fmt=plistlib.FMT_BINARY)
def test_modified_uid_negative(self): neg_uid = UID(1) neg_uid.data = -1 # dodge the negative check in the constructor with self.assertRaises(ValueError): plistlib.dumps(neg_uid, fmt=plistlib.FMT_BINARY)
def test_uid_copy(self): self.assertEqual(copy.copy(UID(1)), UID(1)) self.assertEqual(copy.deepcopy(UID(1)), UID(1))
def test_uid_pickle(self): for proto in range(pickle.HIGHEST_PROTOCOL + 1): self.assertEqual( pickle.loads(pickle.dumps(UID(19), protocol=proto)), UID(19))
def test_uid_index(self): self.assertEqual(operator.index(UID(1)), 1)
def test_uid_repr(self): self.assertEqual(repr(UID(1)), "UID(1)")
def test_uid_hash(self): self.assertEqual(hash(UID(1)), hash(UID(1)))
def test_uid_eq(self): self.assertEqual(UID(1), UID(1)) self.assertNotEqual(UID(1), UID(2)) self.assertNotEqual(UID(1), "not uid")
def test_uid_data(self): uid = UID(1) self.assertEqual(uid.data, 1)
def uid(self, ast, _=None): return UID(ast)