1from PyObjCTools.TestSupport import * 2from CoreFoundation import * 3 4 5class TestPropertyList (TestCase): 6 def testFunctions(self): 7 dta = CFPropertyListCreateXMLData(None, {u"key": 42, u"key2": 1}) 8 self.failUnless(isinstance(dta, CFDataRef)) 9 10 self.failUnlessArgIsOut(CFPropertyListCreateFromXMLData, 3) 11 v, err = CFPropertyListCreateFromXMLData(None, dta, 0, None) 12 self.failUnless(err is None) 13 self.failUnless(isinstance(v, CFDictionaryRef)) 14 self.failUnless('key' in v) 15 self.failUnless('key2' in v) 16 self.failUnless(v['key'] == 42) 17 self.failUnless(v['key2'] == True) 18 19 v = CFPropertyListCreateDeepCopy(None, {u"key": 42, u"key2": True}, 0) 20 self.failUnless(isinstance(v, CFDictionaryRef)) 21 self.failUnless('key' in v) 22 self.failUnless('key2' in v) 23 self.failUnless(v['key'] == 42) 24 self.failUnless(v['key2'] == True) 25 26 valid = CFPropertyListIsValid({u"key": 42, u"key2": True}, kCFPropertyListBinaryFormat_v1_0) 27 self.failUnless(valid is True) 28 29 def testStreams(self): 30 31 stream = CFWriteStreamCreateWithAllocatedBuffers(kCFAllocatorDefault, kCFAllocatorDefault) 32 r = CFWriteStreamOpen(stream) 33 self.failUnless(r) 34 35 value = {u'key1': 42, u'key2': 1} 36 37 self.failUnlessArgIsOut(CFPropertyListWriteToStream, 3) 38 rval, errorString = CFPropertyListWriteToStream(value, stream, 39 kCFPropertyListXMLFormat_v1_0, None) 40 self.failUnless(isinstance(rval, (int, long))) 41 self.failUnless(rval) 42 self.failUnless(errorString is None) 43 44 buf = CFWriteStreamCopyProperty(stream, kCFStreamPropertyDataWritten) 45 self.failUnless(isinstance(buf, CFDataRef)) 46 buf = CFDataGetBytes(buf, (0, CFDataGetLength(buf)), None) 47 self.failUnless(isinstance(buf, str)) 48 49 self.failUnless('<key>key1</key>' in buf) 50 self.failUnless('<integer>42</integer>' in buf) 51 self.failUnless('<key>key2</key>' in buf) 52 self.failUnless('<integer>1</integer>' in buf) 53 54 stream = CFReadStreamCreateWithBytesNoCopy(None, buf, len(buf), kCFAllocatorNull) 55 r = CFReadStreamOpen(stream) 56 self.failUnless(r) 57 58 self.failUnlessArgIsOut(CFPropertyListCreateFromStream, 4) 59 self.failUnlessArgIsOut(CFPropertyListCreateFromStream, 5) 60 res, format, errorString = CFPropertyListCreateFromStream(None, stream, 0, 0, None, None) 61 self.assertEquals(format, kCFPropertyListXMLFormat_v1_0) 62 self.failUnless(errorString is None) 63 self.assertEquals(res, value) 64 65 66 67 def testConstants(self): 68 self.failUnless(kCFPropertyListImmutable == 0) 69 self.failUnless(kCFPropertyListMutableContainers == 1) 70 self.failUnless(kCFPropertyListMutableContainersAndLeaves == 2) 71 72 self.failUnless(kCFPropertyListOpenStepFormat == 1) 73 self.failUnless(kCFPropertyListXMLFormat_v1_0 == 100) 74 self.failUnless(kCFPropertyListBinaryFormat_v1_0 == 200) 75 76 77 78 79if __name__ == "__main__": 80 main() 81