1
2from PyObjCTools.TestSupport import *
3from Quartz import *
4import Quartz
5import os
6
7try:
8    long
9except NameError:
10    long = int
11
12class TestCGPattern (TestCase):
13    def testConstants(self):
14        self.assertEqual(kCGPatternTilingNoDistortion, 0)
15        self.assertEqual(kCGPatternTilingConstantSpacingMinimalDistortion, 1)
16        self.assertEqual(kCGPatternTilingConstantSpacing, 2)
17
18    def testFunctions(self):
19        self.assertIsInstance(CGPatternGetTypeID(), (int, long))
20
21        myInfo = object()
22        cnt = [0]
23        def drawPattern(info, context):
24            self.assertTrue(info is myInfo)
25            self.assertIsInstance(context, CGContextRef)
26            cnt[0] += 1
27
28        pattern = CGPatternCreate(myInfo, CGRectMake(0, 0, 10, 10), CGAffineTransformIdentity, 10.0, 10.0,
29                kCGPatternTilingConstantSpacing, True, drawPattern)
30        self.assertIsInstance(pattern, CGPatternRef)
31
32        v = CGPatternRetain(pattern)
33        self.assertTrue(v is pattern)
34        CGPatternRelease(pattern)
35
36        url = CFURLCreateWithFileSystemPath(None,
37                "/tmp/pyobjc.test.pdf", kCFURLPOSIXPathStyle, False)
38        self.assertIsInstance(url, CFURLRef)
39        context = CGPDFContextCreateWithURL(url,
40            ((0, 0), (1000, 1000)), None)
41        self.assertIsInstance(context, CGContextRef)
42        CGContextBeginPage(context, objc.NULL)
43        try:
44            color = CGColorCreateWithPattern(CGColorSpaceCreatePattern(None), pattern, (0.5, 0.5, 0.5, 0.5))
45            self.assertIsInstance(color, CGColorRef)
46
47            v = CGColorGetPattern(color)
48            self.assertTrue(v is pattern)
49
50            # Now draw something with the pattern color to ensure that the callback
51            # is actually called at least once.
52            CGContextSetFillColorWithColor(context, color)
53            CGContextSetStrokeColorWithColor(context, color)
54            CGContextFillRect(context, ((0, 0), (50, 50)))
55
56
57        finally:
58            CGContextEndPage(context)
59            if hasattr(Quartz, 'CGPDFContextClose'): CGPDFContextClose(context)
60            if os.path.exists("/tmp/pyobjc.test.pdf"):
61                os.unlink("/tmp/pyobjc.test.pdf")
62
63        self.assertNotEqual(cnt[0], 0)
64
65
66if __name__ == "__main__":
67    main()
68