1from PyObjCTools.TestSupport import *
2from CoreFoundation import *
3from Foundation import NSCFAttributedString
4
5
6class TestAttributedString (TestCase):
7    def testTypes(self):
8        self.failUnless( CFAttributedStringRef is NSCFAttributedString )
9        self.failUnless( CFMutableAttributedStringRef is NSCFAttributedString )
10
11    def testTypeID(self):
12        v = CFAttributedStringGetTypeID()
13        self.failUnless(  isinstance(v, (int, long)) )
14
15    def testCreate(self):
16        val = CFAttributedStringCreate(None, u"hello", {u'foo': 42})
17        self.failUnless(  isinstance(val, CFAttributedStringRef) )
18
19        val = CFAttributedStringCreateWithSubstring(None, val, (1,2))
20        self.failUnless(  isinstance(val, CFAttributedStringRef) )
21
22        val2 = CFAttributedStringCreateCopy(None, val)
23        self.failUnless(val2 is val)
24
25    def testGetting(self):
26        val = CFAttributedStringCreate(None, u"hello", {u'foo': 42, u'bar':'baz'})
27        self.failUnless(  isinstance(val, CFAttributedStringRef) )
28
29        dta = CFAttributedStringGetString(val)
30        self.failUnless( dta == u"hello" )
31
32        l = CFAttributedStringGetLength(val)
33        self.failUnless( l == 5 )
34
35        v, rng = CFAttributedStringGetAttributes(val, 1, None)
36        self.failUnless( v == {u'foo': 42, u'bar': 'baz' } )
37        self.failUnless( rng == (0, 5) )
38
39        v, rng = CFAttributedStringGetAttributes(val, 1, objc.NULL)
40        self.failUnless( v == {u'foo': 42, u'bar': 'baz' } )
41        self.failUnless( rng == objc.NULL )
42
43        v, rng = CFAttributedStringGetAttribute(val, 1, u"foo", None)
44        self.failUnless( v == 42 )
45        self.failUnless( rng == (0, 5) )
46
47        v, rng = CFAttributedStringGetAttribute(val, 1, u"foo", objc.NULL)
48        self.failUnless( v == 42 )
49        self.failUnless( rng == objc.NULL )
50
51        v, rng = CFAttributedStringGetAttributesAndLongestEffectiveRange(val, 1, (0,5), None)
52        self.failUnless( v == {u'foo': 42, u'bar': 'baz' } )
53        self.failUnless( rng == (0, 5) )
54
55        v, rng = CFAttributedStringGetAttributesAndLongestEffectiveRange(val, 1, (0,5), objc.NULL)
56        self.failUnless( v == {u'foo': 42, u'bar': 'baz' } )
57        self.failUnless( rng == objc.NULL )
58
59        v, rng = CFAttributedStringGetAttributeAndLongestEffectiveRange(val, 1, u'bar', (0,5), None)
60        self.failUnless( v == 'baz' )
61        self.failUnless( rng == (0, 5) )
62
63        v, rng = CFAttributedStringGetAttributeAndLongestEffectiveRange(val, 1, u'bar', (0,5), objc.NULL)
64        self.failUnless( v == 'baz' )
65        self.failUnless( rng == objc.NULL )
66
67
68    def testMutableCopy(self):
69        val = CFAttributedStringCreateMutable(None, 0)
70        self.failUnless(  isinstance(val, CFAttributedStringRef) )
71
72        orig = CFAttributedStringCreate(None, u"hello", {u'foo': 42, u'bar':'baz'})
73        self.failUnless(  isinstance(orig, CFAttributedStringRef) )
74
75        val = CFAttributedStringCreateMutableCopy(None, 0, orig)
76        self.failUnless(  isinstance(orig, CFAttributedStringRef) )
77        self.failIf( val is orig)
78
79        CFAttributedStringReplaceString(val, (0,3), "Hal")
80        dta = CFAttributedStringGetString(val)
81        self.failUnless( dta == u"Hallo" )
82
83        v = CFAttributedStringGetMutableString(val)
84        self.failUnless( v is None )
85
86
87        CFAttributedStringSetAttributes(val, (0, 2), {u'ronald':99}, False)
88        v, rng = CFAttributedStringGetAttributes(val, 1, None)
89        self.failUnless( v == {u'ronald':99, u'foo': 42, u'bar': 'baz' } )
90        self.failUnless( rng == (0, 2) )
91
92        v, rng = CFAttributedStringGetAttributes(val, 3, None)
93        self.failUnless( v == {u'foo': 42, u'bar': 'baz' } )
94        self.failUnless( rng == (2, 3) )
95        self.failUnless( isinstance(rng, CFRange) )
96
97        CFAttributedStringSetAttributes(val, (0, 2), {u'ronald':99}, True)
98        v, rng = CFAttributedStringGetAttributes(val, 1, None)
99        self.failUnless( v == {u'ronald':99} )
100        self.failUnless( rng == (0, 2) )
101
102        CFAttributedStringSetAttribute(val, (1, 3), u'color', u'blue')
103        v, rng = CFAttributedStringGetAttributes(val, 1, None)
104        self.failUnless( v == {u'ronald':99, u'color':u'blue'} )
105        self.failUnless( rng == (1, 1) )
106
107
108        CFAttributedStringRemoveAttribute(val, (1,3), u'color')
109        v, rng = CFAttributedStringGetAttributes(val, 3, None)
110        self.failUnless( v == {u'foo': 42, u'bar': 'baz' } )
111        self.failUnless( rng == (2, 2) )
112
113        rep = CFAttributedStringCreate(None, "dummy", {u'attrib': 99} )
114        CFAttributedStringReplaceAttributedString(val, (1,3), rep)
115        self.failUnless( CFAttributedStringGetString(val) == u'Hdummyo')
116
117    def testEditing(self):
118        val = CFAttributedStringCreateMutable(None, 0)
119        self.failUnless(  isinstance(val, CFAttributedStringRef) )
120
121        CFAttributedStringBeginEditing(val)
122        CFAttributedStringEndEditing(val)
123
124if __name__ == "__main__":
125    main()
126