summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGael Pasgrimaud <gael@gawel.org>2015-05-31 13:29:42 +0200
committerGael Pasgrimaud <gael@gawel.org>2015-05-31 13:29:42 +0200
commit57b672e8320d488b054bfe5719f16c3d5cba3363 (patch)
treee54f6ab6479a6d271e8dfb1b79d7d0cb76689230
parentc1ac9d3c8c7b6297b9bba8644984ebfccdf1cb06 (diff)
parent75489af8324dc4c33d1c6a3dde8ce29a9a034e08 (diff)
downloadwebtest-57b672e8320d488b054bfe5719f16c3d5cba3363.tar.gz
Merge pull request #136 from ychab/master
reset values of select multiple
-rw-r--r--tests/test_forms.py14
-rw-r--r--webtest/forms.py19
2 files changed, 21 insertions, 12 deletions
diff --git a/tests/test_forms.py b/tests/test_forms.py
index 0d7bda4..474e766 100644
--- a/tests/test_forms.py
+++ b/tests/test_forms.py
@@ -720,6 +720,20 @@ class TestSelect(unittest.TestCase):
display = multiple_form.submit("button")
self.assertIn("<p>You selected Nine, Ten</p>", display, display)
+ def test_multiple_select_reset_value(self):
+ app = webtest.TestApp(select_app_without_values)
+ res = app.get('/')
+ self.assertEqual(res.status_int, 200)
+ self.assertEqual(res.headers['content-type'],
+ 'text/html; charset=utf-8')
+ self.assertEqual(res.content_type, 'text/html')
+
+ multiple_form = res.forms["multiple_select_form"]
+ self.assertEqual(multiple_form["multiple"].value, ["Nine", "Eleven"])
+ multiple_form["multiple"].force_value(None)
+ self.assertIsNone(multiple_form["multiple"].value)
+ display = multiple_form.submit("button")
+ self.assertIn("<p>You selected </p>", display, display)
class SingleUploadFileApp(object):
diff --git a/webtest/forms.py b/webtest/forms.py
index d444229..e64c6f7 100644
--- a/webtest/forms.py
+++ b/webtest/forms.py
@@ -167,7 +167,7 @@ class MultipleSelect(Field):
self.options = []
# Undetermined yet:
self.selectedIndices = []
- self._forced_values = []
+ self._forced_values = NoValue
def force_value(self, values):
"""Like setting a value, except forces it (even for, say, hidden
@@ -215,21 +215,16 @@ class MultipleSelect(Field):
', '.join([repr(o) for o, c, t in self.options])))
def value__get(self):
- selected_values = []
- if self.selectedIndices:
- selected_values = [self.options[i][0]
- for i in self.selectedIndices]
- elif not self._forced_values:
+ if self._forced_values is not NoValue:
+ return self._forced_values
+ elif self.selectedIndices:
+ return [self.options[i][0] for i in self.selectedIndices]
+ else:
selected_values = []
for option, checked, text in self.options:
if checked:
selected_values.append(option)
- if self._forced_values:
- selected_values += self._forced_values
-
- if self.options and (not selected_values):
- selected_values = None
- return selected_values
+ return selected_values if selected_values else None
value = property(value__get, value__set)