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