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