1
2from PyObjCTools.TestSupport import *
3from AppKit import *
4
5
6class TestNSATSTypesetterHelper (NSATSTypesetter):
7        def willSetLineFragmentRect_forGlyphRange_usedRect_baselineOffset_(
8                self, lineRect, glyphRange, usedRect, offset):
9            return None
10
11
12        def shouldBreakLineByWordBeforeCharacterAtIndex_(self, v):
13            return None
14
15        def shouldBreakLineByHyphenatingBeforeCharacterAtIndex_(self, v):
16            return True
17
18        def hyphenationFactorForGlyphAtIndex_(self, v):
19            return None
20
21        def hyphenCharacterForGlyphAtIndex_(self, v):
22            return None
23
24        def boundingBoxForControlGlyphAtIndex_forTextContainer_proposedLineFragment_glyphPosition_characterIndex_(self, v, v2, v3, v4, v5):
25            return None
26
27        def characterRangeForGlyphRange_actualGlyphRange_(self, v1, v2):
28            pass
29
30        def glyphRangeForCharacterRange_actualCharacterRange_(self, v1, v2):
31            pass
32
33        def getGlyphsInRange_glyphs_characterIndexes_glyphInscriptions_elasticBits_(self, v1, v2, v3, v4, v5):
34            pass
35
36        def setLineFragmentRect_forGlyphRange_usedRect_baselineOffset_(self, v1, v2, v3, v4):
37            pass
38
39        def substituteGlyphsInRange_withGlyphs_(self, v1, v2):
40            pass
41
42        def insertGlyph_atGlyphIndex_characterIndex_(self, v1, v2, v3):
43            pass
44
45        def deleteGlyphsInRange_(self, v1):
46            pass
47
48        def setNotShownAttribute_forGlyphRange_(self, v1, v2):
49            pass
50
51        def setLocation_withAdvancements_forStartOfGlyphRange_(self, v1, v2, v3):
52            pass
53
54        def setAttachmentSize_forGlyphRange_(self, v1, v2):
55            pass
56
57        def setBidiLevels_forGlyphRange_(self, v1, v2):
58            pass
59
60
61class TestNSATSTypesetter (TestCase):
62    def testByRefArguments(self):
63        self.failUnlessArgIsOut(NSATSTypesetter.lineFragmentRectForProposedRect_remainingRect_, 1)
64        self.failUnlessArgIsInOut(NSATSTypesetter.layoutParagraphAtPoint_, 0)
65        self.failUnlessArgIsOut(NSATSTypesetter.getLineFragmentRect_usedRect_forParagraphSeparatorGlyphRange_atProposedOrigin_, 0)
66        self.failUnlessArgIsOut(NSATSTypesetter.getLineFragmentRect_usedRect_forParagraphSeparatorGlyphRange_atProposedOrigin_, 1)
67
68        o = TestNSATSTypesetterHelper.alloc().init()
69        m = o.willSetLineFragmentRect_forGlyphRange_usedRect_baselineOffset_.__metadata__()
70        self.failUnlessStartswith(m['arguments'][2]['type'], 'N^{')
71        self.failUnlessStartswith(m['arguments'][4]['type'], 'N^{')
72        self.failUnlessStartswith(m['arguments'][5]['type'], 'N^f')
73
74        m = o.shouldBreakLineByWordBeforeCharacterAtIndex_.__metadata__()
75        self.failUnlessEqual(m['retval']['type'], objc._C_NSBOOL)
76        self.failUnlessEqual(m['arguments'][2]['type'], objc._C_UINT)
77
78        m = o.shouldBreakLineByHyphenatingBeforeCharacterAtIndex_.__metadata__()
79        self.failUnlessEqual(m['retval']['type'], objc._C_NSBOOL)
80        self.failUnlessEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
81
82        m = o.hyphenationFactorForGlyphAtIndex_.__metadata__()
83        self.failUnlessEqual(m['retval']['type'], objc._C_FLT)
84        self.failUnlessEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
85
86        m = o.hyphenCharacterForGlyphAtIndex_.__metadata__()
87        self.failUnlessEqual(m['retval']['type'], objc._C_UINT)
88        self.failUnlessEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
89
90        m = o.boundingBoxForControlGlyphAtIndex_forTextContainer_proposedLineFragment_glyphPosition_characterIndex_.__metadata__()
91        self.failUnlessEqual(m['retval']['type'], NSRect.__typestr__)
92        self.failUnlessEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
93        self.failUnlessEqual(m['arguments'][3]['type'], objc._C_ID)
94        self.failUnlessStartswith(m['arguments'][4]['type'], '{')
95        self.failUnlessStartswith(m['arguments'][5]['type'], '{')
96        self.failUnlessStartswith(m['arguments'][6]['type'], objc._C_NSUInteger)
97
98
99
100        m = o.characterRangeForGlyphRange_actualGlyphRange_.__metadata__()
101        self.failUnlessStartswith(m['retval']['type'], '{')
102        self.failUnlessStartswith(m['arguments'][2]['type'], '{')
103        self.failUnlessStartswith(m['arguments'][3]['type'], 'o^{')
104
105        m = o.glyphRangeForCharacterRange_actualCharacterRange_.__metadata__()
106        self.failUnlessStartswith(m['retval']['type'], '{')
107        self.failUnlessStartswith(m['arguments'][2]['type'], '{')
108        self.failUnlessStartswith(m['arguments'][3]['type'], 'o^{')
109
110        m = o.getGlyphsInRange_glyphs_characterIndexes_glyphInscriptions_elasticBits_.__metadata__()
111        self.failUnlessEqual(m['retval']['type'], objc._C_NSUInteger)
112        self.failUnlessEqual(m['arguments'][2]['type'], NSRange.__typestr__)
113        self.failUnlessEqual(m['arguments'][3]['type'], 'o^S')
114        self.failUnlessEqual(m['arguments'][3]['c_array_length_in_arg'], 2)
115        self.failUnlessEqual(m['arguments'][4]['type'], objc._C_OUT + objc._C_PTR + objc._C_NSUInteger)
116        self.failUnlessEqual(m['arguments'][4]['c_array_length_in_arg'], 2)
117        m = o.setLineFragmentRect_forGlyphRange_usedRect_baselineOffset_.__metadata__()
118        m = o.substituteGlyphsInRange_withGlyphs_.__metadata__()
119        m = o.insertGlyph_atGlyphIndex_characterIndex_.__metadata__()
120        m = o.deleteGlyphsInRange_.__metadata__()
121        m = o.setNotShownAttribute_forGlyphRange_.__metadata__()
122        m = o.setLocation_withAdvancements_forStartOfGlyphRange_.__metadata__()
123        m = o.setAttachmentSize_forGlyphRange_.__metadata__()
124        m = o.setBidiLevels_forGlyphRange_.__metadata__()
125
126
127        self.failUnlessResultIsBOOL(NSATSTypesetter.usesFontLeading)
128        self.failUnlessArgIsBOOL(NSATSTypesetter.setUsesFontLeading_, 0)
129        self.failUnlessResultIsBOOL(NSATSTypesetter.bidiProcessingEnabled)
130        self.failUnlessArgIsBOOL(NSATSTypesetter.setBidiProcessingEnabled_, 0)
131        self.failUnlessArgIsBOOL(NSATSTypesetter.setHardInvalidation_forGlyphRange_, 0)
132        self.failUnlessArgIsBOOL(NSATSTypesetter.setNotShownAttribute_forGlyphRange_, 0)
133        self.failUnlessArgIsBOOL(NSATSTypesetter.setDrawsOutsideLineFragment_forGlyphRange_, 0)
134
135
136        self.failUnlessArgIsIn(NSATSTypesetter.setLocation_withAdvancements_forStartOfGlyphRange_, 1)
137        self.failUnlessArgSizeInArg(NSATSTypesetter.setLocation_withAdvancements_forStartOfGlyphRange_, 1, 2)
138        self.failUnlessArgSizeInArg(NSATSTypesetter.setBidiLevels_forGlyphRange_, 0, 1)
139        self.failUnlessArgSizeInArg(NSATSTypesetter.setBidiLevels_forGlyphRange_, 0, 1)
140
141    def testSubclassProtocols(self):
142        self.failUnlessResultIsBOOL(TestNSATSTypesetterHelper.shouldBreakLineByWordBeforeCharacterAtIndex_)
143        self.failUnlessResultIsBOOL(TestNSATSTypesetterHelper.shouldBreakLineByHyphenatingBeforeCharacterAtIndex_)
144
145
146
147if __name__ == "__main__":
148    main()
149