1 2from PyObjCTools.TestSupport import * 3from Quartz.CoreGraphics import * 4 5class TestCGFont (TestCase): 6 7 def testTypes(self): 8 self.failUnlessIsCFType(CGFontRef) 9 10 def testConstants(self): 11 self.failUnlessEqual(kCGFontPostScriptFormatType1, 1) 12 self.failUnlessEqual(kCGFontPostScriptFormatType3, 3) 13 self.failUnlessEqual(kCGFontPostScriptFormatType42, 42) 14 15 self.failUnlessEqual(kCGFontIndexMax, ((1 << 16) - 2)) 16 self.failUnlessEqual(kCGFontIndexInvalid, ((1 << 16) - 1)) 17 self.failUnlessEqual(kCGGlyphMax, kCGFontIndexMax) 18 19 20 self.failUnlessIsInstance(kCGFontVariationAxisName, unicode) 21 self.failUnlessIsInstance(kCGFontVariationAxisMinValue, unicode) 22 self.failUnlessIsInstance(kCGFontVariationAxisMaxValue, unicode) 23 self.failUnlessIsInstance(kCGFontVariationAxisDefaultValue, unicode) 24 25 self.failUnlessEqual(CGGlyphMin, 0) 26 self.failUnlessEqual(CGGlyphMax, kCGGlyphMax) 27 28 29 30 def testFunctions(self): 31 self.failUnlessIsInstance(CGFontGetTypeID(), (int, long)) 32 33 self.failUnlessResultIsCFRetained(CGFontCreateWithFontName) 34 font = CGFontCreateWithFontName("Helvetica") 35 self.failUnlessIsInstance(font, CGFontRef) 36 37 self.failUnlessResultIsCFRetained(CGFontCreateCopyWithVariations) 38 font = CGFontCreateCopyWithVariations(font, None) 39 self.failUnlessIsInstance(font, CGFontRef) 40 41 v = CGFontRetain(font) 42 self.failUnless(v is font) 43 CGFontRelease(font) 44 45 v = CGFontGetNumberOfGlyphs(font) 46 self.failUnlessIsInstance(v, (int, long)) 47 48 v = CGFontGetUnitsPerEm(font) 49 self.failUnlessIsInstance(v, (int, long)) 50 51 self.failUnlessResultIsCFRetained(CGFontCopyPostScriptName) 52 v = CGFontCopyPostScriptName(font) 53 self.failUnlessIsInstance(v, unicode) 54 55 self.failUnlessResultIsCFRetained(CGFontCopyFullName) 56 v = CGFontCopyFullName(font) 57 self.failUnlessIsInstance(v, unicode) 58 59 v = CGFontGetAscent(font) 60 self.failUnlessIsInstance(v, (int, long)) 61 62 v = CGFontGetDescent(font) 63 self.failUnlessIsInstance(v, (int, long)) 64 65 v = CGFontGetLeading(font) 66 self.failUnlessIsInstance(v, (int, long)) 67 68 v = CGFontGetCapHeight(font) 69 self.failUnlessIsInstance(v, (int, long)) 70 71 v = CGFontGetXHeight(font) 72 self.failUnlessIsInstance(v, (int, long)) 73 74 v = CGFontGetFontBBox(font) 75 self.failUnlessIsInstance(v, CGRect) 76 77 v = CGFontGetItalicAngle(font) 78 self.failUnlessIsInstance(v, float) 79 80 v = CGFontGetStemV(font) 81 self.failUnlessIsInstance(v, float) 82 83 v = CGFontCopyVariationAxes(font) 84 self.failUnless(v is None or isinstance(v, CFArrayRef)) 85 86 v = CGFontCopyVariations(font) 87 self.failUnless(v is None or isinstance(v, CFDictionaryRef)) 88 89 self.failUnlessResultHasType(CGFontCanCreatePostScriptSubset, objc._C_BOOL) 90 v = CGFontCanCreatePostScriptSubset(font, kCGFontPostScriptFormatType1) 91 self.failUnlessIsInstance(v, bool) 92 93 94 # PyObjC doesn't wrap ATSUI, therefore we cannot actually call 95 # the function. 96 #self.fail('CGFontCreateWithPlatformFont') 97 self.failUnlessArgHasType(CGFontCreateWithPlatformFont, 0, 98 objc._C_UINT) 99 self.failUnlessResultIsCFRetained(CGFontCreateWithPlatformFont) 100 101 102 data = open('/Library/Fonts/Webdings.ttf', 'rb').read() 103 self.failUnlessResultIsCFRetained(CGFontCreateWithDataProvider) 104 font = CGFontCreateWithDataProvider( 105 CGDataProviderCreateWithCFData(buffer(data)) 106 ) 107 self.failUnlessIsInstance(font, CGFontRef) 108 109 tags = CGFontCopyTableTags(font) 110 self.failUnlessIsInstance(tags, tuple) 111 self.failIfEqual(len(tags), 0) 112 self.failUnlessIsInstance(tags[0], (int, long)) 113 114 self.failUnlessResultIsCFRetained(CGFontCopyTableForTag) 115 for tg in tags: 116 data = CGFontCopyTableForTag(font, 0) 117 if data is None: 118 continue 119 self.failUnlessIsInstance(data, CFDataRef) 120 121 v = CGFontCopyGlyphNameForGlyph(font, ord('A')) 122 self.failUnlessIsInstance(v, unicode) 123 124 glyphnames = ['chat', 'conference', 'woman' ] 125 126 v = CGFontGetGlyphWithGlyphName(font, glyphnames[0]) 127 self.failUnlessIsInstance(v, (int, long)) 128 129 glyphs = [ CGFontGetGlyphWithGlyphName(font, nm) 130 for nm in glyphnames ] 131 132 self.failUnlessResultHasType(CGFontGetGlyphAdvances, objc._C_BOOL) 133 v, advances = CGFontGetGlyphAdvances( 134 font, glyphs, len(glyphs), None) 135 self.failUnlessIsInstance(v, bool) 136 self.failUnlessEqual(len(advances), 3) 137 for v in advances: 138 self.failUnlessIsInstance(v, (int, long)) 139 140 self.failUnlessResultHasType(CGFontGetGlyphBBoxes, objc._C_BOOL) 141 v, bboxes = CGFontGetGlyphBBoxes( 142 font, glyphs, len(glyphs), None) 143 self.failUnlessIsInstance(v, bool) 144 self.failUnlessEqual(len(bboxes), 3) 145 for v in bboxes: 146 self.failUnlessIsInstance(v, CGRect) 147 148 self.failUnlessResultIsCFRetained(CGFontCreatePostScriptSubset) 149 psfont = CGFontCreatePostScriptSubset( 150 font, "pybobjc-characters", 151 kCGFontPostScriptFormatType42, 152 glyphs, len(glyphs), None) 153 self.failUnlessIsInstance(psfont, CFDataRef) 154 155 156 self.failUnlessResultIsCFRetained(CGFontCreatePostScriptEncoding) 157 map = glyphs + [0]*(256-len(glyphs)) 158 psfont = CGFontCreatePostScriptEncoding( 159 font, map) 160 self.failUnlessIsInstance(psfont, CFDataRef) 161 162 163 164if __name__ == "__main__": 165 main() 166