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