Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / lib / cssutils / tests / test_cssfontfacerule.py @ 475

History | View | Annotate | Download (8.76 KB)

1
"""Testcases for cssutils.css.CSSFontFaceRule"""
2

    
3
import xml.dom
4
import test_cssrule
5
import cssutils
6

    
7
class CSSFontFaceRuleTestCase(test_cssrule.CSSRuleTestCase):
8

    
9
    def setUp(self):
10
        super(CSSFontFaceRuleTestCase, self).setUp()
11
        self.r = cssutils.css.CSSFontFaceRule()
12
        self.rRO = cssutils.css.CSSFontFaceRule(readonly=True)
13
        self.r_type = cssutils.css.CSSFontFaceRule.FONT_FACE_RULE#
14
        self.r_typeString = 'FONT_FACE_RULE'
15

    
16
    def test_init(self):
17
        "CSSFontFaceRule.__init__()"
18
        super(CSSFontFaceRuleTestCase, self).test_init()
19

    
20
        r = cssutils.css.CSSFontFaceRule()
21
        self.assertTrue(isinstance(r.style, cssutils.css.CSSStyleDeclaration))
22
        self.assertEqual(r, r.style.parentRule)
23

    
24
        # until any properties
25
        self.assertEqual(u'', r.cssText)
26

    
27
        # only possible to set @... similar name
28
        self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')
29

    
30
        def checkrefs(ff):
31
            self.assertEqual(ff, ff.style.parentRule)
32
            for p in ff.style:
33
                self.assertEqual(ff.style, p.parent)
34

    
35
        checkrefs(cssutils.css.CSSFontFaceRule(
36
                    style=cssutils.css.CSSStyleDeclaration('font-family: x')))
37
        
38
        r = cssutils.css.CSSFontFaceRule()
39
        r.cssText = '@font-face { font-family: x }'
40
        checkrefs(r)
41
        
42
        r = cssutils.css.CSSFontFaceRule()
43
        r.style.setProperty('font-family', 'y')
44
        checkrefs(r)
45

    
46
        r = cssutils.css.CSSFontFaceRule()
47
        r.style['font-family'] = 'z'
48
        checkrefs(r)
49

    
50
        r = cssutils.css.CSSFontFaceRule()
51
        r.style.fontFamily = 'a'
52
        checkrefs(r)
53

    
54
    def test_cssText(self):
55
        "CSSFontFaceRule.cssText"
56
        tests = {
57
            u'''@font-face {
58
    font-family: x;
59
    src: url(../fonts/LateefRegAAT.ttf) format("truetype-aat"), url(../fonts/LateefRegOT.ttf) format("opentype");
60
    font-style: italic;
61
    font-weight: 500;
62
    font-stretch: condensed;
63
    unicode-range: u+1-ff, u+111
64
    }''': None,
65
            u'@font-face{font-family: x;}': u'@font-face {\n    font-family: x\n    }',
66
            u'@font-face  {  font-family: x;  }': u'@font-face {\n    font-family: x\n    }',
67
            u'@f\\ont\\-face{font-family : x;}': u'@font-face {\n    font-family: x\n    }',
68
            # comments
69
            u'@font-face/*1*//*2*/{font-family: x;}':
70
                u'@font-face /*1*/ /*2*/ {\n    font-family: x\n    }',
71
            # WS
72
            u'@font-face\n\t\f {\n\t\f font-family:x;\n\t\f }': 
73
                u'@font-face {\n    font-family: x\n    }',
74
            }
75
        self.do_equal_r(tests)
76
        self.do_equal_p(tests)
77

    
78
        tests = {
79
            u'@font-face;': xml.dom.SyntaxErr,
80
            u'@font-face }': xml.dom.SyntaxErr,
81
            }
82
        self.do_raise_p(tests) # parse
83
        tests.update({
84
            u'@font-face {': xml.dom.SyntaxErr, # no }
85
            # trailing
86
            u'@font-face {}1': xml.dom.SyntaxErr, 
87
            u'@font-face {}/**/': xml.dom.SyntaxErr, 
88
            u'@font-face {} ': xml.dom.SyntaxErr, 
89
            })
90
        self.do_raise_r(tests) # set cssText
91

    
92
    def test_style(self):
93
        "CSSFontFaceRule.style (and references)"
94
        r = cssutils.css.CSSFontFaceRule()
95
        s1 = r.style
96
        self.assertEqual(r, s1.parentRule)
97
        self.assertEqual(u'', s1.cssText)
98
        
99
        # set rule.cssText
100
        r.cssText = '@font-face { font-family: x1 }'
101
        self.assertNotEqual(r.style, s1)
102
        self.assertEqual(r, r.style.parentRule)
103
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: x1\n    }')
104
        self.assertEqual(r.style.cssText, u'font-family: x1')
105
        self.assertEqual(s1.cssText, u'')
106
        s2 = r.style
107
        
108
        # set invalid rule.cssText
109
        try: 
110
            r.cssText = '@font-face { $ }'
111
        except xml.dom.SyntaxErr, e:
112
            pass
113
        self.assertEqual(r.style, s2)
