Use a case insensitive dict for headers

This commit is contained in:
Miguel Grinberg
2022-09-21 23:29:01 +01:00
parent cbefb6bf3a
commit b0fd6c4323
6 changed files with 125 additions and 68 deletions

View File

@@ -1,31 +1,52 @@
import unittest
from microdot import MultiDict
from microdot import MultiDict, NoCaseDict
class TestMultiDict(unittest.TestCase):
def test_multidict(self):
d = MultiDict()
assert dict(d) == {}
assert d.get('zero') is None
assert d.get('zero', default=0) == 0
assert d.getlist('zero') == []
assert d.getlist('zero', type=int) == []
self.assertEqual(dict(d), {})
self.assertIsNone(d.get('zero'))
self.assertEqual(d.get('zero', default=0), 0)
self.assertEqual(d.getlist('zero'), [])
self.assertEqual(d.getlist('zero', type=int), [])
d['one'] = 1
assert d['one'] == 1
assert d.get('one') == 1
assert d.get('one', default=2) == 1
assert d.get('one', type=int) == 1
assert d.get('one', type=str) == '1'
self.assertEqual(d['one'], 1)
self.assertEqual(d.get('one'), 1)
self.assertEqual(d.get('one', default=2), 1)
self.assertEqual(d.get('one', type=int), 1)
self.assertEqual(d.get('one', type=str), '1')
d['two'] = 1
d['two'] = 2
assert d['two'] == 1
assert d.get('two') == 1
assert d.get('two', default=2) == 1
assert d.get('two', type=int) == 1
assert d.get('two', type=str) == '1'
assert d.getlist('two') == [1, 2]
assert d.getlist('two', type=int) == [1, 2]
assert d.getlist('two', type=str) == ['1', '2']
self.assertEqual(d['two'], 1)
self.assertEqual(d.get('two'), 1)
self.assertEqual(d.get('two', default=2), 1)
self.assertEqual(d.get('two', type=int), 1)
self.assertEqual(d.get('two', type=str), '1')
self.assertEqual(d.getlist('two'), [1, 2])
self.assertEqual(d.getlist('two', type=int), [1, 2])
self.assertEqual(d.getlist('two', type=str), ['1', '2'])
def test_case_insensitive_dict(self):
d = NoCaseDict()
d['One'] = 1
d['one'] = 2
d['ONE'] = 3
d['One'] = 4
d['two'] = 5
self.assertEqual(d['one'], 4)
self.assertEqual(d['One'], 4)
self.assertEqual(d['ONE'], 4)
self.assertEqual(d['onE'], 4)
self.assertIn(('One', 4), list(d.items()))
self.assertIn(('two', 5), list(d.items()))
self.assertIn(4, list(d.values()))
self.assertIn(5, list(d.values()))
del d['oNE']
self.assertEqual(list(d.items()), [('two', 5)])
self.assertEqual(list(d.values()), [5])