1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3 4 5try: 6 long 7except NameError: 8 long = int 9 10 11class TestPropertyList (TestCase): 12 def testFunctions(self): 13 dta = CFPropertyListCreateXMLData(None, {b"key".decode('ascii'): 42, b"key2".decode('ascii'): 1}) 14 self.assertIsInstance(dta, CFDataRef) 15 self.assertArgIsOut(CFPropertyListCreateFromXMLData, 3) 16 v, err = CFPropertyListCreateFromXMLData(None, dta, 0, None) 17 self.assertIs(err, None) 18 self.assertIsInstance(v, CFDictionaryRef) 19 self.assertIn('key', v) 20 self.assertIn('key2', v) 21 self.assertEqual(v['key'] , 42) 22 self.assertEqual(v['key2'] , True) 23 v = CFPropertyListCreateDeepCopy(None, {b"key".decode('ascii'): 42, b"key2".decode('ascii'): True}, 0) 24 self.assertIsInstance(v, CFDictionaryRef) 25 self.assertIn('key', v) 26 self.assertIn('key2', v) 27 self.assertEqual(v['key'] , 42) 28 self.assertEqual(v['key2'] , True) 29 valid = CFPropertyListIsValid({b"key".decode('ascii'): 42, b"key2".decode('ascii'): True}, kCFPropertyListBinaryFormat_v1_0) 30 self.assertIs(valid, True) 31 32 def testStreams(self): 33 stream = CFWriteStreamCreateWithAllocatedBuffers(kCFAllocatorDefault, kCFAllocatorDefault) 34 r = CFWriteStreamOpen(stream) 35 self.assertTrue(r) 36 37 value = {b'key1'.decode('ascii'): 42, b'key2'.decode('ascii'): 1} 38 39 self.assertArgIsOut(CFPropertyListWriteToStream, 3) 40 rval, errorString = CFPropertyListWriteToStream(value, stream, 41 kCFPropertyListXMLFormat_v1_0, None) 42 self.assertIsInstance(rval, (int, long)) 43 self.assertTrue(rval) 44 self.assertIs(errorString, None) 45 buf = CFWriteStreamCopyProperty(stream, kCFStreamPropertyDataWritten) 46 self.assertIsInstance(buf, CFDataRef) 47 buf = CFDataGetBytes(buf, (0, CFDataGetLength(buf)), None) 48 self.assertIsInstance(buf, bytes) 49 self.assertIn(b'<key>key1</key>', buf) 50 self.assertIn(b'<integer>42</integer>', buf) 51 self.assertIn(b'<key>key2</key>', buf) 52 self.assertIn(b'<integer>1</integer>', buf) 53 stream = CFReadStreamCreateWithBytesNoCopy(None, buf, len(buf), kCFAllocatorNull) 54 r = CFReadStreamOpen(stream) 55 self.assertTrue(r) 56 57 self.assertArgIsOut(CFPropertyListCreateFromStream, 4) 58 self.assertArgIsOut(CFPropertyListCreateFromStream, 5) 59 res, format, errorString = CFPropertyListCreateFromStream(None, stream, 0, 0, None, None) 60 self.assertEqual(format, kCFPropertyListXMLFormat_v1_0) 61 self.assertIs(errorString, None) 62 self.assertEqual(res, value) 63 64 def testConstants(self): 65 self.assertEqual(kCFPropertyListImmutable , 0) 66 self.assertEqual(kCFPropertyListMutableContainers , 1) 67 self.assertEqual(kCFPropertyListMutableContainersAndLeaves , 2) 68 69 self.assertEqual(kCFPropertyListOpenStepFormat , 1) 70 self.assertEqual(kCFPropertyListXMLFormat_v1_0 , 100) 71 self.assertEqual(kCFPropertyListBinaryFormat_v1_0 , 200) 72 73 @min_os_level('10.6') 74 def testConstants10_6(self): 75 self.assertEqual(kCFPropertyListReadCorruptError, 3840) 76 self.assertEqual(kCFPropertyListReadUnknownVersionError, 3841) 77 self.assertEqual(kCFPropertyListReadStreamError, 3842) 78 self.assertEqual(kCFPropertyListWriteStreamError, 3851) 79 80 @min_os_level('10.6') 81 def testFunctions10_6(self): 82 dta = CFPropertyListCreateXMLData(None, {b"key".decode('ascii'): 42, b"key2".decode('ascii'): 1}) 83 self.assertIsInstance(dta, CFDataRef) 84 bytes = CFDataGetBytes(dta, (0, CFDataGetLength(dta)), None) 85 self.assertIsNot(bytes, None) 86 self.assertResultIsCFRetained(CFPropertyListCreateWithData) 87 self.assertArgIsOut(CFPropertyListCreateWithData, 3) 88 self.assertArgIsOut(CFPropertyListCreateWithData, 4) 89 v, fmt, err = CFPropertyListCreateWithData(None, dta, 0, None, None) 90 self.assertIsNot(v, None) 91 self.assertIsInstance(fmt, (int, long)) 92 self.assertIs(err, None) 93 stream = CFReadStreamCreateWithBytesNoCopy(None, bytes, len(bytes), kCFAllocatorNull) 94 CFReadStreamOpen(stream) 95 96 self.assertResultIsCFRetained(CFPropertyListCreateWithStream) 97 self.assertArgIsOut(CFPropertyListCreateWithStream, 4) 98 self.assertArgIsOut(CFPropertyListCreateWithStream, 5) 99 v, fmt, err = CFPropertyListCreateWithStream(None, stream, len(bytes), 0, None, None) 100 self.assertIsNot(v, None) 101 self.assertIsInstance(fmt, (int, long)) 102 self.assertIs(err, None) 103 import array 104 buf = array.array('b', b' '*1024) 105 106 stream = CFWriteStreamCreateWithBuffer(None, buf, 1024) 107 CFWriteStreamOpen(stream) 108 109 self.assertArgIsOut(CFPropertyListWrite, 4) 110 cnt, err = CFPropertyListWrite({'key':42}, stream, kCFPropertyListBinaryFormat_v1_0, 0, None) 111 self.assertNotEqual(cnt, 0) 112 self.assertEqual(err, None) 113 114 self.assertResultIsCFRetained(CFPropertyListCreateData) 115 self.assertArgIsOut(CFPropertyListCreateData, 4) 116 dta, err = CFPropertyListCreateData(None, {'key':'value'}, kCFPropertyListBinaryFormat_v1_0, 0, None) 117 self.assertIsInstance(dta, CFDataRef) 118 self.assertEqual(err, None) 119 120if __name__ == "__main__": 121 main() 122