1
2from PyObjCTools.TestSupport import *
3from Quartz.CoreGraphics import *
4from Foundation import NSMutableData
5import os
6
7class TestCGDataConsumer (TestCase):
8    def testTypes(self):
9        self.failUnlessIsCFType(CGDataConsumerRef)
10
11    def testFunctions(self):
12        self.failUnlessIsInstance(CGDataConsumerGetTypeID(), (int, long))
13
14        url = CFURLCreateWithFileSystemPath(None,
15            "/tmp/pyobjc.test.pdf", kCFURLPOSIXPathStyle, False)
16        self.failUnlessIsInstance(url, CFURLRef)
17        try:
18            consumer = CGDataConsumerCreateWithURL(url)
19            self.failUnlessIsInstance(consumer, CGDataConsumerRef)
20
21            data = NSMutableData.data()
22            self.failUnlessIsInstance(data, CFMutableDataRef)
23
24            consumer = CGDataConsumerCreateWithCFData(data)
25            self.failUnlessIsInstance(consumer, CGDataConsumerRef)
26
27            v = CGDataConsumerRetain(consumer)
28            self.failUnless(v is consumer)
29            CGDataConsumerRelease(consumer)
30
31        finally:
32            del url
33            if os.path.exists("/tmp/pyobjc.test.pdf"):
34                os.unlink("/tmp/pyobjc.test.pdf")
35
36        def putBytes(info, buffer, bufsize):
37            self.failUnlessIsInstance(buffer, str)
38            self.failUnlessEqual(len(buffer), bufsize)
39            info.append(buffer)
40            return bufsize
41
42        def release(info):
43            released.append(info)
44
45
46        output = []
47        released = []
48        consumer = CGDataConsumerCreate(output, (putBytes, release))
49        self.failUnlessIsInstance(consumer, CGDataConsumerRef)
50
51        ctx = CGPDFContextCreate(consumer, CGRectMake(0, 0, 500, 500), None)
52        self.failUnlessIsInstance(ctx, CGContextRef)
53        CGContextBeginPage(ctx, None)
54        CGContextFillRect(ctx, ((10, 10), (50, 30)))
55        CGContextEndPage(ctx)
56        CGContextFlush(ctx)
57        CGPDFContextClose(ctx)
58
59        del ctx
60        del consumer
61
62        self.failIfEqual(len(output), 0)
63        self.failIfEqual(len(released), 0)
64
65
66if __name__ == "__main__":
67    main()
68