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