1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4import sys
5
6import sys
7
8if sys.version_info[0] != 2:
9    def buffer(value):
10        if isinstance(value, bytes):
11            return value
12        return value.encode('latin1')
13
14
15class TestCGImage (TestCase):
16    def testConstants(self):
17        self.assertEqual(kCGImageAlphaNone, 0)
18        self.assertEqual(kCGImageAlphaPremultipliedLast, 1)
19        self.assertEqual(kCGImageAlphaPremultipliedFirst, 2)
20        self.assertEqual(kCGImageAlphaLast, 3)
21        self.assertEqual(kCGImageAlphaFirst, 4)
22        self.assertEqual(kCGImageAlphaNoneSkipLast, 5)
23        self.assertEqual(kCGImageAlphaNoneSkipFirst, 6)
24        self.assertEqual(kCGImageAlphaOnly, 7)
25
26        self.assertEqual(kCGBitmapAlphaInfoMask, 0x1F)
27        self.assertEqual(kCGBitmapFloatComponents, (1 << 8))
28        self.assertEqual(kCGBitmapByteOrderMask, 0x7000)
29        self.assertEqual(kCGBitmapByteOrderDefault, (0 << 12))
30        self.assertEqual(kCGBitmapByteOrder16Little, (1 << 12))
31        self.assertEqual(kCGBitmapByteOrder32Little, (2 << 12))
32        self.assertEqual(kCGBitmapByteOrder16Big, (3 << 12))
33        self.assertEqual(kCGBitmapByteOrder32Big, (4 << 12))
34
35        if sys.byteorder == 'big':
36            self.assertEqual(kCGBitmapByteOrder16Host, kCGBitmapByteOrder16Big)
37            self.assertEqual(kCGBitmapByteOrder32Host, kCGBitmapByteOrder32Big)
38        else:
39            self.assertEqual(kCGBitmapByteOrder16Host, kCGBitmapByteOrder16Little)
40            self.assertEqual(kCGBitmapByteOrder32Host, kCGBitmapByteOrder32Little)
41
42    def testFunctions(self):
43        self.assertIsInstance(CGImageGetTypeID(), (int, long))
44
45        provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 100 * 80))
46        self.assertArgHasType(CGImageCreate, 9, objc._C_BOOL)
47        self.assertResultIsCFRetained(CGImageCreate)
48        image = CGImageCreate(100, 80, 8, 32, 400, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast,
49                provider, None, False, kCGRenderingIntentDefault)
50        self.assertIsInstance(image, CGImageRef)
51
52        image2 = CGImageCreate(100, 80, 8, 32, 400, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast,
53                provider, [0, 1, 0, 1, 0, 1], False, kCGRenderingIntentDefault)
54        self.assertIsInstance(image2, CGImageRef)
55
56        provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 20 * 10))
57        self.assertArgHasType(CGImageMaskCreate, 7, objc._C_BOOL)
58        self.assertResultIsCFRetained(CGImageMaskCreate)
59        mask = CGImageMaskCreate(20, 10, 8, 32, 80, provider, None, True)
60        self.assertIsInstance(mask, CGImageRef)
61
62        self.assertResultIsCFRetained(CGImageCreateCopy)
63        v = CGImageCreateCopy(image)
64        self.assertIsInstance(v, CGImageRef)
65
66        provider = CGDataProviderCreateWithCFData(buffer(
67            open('/System/Library/CoreServices/DefaultDesktop.jpg', 'rb').read()))
68        self.assertResultIsCFRetained(CGImageCreateWithJPEGDataProvider)
69        self.assertArgHasType(CGImageCreateWithJPEGDataProvider, 2, objc._C_BOOL)
70        v = CGImageCreateWithJPEGDataProvider(provider, None, True, kCGRenderingIntentDefault)
71        self.assertIsInstance(v, CGImageRef)
72
73        provider = CGDataProviderCreateWithCFData(buffer(
74            open('/System/Library//CoreServices/Installer.app/Contents/PlugIns/Summary.bundle/Contents/Resources/Success.png', 'rb').read()))
75        self.assertResultIsCFRetained(CGImageCreateWithPNGDataProvider)
76        self.assertArgHasType(CGImageCreateWithPNGDataProvider, 2, objc._C_BOOL)
77        v = CGImageCreateWithPNGDataProvider(provider, None, True, kCGRenderingIntentDefault)
78        self.assertIsInstance(v, CGImageRef)
79
80        self.assertResultIsCFRetained(CGImageCreateWithImageInRect)
81        v = CGImageCreateWithImageInRect(image, ((10, 10), (30, 40)))
82        self.assertIsInstance(v, CGImageRef)
83
84        self.assertResultIsCFRetained(CGImageCreateWithMask)
85        v = CGImageCreateWithMask(image, mask)
86        self.assertIsInstance(v, CGImageRef)
87
88
89        self.assertResultIsCFRetained(CGImageCreateWithMaskingColors)
90        v = CGImageCreateWithMaskingColors(image2, [0,255]*4)
91        self.assertIsInstance(v, CGImageRef)
92
93        self.assertResultIsCFRetained(CGImageCreateCopyWithColorSpace)
94        v = CGImageCreateCopyWithColorSpace(image, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB))
95        self.assertIsInstance(v, CGImageRef)
96
97        v = CGImageRetain(image)
98        self.assertTrue(v is image)
99        CGImageRelease(image)
100
101        self.assertResultHasType(CGImageIsMask, objc._C_BOOL)
102        self.assertTrue(CGImageIsMask(image) is False)
103        self.assertTrue(CGImageIsMask(mask) is True)
104
105        v = CGImageGetWidth(image)
106        self.assertIsInstance(v, (int, long))
107
108        v = CGImageGetHeight(image)
109        self.assertIsInstance(v, (int, long))
110
111        v = CGImageGetBitsPerComponent(image)
112        self.assertIsInstance(v, (int, long))
113
114        v = CGImageGetBitsPerPixel(image)
115        self.assertIsInstance(v, (int, long))
116
117        v = CGImageGetBytesPerRow(image)
118        self.assertIsInstance(v, (int, long))
119
120        v = CGImageGetColorSpace(image)
121        self.assertIsInstance(v, CGColorSpaceRef)
122
123        v = CGImageGetAlphaInfo(image)
124        self.assertIsInstance(v, (int, long))
125
126        v = CGImageGetDataProvider(image)
127        self.assertIsInstance(v, CGDataProviderRef)
128
129        v = CGImageGetDecode(image)
130        self.assertTrue(v is objc.NULL)
131
132        v = CGImageGetDecode(image2)
133        self.assertIsInstance(v, objc.varlist)
134        self.assertEqual(v[0], 0.0)
135        self.assertEqual(v[1], 1.0)
136
137        self.assertResultHasType(CGImageGetShouldInterpolate, objc._C_BOOL)
138        v = CGImageGetShouldInterpolate(image)
139        self.assertTrue(v is False)
140        v = CGImageGetShouldInterpolate(mask)
141        self.assertTrue(v is True)
142
143        v = CGImageGetRenderingIntent(image)
144        self.assertIsInstance(v, (int, long))
145
146        v = CGImageGetBitmapInfo(image)
147        self.assertIsInstance(v, (int, long))
148
149
150if __name__ == "__main__":
151    main()
152