1from PyObjCTools.TestSupport import *
2import re
3from CoreFoundation import *
4
5
6class TestCFUUIDAPI (TestCase):
7    def testTypes(self):
8        self.assertIsCFType(CFUUIDRef)
9
10    def testTypeID(self):
11        v = CFUUIDGetTypeID()
12        self.assertIsInstance(v, (int, long))
13    def testCreate(self):
14
15        self.assertResultIsCFRetained(CFUUIDCreate)
16        uuid = CFUUIDCreate(None)
17        self.assertIsNot(uuid, None)
18        self.assertIsInstance(uuid, CFUUIDRef)
19        text = CFUUIDCreateString(None, uuid)
20        self.assertIsInstance(text, unicode)
21        m = re.match('^[0-9A-Z]{8}(-[0-9A-Z]{4}){3}-[0-9A-Z]{12}$', text)
22        self.assertIsNot(m, None )
23    def testCreateWithBytes(self):
24        self.assertResultIsCFRetained(CFUUIDCreateWithBytes)
25        uuid = CFUUIDCreateWithBytes(None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
26        self.assertIsNot(uuid, None)
27        self.assertIsInstance(uuid, CFUUIDRef)
28        self.assertResultIsCFRetained(CFUUIDCreateString)
29        text = CFUUIDCreateString(None, uuid)
30        self.assertEqual(text , u'01020304-0506-0708-090A-0B0C0D0E0F10')
31        self.assertRaises(ValueError, CFUUIDCreateWithBytes, None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 300)
32        self.assertRaises(ValueError, CFUUIDCreateWithBytes, None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 300, 16)
33
34    def testCreateFromString(self):
35        self.assertResultIsCFRetained(CFUUIDCreateFromString)
36        uuid1 = CFUUIDCreateFromString(None, u'01020304-0506-0708-090A-0B0C0D0E0F10')
37        self.assertIsNot(uuid1, None)
38        self.assertIsInstance(uuid1, CFUUIDRef)
39        text = CFUUIDCreateString(None, uuid1)
40        self.assertEqual(text , u'01020304-0506-0708-090A-0B0C0D0E0F10')
41        uuid2 = CFUUIDCreateFromString(None, u'01020304-0506-0708-090A-0B0C0D0E0F10')
42        text = CFUUIDCreateString(None, uuid2)
43        self.assertEqual(text , u'01020304-0506-0708-090A-0B0C0D0E0F10')
44        # CFUUID interns values
45        self.assertIs(uuid1, uuid2)
46    def testGetBytes(self):
47        uuid = CFUUIDCreateWithBytes(None, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
48        self.assertIsNot(uuid, None)
49        self.assertIsInstance(uuid, CFUUIDRef)
50        bytes = CFUUIDGetUUIDBytes(uuid)
51        self.assertIsInstance(bytes, CFUUIDBytes)
52        self.assertEqual(bytes.byte0 , 1)
53        self.assertEqual(bytes.byte1 , 2)
54        self.assertEqual(bytes.byte2 , 3)
55        self.assertEqual(bytes.byte3 , 4)
56        self.assertEqual(bytes.byte4 , 5)
57        self.assertEqual(bytes.byte5 , 6)
58        self.assertEqual(bytes.byte6 , 7)
59        self.assertEqual(bytes.byte7 , 8)
60        self.assertEqual(bytes.byte8 , 9)
61        self.assertEqual(bytes.byte9 , 10)
62        self.assertEqual(bytes.byte10 , 11)
63        self.assertEqual(bytes.byte11 , 12)
64        self.assertEqual(bytes.byte12 , 13)
65        self.assertEqual(bytes.byte13 , 14)
66        self.assertEqual(bytes.byte14 , 15)
67        self.assertEqual(bytes.byte15 , 16)
68    def testConstant(self):
69        # This is an interesting one, the result of
70        # CFUUIDGetConstantUUIDWithBytes should not be released.
71
72        uuid = CFUUIDGetConstantUUIDWithBytes(None, *range(16))
73        CFRetain(CFUUIDGetConstantUUIDWithBytes) # Ensure the value won't be released.
74        self.assertIsNot(uuid, None)
75        self.assertIsInstance(uuid, CFUUIDRef)
76        s = CFUUIDCreateString(None, uuid)
77
78        uuid = None
79        del uuid
80
81        uuid = CFUUIDGetConstantUUIDWithBytes(None, *range(16))
82        self.assertIsNot(uuid, None)
83        self.assertIsInstance(uuid, CFUUIDRef)
84        t = CFUUIDCreateString(None, uuid)
85
86        self.assertEqual(s , t)
87    def testCreateFromUUIDBytes(self):
88        bytes = CFUUIDBytes(*range(16, 32))
89        uuid = CFUUIDCreateFromUUIDBytes(None, bytes)
90
91        self.assertIsNot(uuid, None)
92        self.assertIsInstance(uuid, CFUUIDRef)
93        text = CFUUIDCreateString(None, uuid)
94        self.assertEqual(text , u'10111213-1415-1617-1819-1A1B1C1D1E1F' )
95    def testStructs(self):
96        o = CFUUIDBytes()
97        self.assertHasAttr(o, 'byte0')
98        self.assertHasAttr(o, 'byte1')
99        self.assertHasAttr(o, 'byte2')
100        self.assertHasAttr(o, 'byte3')
101        self.assertHasAttr(o, 'byte4')
102        self.assertHasAttr(o, 'byte5')
103        self.assertHasAttr(o, 'byte6')
104        self.assertHasAttr(o, 'byte7')
105        self.assertHasAttr(o, 'byte8')
106        self.assertHasAttr(o, 'byte9')
107        self.assertHasAttr(o, 'byte10')
108        self.assertHasAttr(o, 'byte11')
109        self.assertHasAttr(o, 'byte12')
110        self.assertHasAttr(o, 'byte13')
111        self.assertHasAttr(o, 'byte14')
112        self.assertHasAttr(o, 'byte15')
113if __name__ == "__main__":
114    main()
115