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_cssnamespacerule.py @ 475

History | View | Annotate | Download (9.12 KB)

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

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

    
7
class CSSNamespaceRuleTestCase(test_cssrule.CSSRuleTestCase):
8

    
9
    def setUp(self):
10
        super(CSSNamespaceRuleTestCase, self).setUp()
11
        self.r = cssutils.css.CSSNamespaceRule(namespaceURI='x')
12
        #self.rRO = cssutils.css.CSSNamespaceRule(namespaceURI='x',
13
        #                                         readonly=True)
14
        self.r_type = cssutils.css.CSSRule.NAMESPACE_RULE
15
        self.r_typeString = 'NAMESPACE_RULE'
16

    
17
    def test_init(self):
18
        "CSSNamespaceRule.__init__()"
19
        # cannot use here as self.r and self rRO and not useful
20
        #super(CSSNamespaceRuleTestCase, self).test_init()       
21
        tests = [
22
                 (None, None),
23
                 ('', ''),
24
                 (None, u''),
25
                 (u'', None),
26
                 (u'', u'no-uri'),
27
                 ]
28
        for uri, p in tests:            
29
            r = cssutils.css.CSSNamespaceRule(namespaceURI=uri, prefix=p)
30
            self.assertEqual(None, r.namespaceURI)
31
            self.assertEqual(u'', r.prefix)
32
            self.assertEqual(u'', r.cssText)
33
            self.assertEqual(None, r.parentStyleSheet)
34
            self.assertEqual(None, r.parentRule)
35
        
36
        r = cssutils.css.CSSNamespaceRule(namespaceURI='example')
37
        self.assertEqual('example', r.namespaceURI)
38
        self.assertEqual(u'', r.prefix)
39
        self.assertEqual(u'@namespace "example";', r.cssText)
40
        self.sheet.add(r)
41
        self.assertEqual(self.sheet, r.parentStyleSheet)
42

    
43
        r = cssutils.css.CSSNamespaceRule(namespaceURI='example', prefix='p')
44
        self.assertEqual('example', r.namespaceURI)
45
        self.assertEqual(u'p', r.prefix)
46
        self.assertEqual(u'@namespace p "example";', r.cssText)
47
        
48
        css = u'@namespace p "u";'
49
        r = cssutils.css.CSSNamespaceRule(cssText=css)
50
        self.assertEqual(r.cssText, css)       
51

    
52
        # only possible to set @... similar name
53
        self.assertRaises(xml.dom.InvalidModificationErr, self.r._setAtkeyword, 'x')
54

    
55
    def test_cssText(self):
56
        "CSSNamespaceRule.cssText"
57
        # cssText may only be set initalially
58
        r = cssutils.css.CSSNamespaceRule()
59
        css = u'@namespace p "u";'
60
        r.cssText = css
61
        self.assertEqual(r.cssText, css)
62
        self.assertRaises(xml.dom.NoModificationAllowedErr, r._setCssText, 
63
                          u'@namespace p "OTHER";')
64
        
