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