1from PyObjCTools.TestSupport import * 2import objc 3 4import AppKit 5from AppKit import * 6 7import os 8 9class TestNSFont(TestCase): 10 def matrixEquals(self, value1, value2): 11 self.assertEquals(len(value1), len(value2)) 12 for v1, v2 in zip(value1, value2): 13 # This should probably be 'assertAlmostEquals' 14 self.assertEquals(v1, v2) 15 16 17 def testMatrixMethods(self): 18 o = AppKit.NSFont.boldSystemFontOfSize_(10); 19 m = o.matrix() 20 self.assert_(isinstance(m, tuple)) 21 self.assertEquals(len(m), 6) 22 23 nm = o.fontName() 24 25 o = AppKit.NSFont.fontWithName_matrix_( 26 nm, AppKit.NSFontIdentityMatrix) 27 self.assert_(o is not None) 28 29 m = o.matrix() 30 self.assert_(isinstance(m, tuple)) 31 self.assertEquals(len(m), 6) 32 33 self.matrixEquals(m, (1.0, 0.0, 0.0, 1.0, 0.0, 0.0)) 34 35 # For some reason Tiger transforms this matrix to the one below. The 36 # same thing happens in pure ObjC code. 37 #o = AppKit.NSFont.fontWithName_matrix_(nm, (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)) 38 o = AppKit.NSFont.fontWithName_matrix_(nm, (12.0, 0.0, 0.0, 12.0, 0.0, 0.0)) 39 self.assert_(o is not None) 40 41 m = o.matrix() 42 self.assert_(isinstance(m, tuple)) 43 self.assertEquals(len(m), 6) 44 45 #self.matrixEquals(m, (1.0, 2.0, 3.0, 4.0, 5.0, 6.0)) 46 self.matrixEquals(m, (12.0, 0.0, 0.0, 12.0, 0.0, 0.0)) 47 48 self.assertRaises(ValueError, AppKit.NSFont.fontWithName_matrix_, nm, "foo") 49 self.assertRaises(ValueError, AppKit.NSFont.fontWithName_matrix_, nm, (1, 2, 3, 4)) 50 self.assertRaises(ValueError, AppKit.NSFont.fontWithName_matrix_, nm, (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0)) 51 52 53 def testConstants(self): 54 self.assertEquals(AppKit.NSFontIdentityMatrix, None) 55 56 self.failUnlessEqual(NSControlGlyph, 0xffffff) 57 self.failUnlessEqual(NSNullGlyph, 0) 58 self.failUnlessEqual(NSNativeShortGlyphPacking, 5) 59 60 self.failUnlessEqual(NSFontDefaultRenderingMode, 0) 61 self.failUnlessEqual(NSFontAntialiasedRenderingMode, 1) 62 self.failUnlessEqual(NSFontIntegerAdvancementsRenderingMode, 2) 63 self.failUnlessEqual(NSFontAntialiasedIntegerAdvancementsRenderingMode, 3) 64 65 self.failUnlessIsInstance(NSAntialiasThresholdChangedNotification, unicode) 66 self.failUnlessIsInstance(NSFontSetChangedNotification, unicode) 67 68 @onlyOn32Bit 69 def testConstants_32bitonly(self): 70 self.failUnlessEqual(NSOneByteGlyphPacking, 0) 71 self.failUnlessEqual(NSJapaneseEUCGlyphPacking, 1) 72 self.failUnlessEqual(NSAsciiWithDoubleByteEUCGlyphPacking, 2) 73 self.failUnlessEqual(NSTwoByteGlyphPacking, 3) 74 self.failUnlessEqual(NSFourByteGlyphPacking, 4) 75 76 self.failUnlessEqual(NSGlyphBelow, 1) 77 self.failUnlessEqual(NSGlyphAbove, 2) 78 79 self.failUnlessIsInstance(NSAFMFamilyName, unicode) 80 self.failUnlessIsInstance(NSAFMFontName, unicode) 81 self.failUnlessIsInstance(NSAFMFormatVersion, unicode) 82 self.failUnlessIsInstance(NSAFMFullName, unicode) 83 self.failUnlessIsInstance(NSAFMNotice, unicode) 84 self.failUnlessIsInstance(NSAFMVersion, unicode) 85 self.failUnlessIsInstance(NSAFMWeight, unicode) 86 self.failUnlessIsInstance(NSAFMEncodingScheme, unicode) 87 self.failUnlessIsInstance(NSAFMCharacterSet, unicode) 88 self.failUnlessIsInstance(NSAFMCapHeight, unicode) 89 self.failUnlessIsInstance(NSAFMXHeight, unicode) 90 self.failUnlessIsInstance(NSAFMAscender, unicode) 91 self.failUnlessIsInstance(NSAFMDescender, unicode) 92 self.failUnlessIsInstance(NSAFMUnderlinePosition, unicode) 93 self.failUnlessIsInstance(NSAFMUnderlineThickness, unicode) 94 self.failUnlessIsInstance(NSAFMItalicAngle, unicode) 95 self.failUnlessIsInstance(NSAFMMappingScheme, unicode) 96 97 98 99 100 101 def testMethods(self): 102 self.failUnlessResultIsBOOL(NSFont.isFixedPitch) 103 self.failUnlessArgHasType(NSFont.getBoundingRects_forGlyphs_count_, 1, 'n^I') 104 self.failUnlessArgSizeInArg(NSFont.getBoundingRects_forGlyphs_count_, 0, 2) 105 self.failUnlessArgSizeInArg(NSFont.getBoundingRects_forGlyphs_count_, 1, 2) 106 self.failUnlessArgHasType(NSFont.getAdvancements_forGlyphs_count_, 1, 'n^I') 107 self.failUnlessArgSizeInArg(NSFont.getAdvancements_forGlyphs_count_, 0, 2) 108 self.failUnlessArgSizeInArg(NSFont.getAdvancements_forGlyphs_count_, 1, 2) 109 self.failUnlessArgSizeInArg(NSFont.getAdvancements_forPackedGlyphs_length_, 0, 2) 110 self.failUnlessArgSizeInArg(NSFont.getAdvancements_forPackedGlyphs_length_, 1, 2) 111 112 @onlyOn32Bit 113 def testMethods32(self): 114 self.failUnlessResultIsBOOL(NSFont.isBaseFont) 115 self.failUnlessResultIsBOOL(NSFont.glyphIsEncoded_) 116 self.failUnlessArgHasType(NSFont.glyphIsEncoded_, 0, 'I') 117 self.failUnlessArgHasType(NSFont.positionOfGlyph_precededByGlyph_isNominal_, 0, 'I') 118 self.failUnlessArgHasType(NSFont.positionOfGlyph_precededByGlyph_isNominal_, 1, 'I') 119 self.failUnlessArgHasType(NSFont.positionOfGlyph_precededByGlyph_isNominal_, 2, 'o^'+objc._C_NSBOOL) 120 121 self.failUnlessArgHasType(NSFont.positionsForCompositeSequence_numberOfGlyphs_pointArray_, 0, 'n^I') 122 self.failUnlessArgSizeInArg(NSFont.positionsForCompositeSequence_numberOfGlyphs_pointArray_, 0, 1) 123 self.failUnlessArgHasType(NSFont.positionsForCompositeSequence_numberOfGlyphs_pointArray_, 2, 'o^'+NSPoint.__typestr__) 124 self.failUnlessArgSizeInArg(NSFont.positionsForCompositeSequence_numberOfGlyphs_pointArray_, 2, 1) 125 126 self.failUnlessArgHasType(NSFont.positionOfGlyph_struckOverGlyph_metricsExist_, 2, 'o^' + objc._C_NSBOOL) 127 self.failUnlessArgHasType(NSFont.positionOfGlyph_struckOverRect_metricsExist_, 2, 'o^' + objc._C_NSBOOL) 128 self.failUnlessArgHasType(NSFont.positionOfGlyph_withRelation_toBaseGlyph_totalAdvancement_metricsExist_, 3, 'o^' + NSSize.__typestr__) 129 self.failUnlessArgHasType(NSFont.positionOfGlyph_withRelation_toBaseGlyph_totalAdvancement_metricsExist_, 4, 'o^' + objc._C_NSBOOL) 130 131 132 def testFunctions(self): 133 glyphs = [ ord('A'), ord('B'), ord('9'), ord('a') ] 134 135 rv, packed = NSConvertGlyphsToPackedGlyphs(glyphs, len(glyphs), NSNativeShortGlyphPacking, None) 136 self.failUnlessIsInstance(rv, (int, long)) 137 self.failUnlessIsInstance(packed, str) 138 if rv == 0: 139 self.failUnlessEqual(len(packed), 0) 140 141 else: 142 self.failUnlessEqual(len(packed), rv) 143 144if __name__ == '__main__': 145 main( ) 146