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