import unittest
from CoreFoundation import *
class TestPropertyList (unittest.TestCase):
def testFunctions(self):
dta = CFPropertyListCreateXMLData(None, {u"key": 42, u"key2": 1})
self.failUnless(isinstance(dta, CFDataRef))
v, err = CFPropertyListCreateFromXMLData(None, dta, 0, None)
self.failUnless(err is None)
self.failUnless(isinstance(v, CFDictionaryRef))
self.failUnless('key' in v)
self.failUnless('key2' in v)
self.failUnless(v['key'] == 42)
self.failUnless(v['key2'] == True)
v = CFPropertyListCreateDeepCopy(None, {u"key": 42, u"key2": True}, 0)
self.failUnless(isinstance(v, CFDictionaryRef))
self.failUnless('key' in v)
self.failUnless('key2' in v)
self.failUnless(v['key'] == 42)
self.failUnless(v['key2'] == True)
valid = CFPropertyListIsValid({u"key": 42, u"key2": True}, kCFPropertyListBinaryFormat_v1_0)
self.failUnless(valid is True)
def testStreams(self):
stream = CFWriteStreamCreateWithAllocatedBuffers(kCFAllocatorDefault, kCFAllocatorDefault)
r = CFWriteStreamOpen(stream)
self.failUnless(r)
value = {u'key1': 42, u'key2': 1}
rval, errorString = CFPropertyListWriteToStream(value, stream,
kCFPropertyListXMLFormat_v1_0, None)
self.failUnless(isinstance(rval, (int, long)))
self.failUnless(rval)
self.failUnless(errorString is None)
buf = CFWriteStreamCopyProperty(stream, kCFStreamPropertyDataWritten)
self.failUnless(isinstance(buf, CFDataRef))
buf = CFDataGetBytes(buf, (0, CFDataGetLength(buf)), None)
self.failUnless(isinstance(buf, str))
self.failUnless('key1' in buf)
self.failUnless('42' in buf)
self.failUnless('key2' in buf)
self.failUnless('1' in buf)
stream = CFReadStreamCreateWithBytesNoCopy(None, buf, len(buf), kCFAllocatorNull)
r = CFReadStreamOpen(stream)
self.failUnless(r)
res, format, errorString = CFPropertyListCreateFromStream(None, stream, 0, 0, None, None)
self.assertEquals(format, kCFPropertyListXMLFormat_v1_0)
self.failUnless(errorString is None)
self.assertEquals(res, value)
def testConstants(self):
self.failUnless(kCFPropertyListImmutable == 0)
self.failUnless(kCFPropertyListMutableContainers == 1)
self.failUnless(kCFPropertyListMutableContainersAndLeaves == 2)
self.failUnless(kCFPropertyListOpenStepFormat == 1)
self.failUnless(kCFPropertyListXMLFormat_v1_0 == 100)
self.failUnless(kCFPropertyListBinaryFormat_v1_0 == 200)
if __name__ == "__main__":
unittest.main()