114
        self.assertEqual(r, s2.parentRule)
115
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: x1\n    }')
116
        self.assertEqual(s2.cssText, u'font-family: x1')
117
        self.assertEqual(r.style.cssText, u'font-family: x1')
118

    
119
        # set rule.style.cssText
120
        r.style.cssText = 'font-family: x2'
121
        self.assertEqual(r.style, s2)
122
        self.assertEqual(r, s2.parentRule)
123
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: x2\n    }')
124
        self.assertEqual(s2.cssText, u'font-family: x2')
125
        self.assertEqual(r.style.cssText, u'font-family: x2')
126

    
127
        # set new style object s2
128
        sn = cssutils.css.CSSStyleDeclaration('font-family: y1')
129
        r.style = sn
130
        self.assertEqual(r.style, sn)
131
        self.assertEqual(r, sn.parentRule)
132
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: y1\n    }')
133
        self.assertEqual(sn.cssText, u'font-family: y1')
134
        self.assertEqual(r.style.cssText, u'font-family: y1')
135
        self.assertEqual(s2.cssText, u'font-family: x2') # old
136

    
137
        # set s2.cssText
138
        sn.cssText = 'font-family: y2'
139
        self.assertEqual(r.style, sn)
140
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: y2\n    }')
141
        self.assertEqual(r.style.cssText, u'font-family: y2')
142
        self.assertEqual(s2.cssText, u'font-family: x2') # old
143
        
144
        # set invalid s2.cssText
145
        try: 
146
            sn.cssText = '$'
147
        except xml.dom.SyntaxErr, e:
148
            pass
149
        self.assertEqual(r.style, sn)
150
        self.assertEqual(r.style.cssText, u'font-family: y2')
151
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: y2\n    }')
152
        
153
        # set r.style with text
154
        r.style = 'font-family: z'
155
        self.assertNotEqual(r.style, sn)
156
        self.assertEqual(r.cssText, u'@font-face {\n    font-family: z\n    }')
157
        self.assertEqual(r.style.cssText, u'font-family: z')
158
        self.assertEqual(sn.cssText, u'font-family: y2')
159

    
160
    def test_properties(self):
161
        "CSSFontFaceRule.style properties"
162
        r = cssutils.css.CSSFontFaceRule()
163
        r.style.cssText = '''
164
        src: url(x)
165
        '''
166
        exp = u'''@font-face {
167
    src: url(x)
168
    }'''
169
        self.assertEqual(exp, r.cssText)
170
        
171
        tests = {
172
            'font-family': [#('serif', True),
173
#                            ('x', True),
174
#                            ('"x"', True),
175
                            ('x, y', False),
176
                            ('"x", y', False),
177
                            ('x, "y"', False),
178
#                            ('"x", "y"', False)
179
                            ]
180
            }
181
        for n, t in tests.items():
182
            for (v, valid) in t:
183
                r = cssutils.css.CSSFontFaceRule()
184
                r.style[n] = v
185
                self.assertEqual(r.style.getProperty(n).parent, r.style)
186
                self.assertEqual(r.style.getProperty(n).valid, valid)
187

    
188
    def test_incomplete(self):
189
        "CSSFontFaceRule (incomplete)"
190
        tests = {
191
            u'@font-face{':
192
                u'', # no } and no content
193
            u'@font-face { ':
194
                u'', # no } and no content
195
            u'@font-face { font-family: x':
196
                u'@font-face {\n    font-family: x\n    }', # no }
197
        }
198
        self.do_equal_p(tests) # parse
199

    
200
    def test_InvalidModificationErr(self):
201
        "CSSFontFaceRule.cssText InvalidModificationErr"
202
        self._test_InvalidModificationErr(u'@font-face')
203
        tests = {
204
            u'@font-fac {}': xml.dom.InvalidModificationErr,
205
            }
206
        self.do_raise_r(tests)
207

    
208
    def test_valid(self):
209
        "CSSFontFaceRule.valid"
210
        r = cssutils.css.CSSFontFaceRule()
211
        self.assertEqual(False, r.valid)
212
        N = 'font-family: x; src: local(x);'
213
        tests = {
214
            True: (N,
215
                   N + 'font-style: italic; font-weight: bold',
216
                   ),
217
            False: ('',
218
                    'font-family: x, y; src: local(x);',
219
                    N + 'font-style: inherit',
220
                    N + 'invalid: 1')
221
            }
222
        for valid, testlist in tests.items():
223
            for test in testlist:
224
                r.style.cssText = test
225
                self.assertEqual(valid, r.valid)
226

    
227
    def test_reprANDstr(self):
228
        "CSSFontFaceRule.__repr__(), .__str__()"
229
        style='src: url(x)'        
230
        s = cssutils.css.CSSFontFaceRule(style=style)
231
        
232
        self.assertTrue(style in str(s))
233

    
234
        s2 = eval(repr(s))
235
        self.assertTrue(isinstance(s2, s.__class__))
236
        self.assertTrue(style == s2.style.cssText)
237

    
238

    
239
if __name__ == '__main__':
240
    import unittest
241
    unittest.main()