65
        tests = {
66
            u'@namespace "";': None,
67
            u'@namespace "u";': None,
68
            u'@namespace p "u";': None,
69
            u'@namespace empty "";': None,
70
            
71
            u'@namespace p "p";': None,
72
            u"@namespace p 'u';": u'@namespace p "u";',
73

    
74
            u'@\\namespace p "u";': u'@namespace p "u";',
75
            u'@NAMESPACE p "u";': u'@namespace p "u";',
76

    
77
            u'@namespace  p  "u"  ;': u'@namespace p "u";',
78
            u'@namespace p"u";': u'@namespace p "u";',
79
            u'@namespace p "u";': u'@namespace p "u";',
80

    
81
            u'@namespace/*1*/"u"/*2*/;': u'@namespace /*1*/ "u" /*2*/;',
82
            u'@namespace/*1*/p/*2*/"u"/*3*/;': u'@namespace /*1*/ p /*2*/ "u" /*3*/;',
83

    
84
            u'@namespace p url(u);': u'@namespace p "u";',
85
            u'@namespace p url(\'u\');': u'@namespace p "u";',
86
            u'@namespace p url(\"u\");': u'@namespace p "u";',
87
            u'@namespace p url( \"u\" );': u'@namespace p "u";',
88
            
89
            # comments
90
            u'@namespace/*1*//*2*/p/*3*//*4*/url(u)/*5*//*6*/;': 
91
                u'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
92
            u'@namespace/*1*//*2*/p/*3*//*4*/"u"/*5*//*6*/;': 
93
                u'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
94
            u'@namespace/*1*//*2*/p/*3*//*4*/url("u")/*5*//*6*/;': 
95
                u'@namespace /*1*/ /*2*/ p /*3*/ /*4*/ "u" /*5*/ /*6*/;',
96

    
97
            u'@namespace/*1*//*2*/url(u)/*5*//*6*/;': 
98
                u'@namespace /*1*/ /*2*/ "u" /*5*/ /*6*/;',
99
            
100
            # WS
101
            u'@namespace\n\r\t\f p\n\r\t\f url(\n\r\t\f u\n\r\t\f )\n\r\t\f ;': 
102
                u'@namespace p "u";',
103
            u'@namespace\n\r\t\f p\n\r\t\f url(\n\r\t\f "u"\n\r\t\f )\n\r\t\f ;': 
104
                u'@namespace p "u";',
105
            u'@namespace\n\r\t\f p\n\r\t\f "str"\n\r\t\f ;': 
106
                u'@namespace p "str";',
107
            u'@namespace\n\r\t\f "str"\n\r\t\f ;': 
108
                u'@namespace "str";'
109
            }
110
        self.do_equal_p(tests)
111
        #self.do_equal_r(tests) # cannot use here as always new r is needed
112
        for test, expected in tests.items():
113
            r = cssutils.css.CSSNamespaceRule(cssText=test)
114
            if expected is None:
115
                expected = test
116
            self.assertEqual(expected, r.cssText)
117

    
118
        tests = {
119
            u'@namespace;': xml.dom.SyntaxErr, # nothing
120
            u'@namespace p;': xml.dom.SyntaxErr, # no namespaceURI
121
            u'@namespace "u" p;': xml.dom.SyntaxErr, # order
122
            u'@namespace "u";EXTRA': xml.dom.SyntaxErr,
123
            u'@namespace p "u";EXTRA': xml.dom.SyntaxErr,
124
            }
125
        self.do_raise_p(tests) # parse
126
        tests.update({
127
            u'@namespace p url(x)': xml.dom.SyntaxErr, # missing ;
128
            u'@namespace p "u"': xml.dom.SyntaxErr, # missing ;
129
            # trailing
130
            u'@namespace "u"; ': xml.dom.SyntaxErr,
131
            u'@namespace "u";/**/': xml.dom.SyntaxErr,
132
            u'@namespace p "u"; ': xml.dom.SyntaxErr,
133
            u'@namespace p "u";/**/': xml.dom.SyntaxErr,
134
            })
135
        def _do(test):
136
            r = cssutils.css.CSSNamespaceRule(cssText=test)
137
        for test, expected in tests.items():
138
            self.assertRaises(expected, _do, test)
139

    
140
    def test_namespaceURI(self):
141
        "CSSNamespaceRule.namespaceURI"
142
        # set only initially
143
        r = cssutils.css.CSSNamespaceRule(namespaceURI='x')
144
        self.assertEqual(u'x' , r.namespaceURI)
145
        self.assertEqual(u'@namespace "x";', r.cssText)
146

    
147
        r = cssutils.css.CSSNamespaceRule(namespaceURI='"')
148
        self.assertEqual(u'@namespace "\\"";', r.cssText)
149
        
