1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4import array
5import sys
6
7if sys.version_info[0] != 2:
8    def buffer(value):
9        if isinstance(value, bytes):
10            return value
11        return value.encode('latin1')
12
13class TestCGColorSpace (TestCase):
14    def testConstants(self):
15        self.assertEqual(kCGRenderingIntentDefault, 0)
16        self.assertEqual(kCGRenderingIntentAbsoluteColorimetric, 1)
17        self.assertEqual(kCGRenderingIntentRelativeColorimetric, 2)
18        self.assertEqual(kCGRenderingIntentPerceptual, 3)
19        self.assertEqual(kCGRenderingIntentSaturation, 4)
20
21        self.assertEqual(kCGColorSpaceModelUnknown, -1)
22        self.assertEqual(kCGColorSpaceModelMonochrome, 0)
23        self.assertEqual(kCGColorSpaceModelRGB, 1)
24        self.assertEqual(kCGColorSpaceModelCMYK, 2)
25        self.assertEqual(kCGColorSpaceModelLab, 3)
26        self.assertEqual(kCGColorSpaceModelDeviceN, 4)
27        self.assertEqual(kCGColorSpaceModelIndexed, 5)
28        self.assertEqual(kCGColorSpaceModelPattern, 6)
29
30        self.assertIsInstance(kCGColorSpaceGenericGray, unicode)
31        self.assertIsInstance(kCGColorSpaceGenericRGB, unicode)
32        self.assertIsInstance(kCGColorSpaceGenericCMYK, unicode)
33
34        self.assertIsInstance(kCGColorSpaceUserGray, basestring)
35        self.assertIsInstance(kCGColorSpaceUserRGB, basestring)
36        self.assertIsInstance(kCGColorSpaceUserCMYK, basestring)
37
38    @min_os_level('10.5')
39    def testConstants10_5(self):
40        self.assertIsInstance(kCGColorSpaceGenericRGBLinear, unicode)
41        self.assertIsInstance(kCGColorSpaceAdobeRGB1998, unicode)
42        self.assertIsInstance(kCGColorSpaceSRGB, unicode)
43
44
45    @min_os_level('10.6')
46    def testConstants10_6(self):
47        self.assertIsInstance(kCGColorSpaceGenericGrayGamma2_2, unicode)
48
49
50    def testFunctions(self):
51        self.assertResultIsCFRetained(CGColorSpaceCreateDeviceGray)
52        self.assertIsInstance(CGColorSpaceCreateDeviceGray(), CGColorSpaceRef)
53
54        self.assertResultIsCFRetained(CGColorSpaceCreateDeviceRGB)
55        self.assertIsInstance(CGColorSpaceCreateDeviceRGB(), CGColorSpaceRef)
56
57        self.assertResultIsCFRetained(CGColorSpaceCreateDeviceCMYK)
58        self.assertIsInstance(CGColorSpaceCreateDeviceCMYK(), CGColorSpaceRef)
59
60        self.assertResultIsCFRetained(CGColorSpaceCreateCalibratedGray)
61        csp = CGColorSpaceCreateCalibratedGray((0, 0, 0), (1, 1, 1), 0.8)
62        self.assertIsInstance(csp, CGColorSpaceRef)
63
64        self.assertResultIsCFRetained(CGColorSpaceCreateCalibratedRGB)
65        csp = CGColorSpaceCreateCalibratedRGB((0.5, 0.5, 0.2), (0.9, 0.95, 1.0), (0.7, 0.8, 0.9), (0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99))
66        self.assertIsInstance(csp, CGColorSpaceRef)
67
68        self.assertResultIsCFRetained(CGColorSpaceCreateLab)
69        csp = CGColorSpaceCreateLab((0.1, 0.1, 0.1), (0.99, 0.99, 0.99), (0.1, 0.79, 0.5, 0.99))
70        self.assertIsInstance(csp, CGColorSpaceRef)
71
72        self.assertResultIsCFRetained(CGColorSpaceCreatePattern)
73        csp = CGColorSpaceCreatePattern(csp)
74        self.assertIsInstance(csp, CGColorSpaceRef)
75
76        self.assertResultIsCFRetained(CGColorSpaceCreateWithName)
77        csp = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)
78        self.assertIsInstance(csp, CGColorSpaceRef)
79
80        v = CGColorSpaceRetain(csp)
81        self.assertTrue(v is csp)
82        CGColorSpaceRelease(csp)
83
84        self.assertIsInstance(CGColorSpaceGetTypeID(), (int, long))
85        self.assertIsInstance(CGColorSpaceGetNumberOfComponents(csp), (int, long))
86
87    @min_os_level('10.5')
88    def testFunctions10_5(self):
89        csp = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)
90        self.assertIsInstance(CGColorSpaceGetModel(csp), (int, long))
91
92        v = CGColorSpaceGetBaseColorSpace(csp)
93        self.assertTrue(v is None)
94
95        v = CGColorSpaceCreatePattern(csp)
96        v = CGColorSpaceGetBaseColorSpace(v)
97        self.assertTrue(v is csp)
98
99        v = CGColorSpaceGetColorTableCount(csp)
100        self.assertEqual(v, 0)
101
102        v = CGColorSpaceCopyICCProfile(csp)
103        self.assertIsInstance(v, CFDataRef)
104
105        data = open('/Library/ColorSync/Profiles/WebSafeColors.icc', 'rb').read()
106        provider = CGDataProviderCreateWithCFData(buffer(data))
107        spc = CGColorSpaceCreateICCBased(3, [0.0, 255.0, 0.0, 255.0, 0.0, 255.0],
108                provider, CGColorSpaceCreateDeviceRGB())
109        self.assertIsInstance(spc, CGColorSpaceRef)
110
111        dta= CGColorSpaceCopyICCProfile(spc)
112        self.assertIsInstance(dta, CFDataRef)
113
114        spc = CGColorSpaceCreateIndexed(CGColorSpaceCreateDeviceRGB(), 10,
115                (0, 1, 2)*11)
116        self.assertIsInstance(spc, CGColorSpaceRef)
117
118        self.assertEqual(CGColorSpaceGetModel(spc), kCGColorSpaceModelIndexed)
119
120        v = CGColorSpaceGetColorTableCount(spc)
121        self.assertEqual(v, 11)
122
123        buf = array.array('B', [99] * (3*11))
124        v = CGColorSpaceGetColorTable(spc, buf)
125        self.assertTrue(buf is v)
126        self.assertTrue(buf[0] == 0)
127        self.assertTrue(buf[1] == 1)
128        self.assertTrue(buf[2] == 2)
129        self.assertTrue(buf[3] == 0)
130        self.assertTrue(buf[4] == 1)
131        self.assertTrue(buf[5] == 2)
132
133        spc = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)
134        self.assertIsInstance(spc, CGColorSpaceRef)
135
136        dta= CGColorSpaceCopyICCProfile(spc)
137        self.assertIsInstance(dta, CFDataRef)
138
139        self.assertResultIsCFRetained(CGColorSpaceCreateWithICCProfile)
140        v = CGColorSpaceCreateWithICCProfile(dta)
141        self.assertIsInstance(v, CGColorSpaceRef)
142
143    @min_os_level('10.6')
144    def testFunctions10_6(self):
145        csp = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)
146        self.assertIsInstance(csp, CGColorSpaceRef)
147
148        v = CGColorSpaceCopyName(csp)
149        self.assertIsInstance(v, unicode)
150
151
152if __name__ == "__main__":
153    main()
154