1from PyObjCTools.TestSupport import *
2
3import Quartz
4
5try:
6    long
7except NameError:
8    long = int
9
10try:
11    unicode
12except NameError:
13    unicode = str
14
15class TestCGImageMetadata (TestCase):
16    @min_os_level('10.8')
17    def testTypes10_8(self):
18        self.assertIsCFType(Quartz.CGImageMetadataRef)
19        self.assertIsCFType(Quartz.CGImageMetadataTagRef)
20
21    @min_os_level('10.8')
22    def testFunctions10_8(self):
23        self.assertIsInstance(Quartz.CGImageMetadataGetTypeID(), (int, long))
24        self.assertIsInstance(Quartz.CGImageMetadataTagGetTypeID(), (int, long))
25
26        self.assertResultIsCFRetained(Quartz.CGImageMetadataCreateMutable)
27        m = Quartz.CGImageMetadataCreateMutable()
28        self.assertIsInstance(m, Quartz.CGImageMetadataRef)
29
30        self.assertResultIsCFRetained(Quartz.CGImageMetadataCreateMutableCopy)
31        m2 = Quartz.CGImageMetadataCreateMutableCopy(m)
32        self.assertIsInstance(m2, Quartz.CGImageMetadataRef)
33
34        self.assertResultIsCFRetained(Quartz.CGImageMetadataTagCreate)
35        self.assertResultHasType(Quartz.CGImageMetadataTagCopyValue, objc._C_ID)
36        t = Quartz.CGImageMetadataTagCreate(
37                Quartz.kCGImageMetadataNamespaceExif,
38                Quartz.kCGImageMetadataPrefixExif,
39                "name",
40                Quartz.kCGImageMetadataTypeString,
41                "value")
42        self.assertIsInstance(t, Quartz.CGImageMetadataTagRef)
43
44        self.assertResultIsCFRetained(Quartz.CGImageMetadataTagCopyNamespace)
45        self.assertResultIsCFRetained(Quartz.CGImageMetadataTagCopyPrefix)
46        self.assertResultIsCFRetained(Quartz.CGImageMetadataTagCopyName)
47        self.assertResultHasType(Quartz.CGImageMetadataTagCopyValue, objc._C_ID)
48        self.assertResultIsCFRetained(Quartz.CGImageMetadataTagCopyValue)
49        self.assertResultIsCFRetained(Quartz.CGImageMetadataTagCopyQualifiers)
50        self.assertResultIsCFRetained(Quartz.CGImageMetadataCopyTags)
51        self.assertResultIsCFRetained(Quartz.CGImageMetadataCopyTagWithPath)
52        self.assertResultIsCFRetained(Quartz.CGImageMetadataCopyStringValueWithPath)
53        self.assertResultHasType(Quartz.CGImageMetadataRegisterNamespaceForPrefix, objc._C_BOOL)
54        self.assertArgIsOut(Quartz.CGImageMetadataRegisterNamespaceForPrefix, 3)
55        self.assertResultHasType(Quartz.CGImageMetadataSetTagWithPath, objc._C_BOOL)
56        self.assertResultHasType(Quartz.CGImageMetadataSetValueWithPath, objc._C_BOOL)
57        self.assertArgHasType(Quartz.CGImageMetadataSetValueWithPath, 3, objc._C_ID)
58        self.assertResultHasType(Quartz.CGImageMetadataRemoveTagWithPath, objc._C_BOOL)
59
60        CGImageMetadataTagBlock = objc._C_BOOL + b'@@'
61        self.assertArgIsBlock(Quartz.CGImageMetadataEnumerateTagsUsingBlock, 3, CGImageMetadataTagBlock)
62
63        self.assertResultIsCFRetained(Quartz.CGImageMetadataCopyTagMatchingImageProperty)
64        self.assertResultHasType(Quartz.CGImageMetadataSetValueMatchingImageProperty, objc._C_BOOL)
65        self.assertArgHasType(Quartz.CGImageMetadataSetValueMatchingImageProperty, 3, objc._C_ID)
66        self.assertResultIsCFRetained(Quartz.CGImageMetadataCreateXMPData)
67        self.assertResultIsCFRetained(Quartz.CGImageMetadataCreateFromXMPData)
68
69
70    @min_os_level('10.8')
71    def testConstants10_8(self):
72        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceExif, unicode)
73        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceExifAux, unicode)
74        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceDublinCore, unicode)
75        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceIPTCCore, unicode)
76        self.assertIsInstance(Quartz.kCGImageMetadataNamespacePhotoshop, unicode)
77        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceTIFF, unicode)
78        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceXMPBasic, unicode)
79        self.assertIsInstance(Quartz.kCGImageMetadataNamespaceXMPRights, unicode)
80        self.assertIsInstance(Quartz.kCGImageMetadataPrefixExif, unicode)
81        self.assertIsInstance(Quartz.kCGImageMetadataPrefixExifAux, unicode)
82        self.assertIsInstance(Quartz.kCGImageMetadataPrefixDublinCore, unicode)
83        self.assertIsInstance(Quartz.kCGImageMetadataPrefixIPTCCore, unicode)
84        self.assertIsInstance(Quartz.kCGImageMetadataPrefixPhotoshop, unicode)
85        self.assertIsInstance(Quartz.kCGImageMetadataPrefixTIFF, unicode)
86        self.assertIsInstance(Quartz.kCGImageMetadataPrefixXMPBasic, unicode)
87        self.assertIsInstance(Quartz.kCGImageMetadataPrefixXMPRights, unicode)
88
89        self.assertEqual(Quartz.kCGImageMetadataTypeInvalid, -1)
90        self.assertEqual(Quartz.kCGImageMetadataTypeDefault, 0)
91        self.assertEqual(Quartz.kCGImageMetadataTypeString, 1)
92        self.assertEqual(Quartz.kCGImageMetadataTypeArrayUnordered, 2)
93        self.assertEqual(Quartz.kCGImageMetadataTypeArrayOrdered, 3)
94        self.assertEqual(Quartz.kCGImageMetadataTypeAlternateArray, 4)
95        self.assertEqual(Quartz.kCGImageMetadataTypeAlternateText, 5)
96        self.assertEqual(Quartz.kCGImageMetadataTypeStructure, 6)
97
98        self.assertIsInstance(Quartz.kCGImageMetadataEnumerateRecursively, unicode)
99        self.assertIsInstance(Quartz.kCFErrorDomainCGImageMetadata, unicode)
100
101        self.assertEqual(Quartz.kCGImageMetadataErrorUnknown, 0)
102        self.assertEqual(Quartz.kCGImageMetadataErrorUnsupportedFormat, 1)
103        self.assertEqual(Quartz.kCGImageMetadataErrorBadArgument, 2)
104        self.assertEqual(Quartz.kCGImageMetadataErrorConflictingArguments, 3)
105        self.assertEqual(Quartz.kCGImageMetadataErrorPrefixConflict, 4)
106
107
108
109if __name__ == "__main__":
110    main()
111