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() |