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