1
2from PyObjCTools.TestSupport import *
3from Quartz import *
4
5try:
6    unicode
7except NameError:
8    unicode = str
9
10class TestCVBuffer (TestCase):
11    def testConstants(self):
12        self.assertIsInstance(kCVBufferPropagatedAttachmentsKey, unicode)
13        self.assertIsInstance(kCVBufferNonPropagatedAttachmentsKey, unicode)
14        self.assertIsInstance(kCVBufferMovieTimeKey, unicode)
15        self.assertIsInstance(kCVBufferTimeValueKey, unicode)
16        self.assertIsInstance(kCVBufferTimeScaleKey, unicode)
17
18        self.assertEqual(kCVAttachmentMode_ShouldNotPropagate, 0)
19        self.assertEqual(kCVAttachmentMode_ShouldPropagate, 1)
20
21    def testFunctions(self):
22        rv, buf = CVOpenGLBufferCreate(None, 100, 100, {"a":"b"}, None)
23        self.assertEqual(rv, 0)
24        self.assertIsInstance(buf, CVOpenGLBufferRef)
25
26        rv, buf2 = CVOpenGLBufferCreate(None, 100, 100, {"a":"b"}, None)
27        self.assertEqual(rv, 0)
28        self.assertIsInstance(buf2, CVOpenGLBufferRef)
29
30        v = CVBufferRetain(buf)
31        self.assertTrue(v is buf)
32        CVBufferRelease(v)
33
34        ctx = object()
35
36        self.assertArgHasType(CVBufferSetAttachment, 2, b'@')
37        self.assertArgHasType(CVBufferSetAttachment, 0,  b'^{__CVBuffer=}')
38        CVBufferSetAttachment(buf, b"pyobjc.test".decode('latin1'),  ctx, kCVAttachmentMode_ShouldPropagate)
39
40        self.assertArgHasType(CVBufferGetAttachment, 0,  b'^{__CVBuffer=}')
41        self.assertResultHasType(CVBufferGetAttachment, b'@')
42        self.assertArgIsOut(CVBufferGetAttachment, 2)
43        v, mode = CVBufferGetAttachment(buf, b"pyobjc.test".decode('latin1'), None)
44        self.assertTrue(v is ctx)
45        self.assertEqual(mode, kCVAttachmentMode_ShouldPropagate)
46
47        self.assertArgHasType(CVBufferGetAttachments, 0,  b'^{__CVBuffer=}')
48        v = CVBufferGetAttachments(buf, kCVAttachmentMode_ShouldPropagate)
49        self.assertIsInstance(v, CFDictionaryRef)
50        self.assertTrue("pyobjc.test" in v)
51
52        self.assertArgHasType(CVBufferSetAttachments, 0,  b'^{__CVBuffer=}')
53        CVBufferSetAttachments(buf, {
54            "pyobjc.test2": 42,
55            "pyobjc.test3": b"hello".decode('latin1')
56        }, kCVAttachmentMode_ShouldPropagate)
57
58        self.assertArgHasType(CVBufferPropagateAttachments, 0,  b'^{__CVBuffer=}')
59        self.assertArgHasType(CVBufferPropagateAttachments, 1,  b'^{__CVBuffer=}')
60        CVBufferPropagateAttachments(buf, buf2)
61
62        v = CVBufferGetAttachments(buf2, kCVAttachmentMode_ShouldPropagate)
63        self.assertIsInstance(v, CFDictionaryRef)
64        self.assertTrue("pyobjc.test2" in v)
65
66        self.assertArgHasType(CVBufferRemoveAttachment, 0,  b'^{__CVBuffer=}')
67        CVBufferRemoveAttachment(buf, "pyobjc.test")
68        v = CVBufferGetAttachments(buf, kCVAttachmentMode_ShouldPropagate)
69        self.assertIsInstance(v, CFDictionaryRef)
70        self.assertFalse("pyobjc.test" in v)
71
72        self.assertArgHasType(CVBufferRemoveAllAttachments, 0,  b'^{__CVBuffer=}')
73        CVBufferRemoveAllAttachments(buf)
74        v = CVBufferGetAttachments(buf, kCVAttachmentMode_ShouldPropagate)
75        self.assertIsInstance(v, CFDictionaryRef)
76        self.assertFalse("pyobjc.test2" in v)
77
78
79if __name__ == "__main__":
80    main()
81