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.assertArgIsOut(NSATSTypesetter.lineFragmentRectForProposedRect_remainingRect_, 1)
64        self.assertArgIsInOut(NSATSTypesetter.layoutParagraphAtPoint_, 0)
65        self.assertArgIsOut(NSATSTypesetter.getLineFragmentRect_usedRect_forParagraphSeparatorGlyphRange_atProposedOrigin_, 0)
66        self.assertArgIsOut(NSATSTypesetter.getLineFragmentRect_usedRect_forParagraphSeparatorGlyphRange_atProposedOrigin_, 1)
67
68        o = TestNSATSTypesetterHelper.alloc().init()
69        m = o.willSetLineFragmentRect_forGlyphRange_usedRect_baselineOffset_.__metadata__()
70        self.assertStartswith(m['arguments'][2]['type'], b'N^{')
71        self.assertStartswith(m['arguments'][4]['type'], b'N^{')
72        self.assertStartswith(m['arguments'][5]['type'], b'N^' + objc._C_CGFloat)
73
74        m = o.shouldBreakLineByWordBeforeCharacterAtIndex_.__metadata__()
75        self.assertEqual(m['retval']['type'], objc._C_NSBOOL)
76        self.assertEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
77
78        m = o.shouldBreakLineByHyphenatingBeforeCharacterAtIndex_.__metadata__()
79        self.assertEqual(m['retval']['type'], objc._C_NSBOOL)
80        self.assertEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
81
82        m = o.hyphenationFactorForGlyphAtIndex_.__metadata__()
83        self.assertEqual(m['retval']['type'], objc._C_FLT)
84        self.assertEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
85
86        #m = o.hyphenCharacterForGlyphAtIndex_.__metadata__()
87        #self.assertEqual(m['retval']['type'], objc._C_UINT)
88        #self.assertEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
89
90        #m = o.boundingBoxForControlGlyphAtIndex_forTextContainer_proposedLineFragment_glyphPosition_characterIndex_.__metadata__()
91        #self.assertEqual(m['retval']['type'], NSRect.__typestr__)
92        #self.assertEqual(m['arguments'][2]['type'], objc._C_NSUInteger)
93        #self.assertEqual(m['arguments'][3]['type'], objc._C_ID)
94        #self.assertStartswith(m['arguments'][4]['type'], '{')
95        #self.assertStartswith(m['arguments'][5]['type'], '{')
96        #self.assertStartswith(m['arguments'][6]['type'], objc._C_NSUInteger)
97
98
99
100        #m = o.characterRangeForGlyphRange_actualGlyphRange_.__metadata__()
101        #self.assertStartswith(m['retval']['type'], '{')
102        #self.assertStartswith(m['arguments'][2]['type'], '{')
103        #self.assertStartswith(m['arguments'][3]['type'], 'o^{')
104
105        m = o.glyphRangeForCharacterRange_actualCharacterRange_.__metadata__()
106        self.assertStartswith(m['retval']['type'], b'{')
107        self.assertStartswith(m['arguments'][2]['type'], b'{')
108        self.assertStartswith(m['arguments'][3]['type'], b'o^{')
109
110        #m = o.getGlyphsInRange_glyphs_characterIndexes_glyphInscriptions_elasticBits_.__metadata__()
111        #self.assertEqual(m['retval']['type'], objc._C_NSUInteger)
112        #self.assertEqual(m['arguments'][2]['type'], NSRange.__typestr__)
113        #self.assertEqual(m['arguments'][3]['type'], 'o^S')
114        #self.assertEqual(m['arguments'][3]['c_array_length_in_arg'], 2)
115        #self.assertEqual(m['arguments'][4]['type'], objc._C_OUT + objc._C_PTR + objc._C_NSUInteger)
116        #self.assertEqual(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.assertResultIsBOOL(NSATSTypesetter.usesFontLeading)
128        self.assertArgIsBOOL(NSATSTypesetter.setUsesFontLeading_, 0)
129        self.assertResultIsBOOL(NSATSTypesetter.bidiProcessingEnabled)
130        self.assertArgIsBOOL(NSATSTypesetter.setBidiProcessingEnabled_, 0)
131        self.assertArgIsBOOL(NSATSTypesetter.setHardInvalidation_forGlyphRange_, 0)
132        self.assertArgIsBOOL(NSATSTypesetter.setNotShownAttribute_forGlyphRange_, 0)
133        self.assertArgIsBOOL(NSATSTypesetter.setDrawsOutsideLineFragment_forGlyphRange_, 0)
134
135
136        self.assertArgIsIn(NSATSTypesetter.setLocation_withAdvancements_forStartOfGlyphRange_, 1)
137        self.assertArgSizeInArg(NSATSTypesetter.setLocation_withAdvancements_forStartOfGlyphRange_, 1, 2)
138        self.assertArgSizeInArg(NSATSTypesetter.setBidiLevels_forGlyphRange_, 0, 1)
139        self.assertArgSizeInArg(NSATSTypesetter.setBidiLevels_forGlyphRange_, 0, 1)
140
141    def testSubclassProtocols(self):
142        self.assertResultIsBOOL(TestNSATSTypesetterHelper.shouldBreakLineByWordBeforeCharacterAtIndex_)
143        self.assertResultIsBOOL(TestNSATSTypesetterHelper.shouldBreakLineByHyphenatingBeforeCharacterAtIndex_)
144
145
146
147if __name__ == "__main__":
148    main()
149