Author: jab
Date: 2009-02-19 11:18:50 -0700 (Thu, 19 Feb 2009)
New Revision: 3787
Modified:
FormEncode/trunk/formencode/htmlfill.py
FormEncode/trunk/tests/test_htmlfill.py
Log:
apply patches from http://sourceforge.net/tracker2/?func=detail&aid=2616831&group_id=91231&atid=596416 to make htmlfill.render(..., defaults={}, force_defaults=True) behave consistently for text, password, and hidden inputs when passing (values should be cleared). includes now-passing tests.
Modified: FormEncode/trunk/formencode/htmlfill.py
===================================================================
--- FormEncode/trunk/formencode/htmlfill.py 2009-02-19 17:00:56 UTC (rev 3786)
+++ FormEncode/trunk/formencode/htmlfill.py 2009-02-19 18:18:50 UTC (rev 3787)
@@ -367,7 +367,7 @@
and self.errors.get(self.get_attr(attrs, 'name'))):
self.add_class(attrs, self.error_class)
if t in ('text', 'hidden'):
- if value is None:
+ if value is None and not self.force_defaults:
value = self.get_attr(attrs, 'value', '')
self.set_attr(attrs, 'value', value)
self.write_tag('input', attrs, startend)
@@ -401,8 +401,9 @@
elif t == 'file':
pass # don't skip next
elif t == 'password':
- self.set_attr(attrs, 'value', value or
- self.get_attr(attrs, 'value', ''))
+ if not self.force_defaults:
+ value = value or self.get_attr(attrs, 'value', '')
+ self.set_attr(attrs, 'value', value)
self.write_tag('input', attrs, startend)
self.skip_next = True
self.add_key(name)
Modified: FormEncode/trunk/tests/test_htmlfill.py
===================================================================
--- FormEncode/trunk/tests/test_htmlfill.py 2009-02-19 17:00:56 UTC (rev 3786)
+++ FormEncode/trunk/tests/test_htmlfill.py 2009-02-19 18:18:50 UTC (rev 3787)
@@ -134,6 +134,25 @@
dict(tags=[])) ==
'<input type="checkbox" name="tags" value="2" />')
+def test_not_force_defaults_text():
+ html = """<input type="text" name="text-1" class="my_text" value="i like this text" />"""
+ rendered_html = htmlfill.render(html, defaults=dict(),
+ force_defaults=False)
+ assert html == rendered_html, rendered_html
+
+def test_not_force_defaults_text_value():
+ html = """<input type="text" name="text-1" class="my_text" value="i like this text" />"""
+ expected_html = """<input type="text" name="text-1" class="my_text" value="this text is better" />"""
+ rendered_html = htmlfill.render(html, defaults={"text-1": "this text is better"},
+ force_defaults=False)
+ assert expected_html == rendered_html, rendered_html
+
+def test_force_defaults_text():
+ html = """<input type="text" name="text-1" class="my_text" value="i like this text" />"""
+ expected_html = """<input type="text" name="text-1" class="my_text" value="" />"""
+ rendered_html = htmlfill.render(html, defaults=dict())
+ assert expected_html == rendered_html, rendered_html
+
def test_not_force_defaults_textarea():
html = """<textarea name="textarea-1" class="my_textarea">i like this text</textarea>"""
rendered_html = htmlfill.render(html, defaults=dict(),
@@ -154,6 +173,25 @@
rendered_html = htmlfill.render(html, defaults=dict())
assert expected_html == rendered_html, rendered_html
+def test_not_force_defaults_password():
+ html = """<input type="password" name="password-1" class="my_password" value="i like this password" />"""
+ rendered_html = htmlfill.render(html, defaults=dict(),
+ force_defaults=False)
+ assert html == rendered_html, rendered_html
+
+def test_not_force_defaults_password_value():
+ html = """<input type="password" name="password-1" class="my_password" value="i like this password" />"""
+ expected_html = """<input type="password" name="password-1" class="my_password" value="this password is better" />"""
+ rendered_html = htmlfill.render(html, defaults={"password-1": "this password is better"},
+ force_defaults=False)
+ assert expected_html == rendered_html, rendered_html
+
+def test_force_defaults_password():
+ html = """<input type="password" name="password-1" class="my_password" value="i like this password" />"""
+ expected_html = """<input type="password" name="password-1" class="my_password" value="" />"""
+ rendered_html = htmlfill.render(html, defaults=dict())
+ assert expected_html == rendered_html, rendered_html
+
def test_not_force_defaults_checkbox():
html = """<input type="checkbox" name="checkbox-1" class="my_checkbox" checked="checked" value="cb">"""
rendered_html = htmlfill.render(html, defaults=dict(),
|