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