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


------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
FormEncode-CVS mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/formencode-cvs

Reply via email to