annotate genshi/filters/tests/test_html.py @ 916:872726bac135 experimental-py3k

add support for python 3 to genshi.filters: * minor changes to track encoding=None API change in core genshi modules. * renamed genshi/filters/tests/html.py to test_html.py to avoid clashes with Python 3 top-level html module when running tests subset. * did not rename genshi/filters/html.py. * i18n filters: * ugettext and friends are gone in Python 3 (and only gettext and friends exist and they now handle unicode) * Some \ line continuations inside doctests confused 2to3 and so were removed them. * Testing picked up a problem (already present in trunk) where Translator.__call__ could end up defining gettext as an endlessly recursive function. Noted with a TODO.
author hodgestar
date Sun, 24 Oct 2010 22:21:28 +0000
parents
children
rev   line source
916
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
1 # -*- coding: utf-8 -*-
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
2 #
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
3 # Copyright (C) 2006-2009 Edgewall Software
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
4 # All rights reserved.
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
5 #
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
8 # are also available at http://genshi.edgewall.org/wiki/License.
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
9 #
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
12 # history and logs, available at http://genshi.edgewall.org/log/.
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
13
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
14 import doctest
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
15 import unittest
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
16
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
17 from genshi.input import HTML, ParseError
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
18 from genshi.filters.html import HTMLFormFiller, HTMLSanitizer
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
19 from genshi.template import MarkupTemplate
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
20
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
21 class HTMLFormFillerTestCase(unittest.TestCase):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
22
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
23 def test_fill_input_text_no_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
24 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
25 <input type="text" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
26 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
27 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
28 <input type="text" name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
29 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
30
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
31 def test_fill_input_text_single_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
32 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
33 <input type="text" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
34 </p></form>""") | HTMLFormFiller(data={'foo': 'bar'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
35 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
36 <input type="text" name="foo" value="bar"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
37 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
38
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
39 def test_fill_input_text_multi_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
40 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
41 <input type="text" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
42 </p></form>""") | HTMLFormFiller(data={'foo': ['bar']})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
43 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
44 <input type="text" name="foo" value="bar"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
45 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
46
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
47 def test_fill_input_hidden_no_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
48 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
49 <input type="hidden" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
50 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
51 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
52 <input type="hidden" name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
53 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
54
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
55 def test_fill_input_hidden_single_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
56 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
57 <input type="hidden" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
58 </p></form>""") | HTMLFormFiller(data={'foo': 'bar'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
59 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
60 <input type="hidden" name="foo" value="bar"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
61 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
62
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
63 def test_fill_input_hidden_multi_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
64 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
65 <input type="hidden" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
66 </p></form>""") | HTMLFormFiller(data={'foo': ['bar']})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
67 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
68 <input type="hidden" name="foo" value="bar"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
69 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
70
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
71 def test_fill_textarea_no_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
72 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
73 <textarea name="foo"></textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
74 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
75 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
76 <textarea name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
77 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
78
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
79 def test_fill_textarea_single_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
80 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
81 <textarea name="foo"></textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
82 </p></form>""") | HTMLFormFiller(data={'foo': 'bar'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
83 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
84 <textarea name="foo">bar</textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
85 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
86
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
87 def test_fill_textarea_multi_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
88 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
89 <textarea name="foo"></textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
90 </p></form>""") | HTMLFormFiller(data={'foo': ['bar']})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
91 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
92 <textarea name="foo">bar</textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
93 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
94
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
95 def test_fill_textarea_multiple(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
96 # Ensure that the subsequent textarea doesn't get the data from the
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
97 # first
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
98 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
99 <textarea name="foo"></textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
100 <textarea name="bar"></textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
101 </p></form>""") | HTMLFormFiller(data={'foo': 'Some text'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
102 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
103 <textarea name="foo">Some text</textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
104 <textarea name="bar"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
105 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
106
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
107 def test_fill_textarea_preserve_original(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
108 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
109 <textarea name="foo"></textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
110 <textarea name="bar">Original value</textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
111 </p></form>""") | HTMLFormFiller(data={'foo': 'Some text'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
112 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
113 <textarea name="foo">Some text</textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
114 <textarea name="bar">Original value</textarea>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
115 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
116
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
117 def test_fill_input_checkbox_single_value_auto_no_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
118 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
119 <input type="checkbox" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
120 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
121 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
122 <input type="checkbox" name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
123 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
124
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
125 def test_fill_input_checkbox_single_value_auto(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
126 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
127 <input type="checkbox" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
128 </p></form>""")
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
129 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
130 <input type="checkbox" name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
131 </p></form>""", (html | HTMLFormFiller(data={'foo': ''})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
132 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
133 <input type="checkbox" name="foo" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
134 </p></form>""", (html | HTMLFormFiller(data={'foo': 'on'})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
135
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
136 def test_fill_input_checkbox_single_value_defined(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
137 html = HTML("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
138 <input type="checkbox" name="foo" value="1" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
139 </p></form>""", encoding='ascii')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
140 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
141 <input type="checkbox" name="foo" value="1" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
142 </p></form>""", (html | HTMLFormFiller(data={'foo': '1'})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
143 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
144 <input type="checkbox" name="foo" value="1"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
145 </p></form>""", (html | HTMLFormFiller(data={'foo': '2'})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
146
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
147 def test_fill_input_checkbox_multi_value_auto(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
148 html = HTML("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
149 <input type="checkbox" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
150 </p></form>""", encoding='ascii')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
151 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
152 <input type="checkbox" name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
153 </p></form>""", (html | HTMLFormFiller(data={'foo': []})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
154 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
155 <input type="checkbox" name="foo" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
156 </p></form>""", (html | HTMLFormFiller(data={'foo': ['on']})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
157
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
158 def test_fill_input_checkbox_multi_value_defined(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
159 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
160 <input type="checkbox" name="foo" value="1" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
161 </p></form>""")
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
162 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
163 <input type="checkbox" name="foo" value="1" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
164 </p></form>""", (html | HTMLFormFiller(data={'foo': ['1']})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
165 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
166 <input type="checkbox" name="foo" value="1"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
167 </p></form>""", (html | HTMLFormFiller(data={'foo': ['2']})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
168
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
169 def test_fill_input_radio_no_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
170 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
171 <input type="radio" name="foo" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
172 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
173 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
174 <input type="radio" name="foo"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
175 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
176
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
177 def test_fill_input_radio_single_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
178 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
179 <input type="radio" name="foo" value="1" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
180 </p></form>""")
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
181 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
182 <input type="radio" name="foo" value="1" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
183 </p></form>""", (html | HTMLFormFiller(data={'foo': '1'})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
184 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
185 <input type="radio" name="foo" value="1"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
186 </p></form>""", (html | HTMLFormFiller(data={'foo': '2'})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
187
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
188 def test_fill_input_radio_multi_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
189 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
190 <input type="radio" name="foo" value="1" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
191 </p></form>""")
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
192 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
193 <input type="radio" name="foo" value="1" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
194 </p></form>""", (html | HTMLFormFiller(data={'foo': ['1']})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
195 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
196 <input type="radio" name="foo" value="1"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
197 </p></form>""", (html | HTMLFormFiller(data={'foo': ['2']})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
198
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
199 def test_fill_input_radio_empty_string(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
200 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
201 <input type="radio" name="foo" value="" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
202 </p></form>""")
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
203 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
204 <input type="radio" name="foo" value="" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
205 </p></form>""", (html | HTMLFormFiller(data={'foo': ''})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
206
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
207 def test_fill_input_radio_multi_empty_string(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
208 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
209 <input type="radio" name="foo" value="" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
210 </p></form>""")
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
211 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
212 <input type="radio" name="foo" value="" checked="checked"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
213 </p></form>""", (html | HTMLFormFiller(data={'foo': ['']})).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
214
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
215 def test_fill_select_no_value_auto(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
216 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
217 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
218 <option>1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
219 <option>2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
220 <option>3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
221 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
222 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
223 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
224 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
225 <option>1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
226 <option>2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
227 <option>3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
228 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
229 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
230
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
231 def test_fill_select_no_value_defined(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
232 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
233 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
234 <option value="1">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
235 <option value="2">2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
236 <option value="3">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
237 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
238 </p></form>""") | HTMLFormFiller()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
239 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
240 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
241 <option value="1">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
242 <option value="2">2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
243 <option value="3">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
244 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
245 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
246
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
247 def test_fill_select_single_value_auto(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
248 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
249 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
250 <option>1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
251 <option>2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
252 <option>3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
253 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
254 </p></form>""") | HTMLFormFiller(data={'foo': '1'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
255 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
256 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
257 <option selected="selected">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
258 <option>2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
259 <option>3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
260 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
261 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
262
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
263 def test_fill_select_single_value_defined(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
264 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
265 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
266 <option value="1">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
267 <option value="2">2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
268 <option value="3">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
269 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
270 </p></form>""") | HTMLFormFiller(data={'foo': '1'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
271 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
272 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
273 <option value="1" selected="selected">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
274 <option value="2">2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
275 <option value="3">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
276 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
277 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
278
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
279 def test_fill_select_multi_value_auto(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
280 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
281 <select name="foo" multiple>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
282 <option>1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
283 <option>2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
284 <option>3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
285 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
286 </p></form>""") | HTMLFormFiller(data={'foo': ['1', '3']})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
287 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
288 <select name="foo" multiple="multiple">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
289 <option selected="selected">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
290 <option>2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
291 <option selected="selected">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
292 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
293 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
294
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
295 def test_fill_select_multi_value_defined(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
296 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
297 <select name="foo" multiple>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
298 <option value="1">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
299 <option value="2">2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
300 <option value="3">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
301 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
302 </p></form>""") | HTMLFormFiller(data={'foo': ['1', '3']})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
303 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
304 <select name="foo" multiple="multiple">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
305 <option value="1" selected="selected">1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
306 <option value="2">2</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
307 <option value="3" selected="selected">3</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
308 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
309 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
310
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
311 def test_fill_option_segmented_text(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
312 html = MarkupTemplate(u"""<form>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
313 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
314 <option value="1">foo $x</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
315 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
316 </form>""").generate(x=1) | HTMLFormFiller(data={'foo': '1'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
317 self.assertEquals(u"""<form>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
318 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
319 <option value="1" selected="selected">foo 1</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
320 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
321 </form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
322
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
323 def test_fill_option_segmented_text_no_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
324 html = MarkupTemplate("""<form>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
325 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
326 <option>foo $x bar</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
327 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
328 </form>""").generate(x=1) | HTMLFormFiller(data={'foo': 'foo 1 bar'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
329 self.assertEquals("""<form>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
330 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
331 <option selected="selected">foo 1 bar</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
332 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
333 </form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
334
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
335 def test_fill_option_unicode_value(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
336 html = HTML(u"""<form>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
337 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
338 <option value="&ouml;">foo</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
339 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
340 </form>""") | HTMLFormFiller(data={'foo': u'ö'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
341 self.assertEquals(u"""<form>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
342 <select name="foo">
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
343 <option value="ö" selected="selected">foo</option>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
344 </select>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
345 </form>""", html.render(encoding=None))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
346
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
347 def test_fill_input_password_disabled(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
348 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
349 <input type="password" name="pass" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
350 </p></form>""") | HTMLFormFiller(data={'pass': 'bar'})
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
351 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
352 <input type="password" name="pass"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
353 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
354
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
355 def test_fill_input_password_enabled(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
356 html = HTML(u"""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
357 <input type="password" name="pass" />
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
358 </p></form>""") | HTMLFormFiller(data={'pass': '1234'}, passwords=True)
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
359 self.assertEquals("""<form><p>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
360 <input type="password" name="pass" value="1234"/>
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
361 </p></form>""", html.render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
362
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
363
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
364 class HTMLSanitizerTestCase(unittest.TestCase):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
365
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
366 def test_sanitize_unchanged(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
367 html = HTML(u'<a href="#">fo<br />o</a>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
368 self.assertEquals('<a href="#">fo<br/>o</a>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
369 (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
370 html = HTML(u'<a href="#with:colon">foo</a>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
371 self.assertEquals('<a href="#with:colon">foo</a>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
372 (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
373
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
374 def test_sanitize_escape_text(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
375 html = HTML(u'<a href="#">fo&amp;</a>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
376 self.assertEquals('<a href="#">fo&amp;</a>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
377 (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
378 html = HTML(u'<a href="#">&lt;foo&gt;</a>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
379 self.assertEquals('<a href="#">&lt;foo&gt;</a>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
380 (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
381
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
382 def test_sanitize_entityref_text(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
383 html = HTML(u'<a href="#">fo&ouml;</a>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
384 self.assertEquals(u'<a href="#">foö</a>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
385 (html | HTMLSanitizer()).render(encoding=None))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
386
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
387 def test_sanitize_escape_attr(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
388 html = HTML(u'<div title="&lt;foo&gt;"></div>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
389 self.assertEquals('<div title="&lt;foo&gt;"/>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
390 (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
391
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
392 def test_sanitize_close_empty_tag(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
393 html = HTML(u'<a href="#">fo<br>o</a>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
394 self.assertEquals('<a href="#">fo<br/>o</a>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
395 (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
396
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
397 def test_sanitize_invalid_entity(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
398 html = HTML(u'&junk;')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
399 self.assertEquals('&amp;junk;', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
400
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
401 def test_sanitize_remove_script_elem(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
402 html = HTML(u'<script>alert("Foo")</script>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
403 self.assertEquals('', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
404 html = HTML(u'<SCRIPT SRC="http://example.com/"></SCRIPT>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
405 self.assertEquals('', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
406 self.assertRaises(ParseError, HTML, u'<SCR\0IPT>alert("foo")</SCR\0IPT>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
407 self.assertRaises(ParseError, HTML,
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
408 u'<SCRIPT&XYZ SRC="http://example.com/"></SCRIPT>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
409
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
410 def test_sanitize_remove_onclick_attr(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
411 html = HTML(u'<div onclick=\'alert("foo")\' />')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
412 self.assertEquals('<div/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
413
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
414 def test_sanitize_remove_input_password(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
415 html = HTML(u'<form><input type="password" /></form>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
416 self.assertEquals('<form/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
417
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
418 def test_sanitize_remove_comments(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
419 html = HTML(u'''<div><!-- conditional comment crap --></div>''')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
420 self.assertEquals('<div/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
421
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
422 def test_sanitize_remove_style_scripts(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
423 sanitizer = HTMLSanitizer(safe_attrs=HTMLSanitizer.SAFE_ATTRS | set(['style']))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
424 # Inline style with url() using javascript: scheme
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
425 html = HTML(u'<DIV STYLE=\'background: url(javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
426 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
427 # Inline style with url() using javascript: scheme, using control char
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
428 html = HTML(u'<DIV STYLE=\'background: url(&#1;javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
429 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
430 # Inline style with url() using javascript: scheme, in quotes
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
431 html = HTML(u'<DIV STYLE=\'background: url("javascript:alert(foo)")\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
432 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
433 # IE expressions in CSS not allowed
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
434 html = HTML(u'<DIV STYLE=\'width: expression(alert("foo"));\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
435 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
436 html = HTML(u'<DIV STYLE=\'width: e/**/xpression(alert("foo"));\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
437 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
438 html = HTML(u'<DIV STYLE=\'background: url(javascript:alert("foo"));'
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
439 'color: #fff\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
440 self.assertEquals('<div style="color: #fff"/>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
441 (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
442 # Inline style with url() using javascript: scheme, using unicode
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
443 # escapes
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
444 html = HTML(u'<DIV STYLE=\'background: \\75rl(javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
445 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
446 html = HTML(u'<DIV STYLE=\'background: \\000075rl(javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
447 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
448 html = HTML(u'<DIV STYLE=\'background: \\75 rl(javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
449 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
450 html = HTML(u'<DIV STYLE=\'background: \\000075 rl(javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
451 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
452 html = HTML(u'<DIV STYLE=\'background: \\000075\r\nrl(javascript:alert("foo"))\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
453 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
454
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
455 def test_sanitize_remove_style_phishing(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
456 sanitizer = HTMLSanitizer(safe_attrs=HTMLSanitizer.SAFE_ATTRS | set(['style']))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
457 # The position property is not allowed
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
458 html = HTML(u'<div style="position:absolute;top:0"></div>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
459 self.assertEquals('<div style="top:0"/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
460 # Normal margins get passed through
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
461 html = HTML(u'<div style="margin:10px 20px"></div>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
462 self.assertEquals('<div style="margin:10px 20px"/>',
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
463 (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
464 # But not negative margins
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
465 html = HTML(u'<div style="margin:-1000px 0 0"></div>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
466 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
467 html = HTML(u'<div style="margin-left:-2000px 0 0"></div>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
468 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
469 html = HTML(u'<div style="margin-left:1em 1em 1em -4000px"></div>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
470 self.assertEquals('<div/>', (html | sanitizer).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
471
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
472 def test_sanitize_remove_src_javascript(self):
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
473 html = HTML(u'<img src=\'javascript:alert("foo")\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
474 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
475 # Case-insensitive protocol matching
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
476 html = HTML(u'<IMG SRC=\'JaVaScRiPt:alert("foo")\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
477 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
478 # Grave accents (not parsed)
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
479 self.assertRaises(ParseError, HTML,
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
480 u'<IMG SRC=`javascript:alert("RSnake says, \'foo\'")`>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
481 # Protocol encoded using UTF-8 numeric entities
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
482 html = HTML(u'<IMG SRC=\'&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;'
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
483 '&#112;&#116;&#58;alert("foo")\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
484 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
485 # Protocol encoded using UTF-8 numeric entities without a semicolon
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
486 # (which is allowed because the max number of digits is used)
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
487 html = HTML(u'<IMG SRC=\'&#0000106&#0000097&#0000118&#0000097'
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
488 '&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116'
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
489 '&#0000058alert("foo")\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
490 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
491 # Protocol encoded using UTF-8 numeric hex entities without a semicolon
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
492 # (which is allowed because the max number of digits is used)
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
493 html = HTML(u'<IMG SRC=\'&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69'
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
494 '&#x70&#x74&#x3A;alert("foo")\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
495 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
496 # Embedded tab character in protocol
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
497 html = HTML(u'<IMG SRC=\'jav\tascript:alert("foo");\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
498 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
499 # Embedded tab character in protocol, but encoded this time
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
500 html = HTML(u'<IMG SRC=\'jav&#x09;ascript:alert("foo");\'>')
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
501 self.assertEquals('<img/>', (html | HTMLSanitizer()).render())
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
502
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
503
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
504 def suite():
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
505 suite = unittest.TestSuite()
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
506 suite.addTest(doctest.DocTestSuite(HTMLFormFiller.__module__))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
507 suite.addTest(unittest.makeSuite(HTMLFormFillerTestCase, 'test'))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
508 suite.addTest(unittest.makeSuite(HTMLSanitizerTestCase, 'test'))
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
509 return suite
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
510
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
511
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
512 if __name__ == '__main__':
872726bac135 add support for python 3 to genshi.filters:
hodgestar
parents:
diff changeset
513 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software