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