1 2from PyObjCTools.TestSupport import * 3from CoreText import * 4from Quartz import * 5 6class TestCTFont (TestCase): 7 def testTypes(self): 8 self.assertIsInstance(CTFontRef, objc.objc_class) 9 10 @min_os_level('10.6') 11 def testConstants10_6(self): 12 self.assertEqual(kCTFontOptionsDefault, 0) 13 self.assertEqual(kCTFontOptionsPreventAutoActivation, 1 << 0) 14 self.assertEqual(kCTFontOptionsPreferSystemFont, 1 << 2) 15 16 17 def testConstants(self): 18 self.assertIsInstance(kCTFontCopyrightNameKey, unicode) 19 self.assertIsInstance(kCTFontFamilyNameKey, unicode) 20 self.assertIsInstance(kCTFontSubFamilyNameKey, unicode) 21 self.assertIsInstance(kCTFontStyleNameKey, unicode) 22 self.assertIsInstance(kCTFontUniqueNameKey, unicode) 23 self.assertIsInstance(kCTFontFullNameKey, unicode) 24 self.assertIsInstance(kCTFontVersionNameKey, unicode) 25 self.assertIsInstance(kCTFontPostScriptNameKey, unicode) 26 self.assertIsInstance(kCTFontTrademarkNameKey, unicode) 27 self.assertIsInstance(kCTFontManufacturerNameKey, unicode) 28 self.assertIsInstance(kCTFontDesignerNameKey, unicode) 29 self.assertIsInstance(kCTFontDescriptionNameKey, unicode) 30 self.assertIsInstance(kCTFontVendorURLNameKey, unicode) 31 self.assertIsInstance(kCTFontDesignerURLNameKey, unicode) 32 self.assertIsInstance(kCTFontLicenseNameKey, unicode) 33 self.assertIsInstance(kCTFontLicenseURLNameKey, unicode) 34 self.assertIsInstance(kCTFontSampleTextNameKey, unicode) 35 self.assertIsInstance(kCTFontPostScriptCIDNameKey, unicode) 36 37 self.assertEqual(kCTFontNoFontType, -1) 38 self.assertEqual(kCTFontUserFontType, 0) 39 self.assertEqual(kCTFontUserFixedPitchFontType, 1) 40 self.assertEqual(kCTFontSystemFontType, 2) 41 self.assertEqual(kCTFontEmphasizedSystemFontType, 3) 42 self.assertEqual(kCTFontSmallSystemFontType, 4) 43 self.assertEqual(kCTFontSmallEmphasizedSystemFontType, 5) 44 self.assertEqual(kCTFontMiniSystemFontType, 6) 45 self.assertEqual(kCTFontMiniEmphasizedSystemFontType, 7) 46 self.assertEqual(kCTFontViewsFontType, 8) 47 self.assertEqual(kCTFontApplicationFontType, 9) 48 self.assertEqual(kCTFontLabelFontType, 10) 49 self.assertEqual(kCTFontMenuTitleFontType, 11) 50 self.assertEqual(kCTFontMenuItemFontType, 12) 51 self.assertEqual(kCTFontMenuItemMarkFontType, 13) 52 self.assertEqual(kCTFontMenuItemCmdKeyFontType, 14) 53 self.assertEqual(kCTFontWindowTitleFontType, 15) 54 self.assertEqual(kCTFontPushButtonFontType, 16) 55 self.assertEqual(kCTFontUtilityWindowTitleFontType, 17) 56 self.assertEqual(kCTFontAlertHeaderFontType, 18) 57 self.assertEqual(kCTFontSystemDetailFontType, 19) 58 self.assertEqual(kCTFontEmphasizedSystemDetailFontType, 20) 59 self.assertEqual(kCTFontToolbarFontType, 21) 60 self.assertEqual(kCTFontSmallToolbarFontType, 22) 61 self.assertEqual(kCTFontMessageFontType, 23) 62 self.assertEqual(kCTFontPaletteFontType, 24) 63 self.assertEqual(kCTFontToolTipFontType, 25) 64 self.assertEqual(kCTFontControlContentFontType, 26) 65 66 self.assertIsInstance(kCTFontVariationAxisIdentifierKey, unicode) 67 self.assertIsInstance(kCTFontVariationAxisMinimumValueKey, unicode) 68 self.assertIsInstance(kCTFontVariationAxisMaximumValueKey, unicode) 69 self.assertIsInstance(kCTFontVariationAxisDefaultValueKey, unicode) 70 self.assertIsInstance(kCTFontVariationAxisNameKey, unicode) 71 72 self.assertIsInstance(kCTFontFeatureTypeIdentifierKey, unicode) 73 self.assertIsInstance(kCTFontFeatureTypeNameKey, unicode) 74 self.assertIsInstance(kCTFontFeatureTypeExclusiveKey, unicode) 75 self.assertIsInstance(kCTFontFeatureTypeSelectorsKey, unicode) 76 self.assertIsInstance(kCTFontFeatureSelectorIdentifierKey, unicode) 77 self.assertIsInstance(kCTFontFeatureSelectorNameKey, unicode) 78 self.assertIsInstance(kCTFontFeatureSelectorDefaultKey, unicode) 79 self.assertIsInstance(kCTFontFeatureSelectorSettingKey, unicode) 80 81 82 self.assertEqual(kCTFontTableBASE, fourcc(b'BASE')) 83 self.assertEqual(kCTFontTableCFF, fourcc(b'CFF ')) 84 self.assertEqual(kCTFontTableDSIG, fourcc(b'DSIG')) 85 self.assertEqual(kCTFontTableEBDT, fourcc(b'EBDT')) 86 self.assertEqual(kCTFontTableEBLC, fourcc(b'EBLC')) 87 self.assertEqual(kCTFontTableEBSC, fourcc(b'EBSC')) 88 self.assertEqual(kCTFontTableGDEF, fourcc(b'GDEF')) 89 self.assertEqual(kCTFontTableGPOS, fourcc(b'GPOS')) 90 self.assertEqual(kCTFontTableGSUB, fourcc(b'GSUB')) 91 self.assertEqual(kCTFontTableJSTF, fourcc(b'JSTF')) 92 self.assertEqual(kCTFontTableLTSH, fourcc(b'LTSH')) 93 self.assertEqual(kCTFontTableOS2, fourcc(b'OS/2')) 94 self.assertEqual(kCTFontTablePCLT, fourcc(b'PCLT')) 95 self.assertEqual(kCTFontTableVDMX, fourcc(b'VDMX')) 96 self.assertEqual(kCTFontTableVORG, fourcc(b'VORG')) 97 self.assertEqual(kCTFontTableZapf, fourcc(b'Zapf')) 98 self.assertEqual(kCTFontTableAcnt, fourcc(b'acnt')) 99 self.assertEqual(kCTFontTableAvar, fourcc(b'avar')) 100 self.assertEqual(kCTFontTableBdat, fourcc(b'bdat')) 101 self.assertEqual(kCTFontTableBhed, fourcc(b'bhed')) 102 self.assertEqual(kCTFontTableBloc, fourcc(b'bloc')) 103 self.assertEqual(kCTFontTableBsln, fourcc(b'bsln')) 104 self.assertEqual(kCTFontTableCmap, fourcc(b'cmap')) 105 self.assertEqual(kCTFontTableCvar, fourcc(b'cvar')) 106 self.assertEqual(kCTFontTableCvt, fourcc(b'cvt ')) 107 self.assertEqual(kCTFontTableFdsc, fourcc(b'fdsc')) 108 self.assertEqual(kCTFontTableFeat, fourcc(b'feat')) 109 self.assertEqual(kCTFontTableFmtx, fourcc(b'fmtx')) 110 self.assertEqual(kCTFontTableFpgm, fourcc(b'fpgm')) 111 self.assertEqual(kCTFontTableFvar, fourcc(b'fvar')) 112 self.assertEqual(kCTFontTableGasp, fourcc(b'gasp')) 113 self.assertEqual(kCTFontTableGlyf, fourcc(b'glyf')) 114 self.assertEqual(kCTFontTableGvar, fourcc(b'gvar')) 115 self.assertEqual(kCTFontTableHdmx, fourcc(b'hdmx')) 116 self.assertEqual(kCTFontTableHead, fourcc(b'head')) 117 self.assertEqual(kCTFontTableHhea, fourcc(b'hhea')) 118 self.assertEqual(kCTFontTableHmtx, fourcc(b'hmtx')) 119 self.assertEqual(kCTFontTableHsty, fourcc(b'hsty')) 120 self.assertEqual(kCTFontTableJust, fourcc(b'just')) 121 self.assertEqual(kCTFontTableKern, fourcc(b'kern')) 122 self.assertEqual(kCTFontTableLcar, fourcc(b'lcar')) 123 self.assertEqual(kCTFontTableLoca, fourcc(b'loca')) 124 self.assertEqual(kCTFontTableMaxp, fourcc(b'maxp')) 125 self.assertEqual(kCTFontTableMort, fourcc(b'mort')) 126 self.assertEqual(kCTFontTableMorx, fourcc(b'morx')) 127 self.assertEqual(kCTFontTableName, fourcc(b'name')) 128 self.assertEqual(kCTFontTableOpbd, fourcc(b'opbd')) 129 self.assertEqual(kCTFontTablePost, fourcc(b'post')) 130 self.assertEqual(kCTFontTablePrep, fourcc(b'prep')) 131 self.assertEqual(kCTFontTableProp, fourcc(b'prop')) 132 self.assertEqual(kCTFontTableTrak, fourcc(b'trak')) 133 self.assertEqual(kCTFontTableVhea, fourcc(b'vhea')) 134 self.assertEqual(kCTFontTableVmtx, fourcc(b'vmtx')) 135 136 self.assertEqual(kCTFontTableOptionNoOptions, 0) 137 self.assertEqual(kCTFontTableOptionExcludeSynthetic, (1 << 0)) 138 139 def testFunctions(self): 140 font = CTFontCreateWithName(u"Optima Bold", 141 14, 142 None) 143 self.assertIsInstance(font, CTFontRef) 144 self.assertResultIsCFRetained(CTFontCreateWithName) 145 146 descriptor = CTFontDescriptorCreateWithNameAndSize( 147 "Optima Bold", 14.0) 148 self.assertIsInstance(descriptor, CTFontDescriptorRef) 149 150 font = CTFontCreateWithFontDescriptor( 151 descriptor, 5.0, None) 152 self.assertIsInstance(font, CTFontRef) 153 self.assertResultIsCFRetained(CTFontCreateWithFontDescriptor) 154 155 font = CTFontCreateUIFontForLanguage( 156 kCTFontMiniSystemFontType, 157 10.0, "nl_NL") 158 self.assertIsInstance(font, CTFontRef) 159 self.assertResultIsCFRetained(CTFontCreateUIFontForLanguage) 160 161 font2 = CTFontCreateCopyWithAttributes( 162 font, 163 9.0, 164 None, 165 None) 166 167 self.assertIsInstance(font2, CTFontRef) 168 self.assertResultIsCFRetained(CTFontCreateCopyWithAttributes) 169 170 font2 = CTFontCreateCopyWithSymbolicTraits( 171 font, 14.0, None, 172 kCTFontBoldTrait, kCTFontBoldTrait) 173 self.assertIsInstance(font2, CTFontRef) 174 self.assertResultIsCFRetained(CTFontCreateCopyWithAttributes) 175 176 177 font2 = CTFontCreateCopyWithFamily( 178 font, 14.0, None, "Lucida Grande") 179 self.assertIsInstance(font2, CTFontRef) 180 self.assertResultIsCFRetained(CTFontCreateCopyWithFamily) 181 182 font2 = CTFontCreateForString( 183 font, u"hello world", CFRange(1, 4)) 184 self.assertIsInstance(font2, CTFontRef) 185 self.assertResultIsCFRetained(CTFontCreateForString) 186 187 descriptor = CTFontCopyFontDescriptor(font) 188 self.assertIsInstance(descriptor, CTFontDescriptorRef) 189 190 v = CTFontCopyAttribute(font, "size") 191 self.assertIsNone(v) 192 self.assertResultIsCFRetained(CTFontCopyAttribute) 193 194 v = CTFontGetSize(font) 195 self.assertIsInstance(v, float) 196 197 v = CTFontGetMatrix(font) 198 self.assertIsInstance(v, CGAffineTransform) 199 200 v = CTFontGetSymbolicTraits(font) 201 self.assertIsInstance(v, (int, long)) 202 203 v = CTFontCopyTraits(font) 204 self.assertIsInstance(v, CFDictionaryRef) 205 206 v = CTFontCopyPostScriptName(font) 207 self.assertIsInstance(v, unicode) 208 209 v = CTFontCopyFamilyName(font) 210 self.assertIsInstance(v, unicode) 211 212 v = CTFontCopyFullName(font) 213 self.assertIsInstance(v, unicode) 214 215 v = CTFontCopyDisplayName(font) 216 self.assertIsInstance(v, unicode) 217 218 v = CTFontCopyName(font, kCTFontCopyrightNameKey) 219 self.assertIsInstance(v, unicode) 220 221 v, l = CTFontCopyLocalizedName(font, kCTFontCopyrightNameKey, None) 222 self.assertIsInstance(v, unicode) 223 self.assertIsInstance(l, (unicode, type(None))) 224 self.assertArgIsOut(CTFontCopyLocalizedName, 2) 225 226 v = CTFontCopyCharacterSet(font) 227 self.assertIsInstance(v, CFCharacterSetRef) 228 229 v = CTFontGetStringEncoding(font) 230 self.assertIsInstance(v, (int, long)) 231 232 v = CTFontCopySupportedLanguages(font) 233 self.assertIsInstance(v, CFArrayRef) 234 235 self.assertArgIsOut(CTFontGetGlyphsForCharacters, 2) 236 v, gl = CTFontGetGlyphsForCharacters(font, 237 u"hello", None, 5) 238 239 self.assertTrue(v is True) 240 self.assertIsInstance(gl, tuple) 241 self.assertEqual(len(gl), 5) 242 self.assertIsInstance(gl[0], (int, long)) 243 244 v = CTFontGetAscent(font) 245 self.assertIsInstance(v, float) 246 247 v = CTFontGetDescent(font) 248 self.assertIsInstance(v, float) 249 250 v = CTFontGetLeading(font) 251 self.assertIsInstance(v, float) 252 253 v = CTFontGetUnitsPerEm(font) 254 self.assertIsInstance(v, (int, long)) 255 256 v = CTFontGetGlyphCount(font) 257 self.assertIsInstance(v, (int, long)) 258 259 v = CTFontGetBoundingBox(font) 260 self.assertIsInstance(v, CGRect) 261 262 v = CTFontGetUnderlinePosition(font) 263 self.assertIsInstance(v, float) 264 265 v = CTFontGetUnderlineThickness(font) 266 self.assertIsInstance(v, float) 267 268 v = CTFontGetSlantAngle(font) 269 self.assertIsInstance(v, float) 270 271 v = CTFontGetCapHeight(font) 272 self.assertIsInstance(v, float) 273 274 v = CTFontGetXHeight(font) 275 self.assertIsInstance(v, float) 276 277 v = CTFontGetGlyphWithName(font, "A") 278 self.assertIsInstance(v, (int, long)) 279 280 281 v, r = CTFontGetBoundingRectsForGlyphs(font, 282 kCTFontDefaultOrientation, gl, None, 5) 283 self.assertIsInstance(v, CGRect) 284 self.assertIsInstance(r, tuple) 285 self.assertEqual(len(r), 5) 286 self.assertIsInstance(r[0], CGRect) 287 288 289 v, r = CTFontGetAdvancesForGlyphs(font, 290 kCTFontDefaultOrientation, gl, None, 5) 291 self.assertIsInstance(v, float) 292 self.assertIsInstance(r, tuple) 293 self.assertEqual(len(r), 5) 294 self.assertIsInstance(r[0], CGSize) 295 296 r = CTFontGetVerticalTranslationsForGlyphs(font, gl, None, 5) 297 self.assertIsInstance(r, tuple) 298 self.assertEqual(len(r), 5) 299 self.assertIsInstance(r[0], CGSize) 300 301 v = CTFontCreatePathForGlyph(font, gl[0], None) 302 self.assertIsInstance(v, CGPathRef) 303 304 self.assertResultIsCFRetained(CTFontCopyVariationAxes) 305 v = CTFontCopyVariationAxes(font) 306 if v is not None: 307 self.assertIsInstance(v, CFArrayRef) 308 309 self.assertResultIsCFRetained(CTFontCopyVariation) 310 v = CTFontCopyVariation(font) 311 if v is not None: 312 self.assertIsInstance(v, CFDictionaryRef) 313 314 v = CTFontCopyFeatures(font) 315 self.assertIsInstance(v, CFArrayRef) 316 self.assertResultIsCFRetained(CTFontCopyFeatures) 317 318 self.assertResultIsCFRetained(CTFontCopyFeatureSettings) 319 v = CTFontCopyFeatureSettings(font) 320 if v is not None: 321 self.assertIsInstance(v, CFArrayRef) 322 323 v, o = CTFontCopyGraphicsFont(font, None) 324 self.assertIsInstance(v, CGFontRef) 325 if o is not None: 326 self.assertIsInstance(o, CTFontDescriptorRef) 327 self.assertResultIsCFRetained(CTFontCopyGraphicsFont) 328 self.assertArgIsCFRetained(CTFontCopyGraphicsFont, 1) 329 self.assertArgIsOut(CTFontCopyGraphicsFont, 1) 330 331 v = CTFontCreateWithGraphicsFont(v, 20.5, None, None) 332 self.assertIsInstance(v, CTFontRef) 333 self.assertResultIsCFRetained(CTFontCreateWithGraphicsFont) 334 335 if 0: 336 # Cannot tests these because the ATS framework is not 337 # wrapped. 338 v, o = CTFontGetPlatformFont(font, None) 339 self.assertIsInstance(v, ATSFontRef) 340 self.assertIsInstance(o, CTFontDescriptorRef) 341 342 v = CTFontCreateWithPlatformFont(v, 22.5, None, None) 343 self.assertIsInstance(v, CGFontRef) 344 345 self.assertArgIsCFRetained(CTFontGetPlatformFont, 1) 346 self.assertResultIsCFRetained(CTFontCreateWithPlatformFont) 347 348 v = CTFontCopyAvailableTables(font, kCTFontTableOptionNoOptions) 349 self.assertIsInstance(v, tuple) 350 351 v = CTFontCopyTable(font, v[0], 0) 352 self.assertIsInstance(v, CFDataRef) 353 354 v = CTFontGetTypeID() 355 self.assertIsInstance(v, (int, long)) 356 357 @min_os_level('10.6') 358 def testFunctions10_6(self): 359 self.assertResultIsCFRetained(CTFontCreateWithNameAndOptions) 360 v = CTFontCreateWithNameAndOptions(u"Times", 15, None, 0) 361 self.assertIsInstance(v, CTFontRef) 362 363 364 descr = CTFontDescriptorCreateWithNameAndSize( 365 u"Courier", 14.0) 366 self.assertNotEqual(descr, None) 367 368 # FIXME: this crashes the interpreter, without a clear reason 369 return 370 371 self.assertResultIsCFRetained(CTFontCreateWithFontDescriptorAndOptions) 372 v = CTFontCreateWithFontDescriptorAndOptions(descr, 14.0, None, 0) 373 self.assertIsInstance(v, CTFontRef) 374 375 376if __name__ == "__main__": 377 main() 378