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