1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3from Foundation import NSCFData
4
5
6class TestData (TestCase):
7    def testTypes(self):
8        self.failUnless(CFDataRef is NSCFData)
9
10    def testTypeID(self):
11        v = CFDataGetTypeID()
12        self.failUnless(v, (int, long))
13
14    def testCreation(self):
15        self.failUnlessArgHasType(CFDataCreate, 1,  'n^v')
16        self.failUnlessArgSizeInArg(CFDataCreate, 1, 2)
17        data = CFDataCreate(None, "hello", 5)
18        self.failUnless(isinstance(data, CFDataRef))
19
20        bytes = buffer("hello world")
21        self.failUnlessArgHasType(CFDataCreateWithBytesNoCopy, 1, 'n^v')
22        self.failUnlessArgSizeInArg(CFDataCreateWithBytesNoCopy, 1, 2)
23        data = CFDataCreateWithBytesNoCopy(None, bytes, 5, kCFAllocatorNull)
24        self.failUnless(isinstance(data, CFDataRef))
25        del data
26
27        data = CFDataCreate(None, "hello", 5)
28        self.failUnless(isinstance(data, CFDataRef))
29        cpy = CFDataCreateCopy(None, data)
30        self.failUnless(isinstance(cpy, CFDataRef))
31
32        cpy2 = CFDataCreateMutableCopy(None, 0, data)
33        self.failUnless(isinstance(cpy2, CFDataRef))
34
35        mut = CFDataCreateMutable(None, 0)
36        self.failUnless(isinstance(mut, CFDataRef))
37
38    def testInspection(self):
39        data = CFDataCreate(None, "hello", 5)
40        self.failUnless(isinstance(data, CFDataRef))
41        mutableData = CFDataCreateMutableCopy(None, 0, data)
42        self.failUnless(isinstance(mutableData, CFDataRef))
43
44        self.failUnless(CFDataGetLength(data) == 5)
45        self.failUnless(CFDataGetLength(mutableData) == 5)
46
47        v = CFDataGetBytePtr(data)
48        self.failUnless(CFDataGetBytePtr(data)[0] == 'h')
49
50        v = CFDataGetMutableBytePtr(mutableData)
51        self.failUnless(v[0] == 'h')
52        v[0] = 'p'
53
54        v = CFDataGetBytePtr(mutableData)
55        self.failUnless(v[0] == 'p')
56
57        self.failUnlessArgHasType(CFDataGetBytes, 2, 'o^v')
58        self.failUnlessArgSizeInArg(CFDataGetBytes, 2, 1)
59        bytes = CFDataGetBytes(data, (1,3), None)
60        self.assertEquals(bytes, 'hello'[1:4])
61
62        CFDataSetLength(mutableData, 3)
63        self.failUnless(CFDataGetLength(mutableData) == 3)
64
65        CFDataIncreaseLength(mutableData, 17)
66        self.failUnless(CFDataGetLength(mutableData) == 20)
67        CFDataSetLength(mutableData, 3)
68
69        self.failUnlessArgHasType(CFDataAppendBytes, 1, 'n^v')
70        self.failUnlessArgSizeInArg(CFDataAppendBytes, 1, 2)
71        CFDataAppendBytes(mutableData, " world", 6)
72        self.failUnless(CFDataGetLength(mutableData) == 9)
73        self.assertEquals(CFDataGetBytes(mutableData, (0, 9), None), 'pel world')
74
75        self.failUnlessArgHasType(CFDataReplaceBytes, 2, 'n^v')
76        self.failUnlessArgSizeInArg(CFDataReplaceBytes, 2, 3)
77        CFDataReplaceBytes(mutableData, (0, 3), "hello", 5)
78        self.assertEquals(CFDataGetBytes(mutableData, (0, 9), None), 'hello world'[:9])
79
80        CFDataDeleteBytes(mutableData, (0, 6))
81        self.assertEquals(CFDataGetBytes(mutableData, (0, 5), None), 'world')
82
83
84if __name__ == "__main__":
85    main()
86