changeset 908:5fd4a1e28351

Fix for bug with the `HTMLFormFiller` in the handling of textareas. Thanks to Trevor Morgan for pointing this out on the mailing list.
author cmlenz
date Mon, 10 May 2010 14:02:55 +0000
parents 2772fa7c10a3
children 585fdbd30e05
files ChangeLog genshi/filters/html.py genshi/filters/tests/html.py
diffstat 3 files changed, 32 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Version 0.6.1
+http://svn.edgewall.org/repos/genshi/tags/0.6.1/
+(???, from branches/stable/0.6.x)
+
+ * Fix for error in how `HTMLFormFiller` would handle `textarea` elements if
+   no value was not supplied form them.
+
+
 Version 0.6
 http://svn.edgewall.org/repos/genshi/tags/0.6.0/
 (Apr 22 2010, from branches/stable/0.6.x)
--- a/genshi/filters/html.py
+++ b/genshi/filters/html.py
@@ -183,9 +183,10 @@
                     no_option_value = False
                     option_start = option_value = None
                     option_text = []
-                elif tagname == 'textarea':
+                elif in_textarea and tagname == 'textarea':
                     if textarea_value:
                         yield TEXT, unicode(textarea_value), pos
+                        textarea_value = None
                     in_textarea = False
                 yield kind, data, pos
 
--- a/genshi/filters/tests/html.py
+++ b/genshi/filters/tests/html.py
@@ -92,6 +92,28 @@
           <textarea name="foo">bar</textarea>
         </p></form>""", html.render())
 
+    def test_fill_textarea_multiple(self):
+        # Ensure that the subsequent textarea doesn't get the data from the
+        # first
+        html = HTML("""<form><p>
+          <textarea name="foo"></textarea>
+          <textarea name="bar"></textarea>
+        </p></form>""") | HTMLFormFiller(data={'foo': 'Some text'})
+        self.assertEquals("""<form><p>
+          <textarea name="foo">Some text</textarea>
+          <textarea name="bar"/>
+        </p></form>""", html.render())
+
+    def test_fill_textarea_preserve_original(self):
+        html = HTML("""<form><p>
+          <textarea name="foo"></textarea>
+          <textarea name="bar">Original value</textarea>
+        </p></form>""") | HTMLFormFiller(data={'foo': 'Some text'})
+        self.assertEquals("""<form><p>
+          <textarea name="foo">Some text</textarea>
+          <textarea name="bar">Original value</textarea>
+        </p></form>""", html.render())
+
     def test_fill_input_checkbox_no_value(self):
         html = HTML("""<form><p>
           <input type="checkbox" name="foo" />
Copyright (C) 2012-2017 Edgewall Software