diff options
author | Marc Abramowitz <marc@marc-abramowitz.com> | 2016-03-07 14:05:52 -0800 |
---|---|---|
committer | Marc Abramowitz <marc@marc-abramowitz.com> | 2016-03-07 14:05:52 -0800 |
commit | 42b22881290e00e06b840dee1e42f0f5ef044d47 (patch) | |
tree | b4fef928625acd3e8ee45ccaa8c7a6c9810b3601 /tests/test_multidict.py | |
download | paste-git-tox_add_py35.tar.gz |
tox.ini: Add py35 to envlisttox_add_py35
Diffstat (limited to 'tests/test_multidict.py')
-rw-r--r-- | tests/test_multidict.py | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/tests/test_multidict.py b/tests/test_multidict.py new file mode 100644 index 0000000..50a746f --- /dev/null +++ b/tests/test_multidict.py @@ -0,0 +1,162 @@ +# -*- coding: utf-8 -*- +# (c) 2007 Ian Bicking and Philip Jenvey; written for Paste (http://pythonpaste.org) +# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php +import cgi +import six +from six.moves import StringIO + +from nose.tools import assert_raises + +from paste.util.multidict import MultiDict, UnicodeMultiDict + +def test_dict(): + d = MultiDict({'a': 1}) + assert d.items() == [('a', 1)] + + d['b'] = 2 + d['c'] = 3 + assert d.items() == [('a', 1), ('b', 2), ('c', 3)] + + d['b'] = 4 + assert d.items() == [('a', 1), ('c', 3), ('b', 4)] + + d.add('b', 5) + assert_raises(KeyError, d.getone, "b") + assert d.getall('b') == [4, 5] + assert d.items() == [('a', 1), ('c', 3), ('b', 4), ('b', 5)] + + del d['b'] + assert d.items() == [('a', 1), ('c', 3)] + assert d.pop('xxx', 5) == 5 + assert d.getone('a') == 1 + assert d.popitem() == ('c', 3) + assert d.items() == [('a', 1)] + + item = [] + assert d.setdefault('z', item) is item + assert d.items() == [('a', 1), ('z', item)] + + assert d.setdefault('y', 6) == 6 + + assert d.mixed() == {'a': 1, 'y': 6, 'z': item} + assert d.dict_of_lists() == {'a': [1], 'y': [6], 'z': [item]} + + assert 'a' in d + dcopy = d.copy() + assert dcopy is not d + assert dcopy == d + d['x'] = 'x test' + assert dcopy != d + + d[(1, None)] = (None, 1) + assert d.items() == [('a', 1), ('z', []), ('y', 6), ('x', 'x test'), + ((1, None), (None, 1))] + +def test_unicode_dict(): + _test_unicode_dict() + _test_unicode_dict(decode_param_names=True) + +def _test_unicode_dict(decode_param_names=False): + d = UnicodeMultiDict(MultiDict({b'a': 'a test'})) + d.encoding = 'utf-8' + d.errors = 'ignore' + + if decode_param_names: + key_str = six.text_type + k = lambda key: key + d.decode_keys = True + else: + key_str = six.binary_type + k = lambda key: key.encode() + + def assert_unicode(obj): + assert isinstance(obj, six.text_type) + + def assert_key_str(obj): + assert isinstance(obj, key_str) + + def assert_unicode_item(obj): + key, value = obj + assert isinstance(key, key_str) + assert isinstance(value, six.text_type) + + assert d.items() == [(k('a'), u'a test')] + map(assert_key_str, d.keys()) + map(assert_unicode, d.values()) + + d[b'b'] = b'2 test' + d[b'c'] = b'3 test' + assert d.items() == [(k('a'), u'a test'), (k('b'), u'2 test'), (k('c'), u'3 test')] + list(map(assert_unicode_item, d.items())) + + d[k('b')] = b'4 test' + assert d.items() == [(k('a'), u'a test'), (k('c'), u'3 test'), (k('b'), u'4 test')], d.items() + list(map(assert_unicode_item, d.items())) + + d.add(k('b'), b'5 test') + assert_raises(KeyError, d.getone, k("b")) + assert d.getall(k('b')) == [u'4 test', u'5 test'] + map(assert_unicode, d.getall('b')) + assert d.items() == [(k('a'), u'a test'), (k('c'), u'3 test'), (k('b'), u'4 test'), + (k('b'), u'5 test')] + list(map(assert_unicode_item, d.items())) + + del d[k('b')] + assert d.items() == [(k('a'), u'a test'), (k('c'), u'3 test')] + list(map(assert_unicode_item, d.items())) + assert d.pop('xxx', u'5 test') == u'5 test' + assert isinstance(d.pop('xxx', u'5 test'), six.text_type) + assert d.getone(k('a')) == u'a test' + assert isinstance(d.getone(k('a')), six.text_type) + assert d.popitem() == (k('c'), u'3 test') + d[k('c')] = b'3 test' + assert_unicode_item(d.popitem()) + assert d.items() == [(k('a'), u'a test')] + list(map(assert_unicode_item, d.items())) + + item = [] + assert d.setdefault(k('z'), item) is item + items = d.items() + assert items == [(k('a'), u'a test'), (k('z'), item)] + assert isinstance(items[1][0], key_str) + assert isinstance(items[1][1], list) + + assert isinstance(d.setdefault(k('y'), b'y test'), six.text_type) + assert isinstance(d[k('y')], six.text_type) + + assert d.mixed() == {k('a'): u'a test', k('y'): u'y test', k('z'): item} + assert d.dict_of_lists() == {k('a'): [u'a test'], k('y'): [u'y test'], + k('z'): [item]} + del d[k('z')] + list(map(assert_unicode_item, six.iteritems(d.mixed()))) + list(map(assert_unicode_item, [(key, value[0]) for \ + key, value in six.iteritems(d.dict_of_lists())])) + + assert k('a') in d + dcopy = d.copy() + assert dcopy is not d + assert dcopy == d + d[k('x')] = 'x test' + assert dcopy != d + + d[(1, None)] = (None, 1) + assert d.items() == [(k('a'), u'a test'), (k('y'), u'y test'), (k('x'), u'x test'), + ((1, None), (None, 1))] + item = d.items()[-1] + assert isinstance(item[0], tuple) + assert isinstance(item[1], tuple) + + fs = cgi.FieldStorage() + fs.name = 'thefile' + fs.filename = 'hello.txt' + fs.file = StringIO('hello') + d[k('f')] = fs + ufs = d[k('f')] + assert isinstance(ufs, cgi.FieldStorage) + assert ufs is not fs + assert ufs.name == fs.name + assert isinstance(ufs.name, str if six.PY3 else key_str) + assert ufs.filename == fs.filename + assert isinstance(ufs.filename, six.text_type) + assert isinstance(ufs.value, str) + assert ufs.value == 'hello' |