150
        self.assertRaises(xml.dom.NoModificationAllowedErr, 
151
                          r._setNamespaceURI, u'x')
152

    
153
        self.assertRaises(xml.dom.NoModificationAllowedErr, 
154
                          r._setCssText, u'@namespace "u";')
155
        
156
        r._replaceNamespaceURI(u'http://example.com/new')
157
        self.assertEqual(u'http://example.com/new' , r.namespaceURI)
158

    
159
    def test_prefix(self):
160
        "CSSNamespaceRule.prefix"
161
        r = cssutils.css.CSSNamespaceRule(namespaceURI='u')
162
        r.prefix = 'p'
163
        self.assertEqual('p' , r.prefix)
164
        self.assertEqual(u'@namespace p "u";', r.cssText)
165

    
166
        r = cssutils.css.CSSNamespaceRule(cssText='@namespace x "u";')
167
        r.prefix = 'p'
168
        self.assertEqual('p' , r.prefix)
169
        self.assertEqual(u'@namespace p "u";', r.cssText)
170

    
171
        valid = (None, u'')
172
        for prefix in valid:
173
            r.prefix = prefix
174
            self.assertEqual(r.prefix, u'')
175
            self.assertEqual(u'@namespace "u";', r.cssText)
176
            
177
        valid = ('a', '_x', 'a1', 'a-1')
178
        for prefix in valid:
179
            r.prefix = prefix
180
            self.assertEqual(r.prefix, prefix)
181
            self.assertEqual(u'@namespace %s "u";' % prefix, r.cssText)
182
                    
183
        invalid = ('1', ' x', ' ', ',')
184
        for prefix in invalid:
185
            self.assertRaises(xml.dom.SyntaxErr, r._setPrefix, prefix)
186

    
187
    def test_InvalidModificationErr(self):
188
        "CSSNamespaceRule.cssText InvalidModificationErr"
189
        self._test_InvalidModificationErr(u'@namespace')        
190

    
191
    def test_incomplete(self):
192
        "CSSNamespaceRule (incomplete)"
193
        tests = {
194
            u'@namespace "uri': u'@namespace "uri";',
195
            u"@namespace url(x": u'@namespace "x";',
196
            u"@namespace url('x": u'@namespace "x";',
197
            u'@namespace url("x;': u'@namespace "x;";',
198
            u'@namespace url( "x;': u'@namespace "x;";',
199
            u'@namespace url("x ': u'@namespace "x ";',
200
            u'@namespace url(x ': u'@namespace "x";',
201
        }
202
        self.do_equal_p(tests) # parse
203
        tests = {
204
            u'@namespace "uri': xml.dom.SyntaxErr,
205
            u"@namespace url(x": xml.dom.SyntaxErr,
206
            u"@namespace url('x": xml.dom.SyntaxErr,
207
            u'@namespace url("x;': xml.dom.SyntaxErr,
208
            u'@namespace url( "x;': xml.dom.SyntaxErr,
209
            u'@namespace url("x ': xml.dom.SyntaxErr,
210
            u'@namespace url(x ': xml.dom.SyntaxErr           
211
            }
212
        self.do_raise_r(tests) # set cssText
213

    
214
    def test_reprANDstr(self):
215
        "CSSNamespaceRule.__repr__(), .__str__()"
216
        namespaceURI=u'http://example.com'
217
        prefix=u'prefix'
218

    
219
        s = cssutils.css.CSSNamespaceRule(namespaceURI=namespaceURI, prefix=prefix)
220

    
221
        self.assertTrue(namespaceURI in str(s))
222
        self.assertTrue(prefix in str(s))
223

    
224
        s2 = eval(repr(s))
225
        self.assertTrue(isinstance(s2, s.__class__))
226
        self.assertTrue(namespaceURI == s2.namespaceURI)
227
        self.assertTrue(prefix == s2.prefix)
228

    
229

    
230
if __name__ == '__main__':
231
    import unittest
232
    unittest.main()