1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
#!/usr/bin/env python
from unittest import TestCase
from wtforms.form import BaseForm, WebobInputWrapper
from wtforms.fields import Field, _unset_value
try:
from webob.multidict import MultiDict
has_webob = True
except ImportError:
has_webob = False
class MockMultiDict(object):
def __init__(self, tuples):
self.tuples = tuples
def __len__(self):
return len(self.tuples)
def __iter__(self):
for k, _ in self.tuples:
yield k
def __contains__(self, key):
for k, _ in self.tuples:
if k == key:
return True
return False
def getall(self, key):
result = []
for k, v in self.tuples:
if key == k:
result.append(v)
return result
class SneakyField(Field):
def __init__(self, sneaky_callable, *args, **kwargs):
super(SneakyField, self).__init__(*args, **kwargs)
self.sneaky_callable = sneaky_callable
def process(self, formdata, data=_unset_value):
self.sneaky_callable(formdata)
class WebobWrapperTest(TestCase):
def setUp(self):
w_cls = has_webob and MultiDict or MockMultiDict
self.test_values = [('a', 'Apple'), ('b', 'Banana'), ('a', 'Cherry')]
self.empty_mdict = w_cls([])
self.filled_mdict = w_cls(self.test_values)
def test_automatic_wrapping(self):
def _check(formdata):
self.assert_(isinstance(formdata, WebobInputWrapper))
form = BaseForm({'a': SneakyField(_check)})
form.process(self.filled_mdict)
def test_empty(self):
formdata = WebobInputWrapper(self.empty_mdict)
self.assert_(not formdata)
self.assertEqual(len(formdata), 0)
self.assertEqual(list(formdata), [])
self.assertEqual(formdata.getlist('fake'), [])
def test_filled(self):
formdata = WebobInputWrapper(self.filled_mdict)
self.assert_(formdata)
self.assertEqual(len(formdata), 3)
self.assertEqual(list(formdata), ['a','b','a'])
self.assert_('b' in formdata)
self.assert_('fake' not in formdata)
self.assertEqual(formdata.getlist('a'), ['Apple', 'Cherry'])
self.assertEqual(formdata.getlist('b'), ['Banana'])
self.assertEqual(formdata.getlist('fake'), [])
if __name__ == '__main__':
from unittest import main
main()
|