2
0

test_datastructures.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. """
  2. Tests for stuff in django.utils.datastructures.
  3. """
  4. import copy
  5. from django.test import SimpleTestCase
  6. from django.utils.datastructures import (DictWrapper, ImmutableList,
  7. MultiValueDict, MultiValueDictKeyError, OrderedSet)
  8. from django.utils import six
  9. class OrderedSetTests(SimpleTestCase):
  10. def test_bool(self):
  11. # Refs #23664
  12. s = OrderedSet()
  13. self.assertFalse(s)
  14. s.add(1)
  15. self.assertTrue(s)
  16. class MultiValueDictTests(SimpleTestCase):
  17. def test_multivaluedict(self):
  18. d = MultiValueDict({'name': ['Adrian', 'Simon'],
  19. 'position': ['Developer']})
  20. self.assertEqual(d['name'], 'Simon')
  21. self.assertEqual(d.get('name'), 'Simon')
  22. self.assertEqual(d.getlist('name'), ['Adrian', 'Simon'])
  23. self.assertEqual(
  24. sorted(list(six.iteritems(d))),
  25. [('name', 'Simon'), ('position', 'Developer')]
  26. )
  27. self.assertEqual(
  28. sorted(list(six.iterlists(d))),
  29. [('name', ['Adrian', 'Simon']), ('position', ['Developer'])]
  30. )
  31. six.assertRaisesRegex(self, MultiValueDictKeyError, 'lastname',
  32. d.__getitem__, 'lastname')
  33. self.assertEqual(d.get('lastname'), None)
  34. self.assertEqual(d.get('lastname', 'nonexistent'), 'nonexistent')
  35. self.assertEqual(d.getlist('lastname'), [])
  36. self.assertEqual(d.getlist('doesnotexist', ['Adrian', 'Simon']),
  37. ['Adrian', 'Simon'])
  38. d.setlist('lastname', ['Holovaty', 'Willison'])
  39. self.assertEqual(d.getlist('lastname'), ['Holovaty', 'Willison'])
  40. self.assertEqual(sorted(list(six.itervalues(d))),
  41. ['Developer', 'Simon', 'Willison'])
  42. def test_appendlist(self):
  43. d = MultiValueDict()
  44. d.appendlist('name', 'Adrian')
  45. d.appendlist('name', 'Simon')
  46. self.assertEqual(d.getlist('name'), ['Adrian', 'Simon'])
  47. def test_copy(self):
  48. for copy_func in [copy.copy, lambda d: d.copy()]:
  49. d1 = MultiValueDict({
  50. "developers": ["Carl", "Fred"]
  51. })
  52. self.assertEqual(d1["developers"], "Fred")
  53. d2 = copy_func(d1)
  54. d2.update({"developers": "Groucho"})
  55. self.assertEqual(d2["developers"], "Groucho")
  56. self.assertEqual(d1["developers"], "Fred")
  57. d1 = MultiValueDict({
  58. "key": [[]]
  59. })
  60. self.assertEqual(d1["key"], [])
  61. d2 = copy_func(d1)
  62. d2["key"].append("Penguin")
  63. self.assertEqual(d1["key"], ["Penguin"])
  64. self.assertEqual(d2["key"], ["Penguin"])
  65. def test_dict_translation(self):
  66. mvd = MultiValueDict({
  67. 'devs': ['Bob', 'Joe'],
  68. 'pm': ['Rory'],
  69. })
  70. d = mvd.dict()
  71. self.assertEqual(sorted(six.iterkeys(d)), sorted(six.iterkeys(mvd)))
  72. for key in six.iterkeys(mvd):
  73. self.assertEqual(d[key], mvd[key])
  74. self.assertEqual({}, MultiValueDict().dict())
  75. class ImmutableListTests(SimpleTestCase):
  76. def test_sort(self):
  77. d = ImmutableList(range(10))
  78. # AttributeError: ImmutableList object is immutable.
  79. self.assertRaisesMessage(AttributeError,
  80. 'ImmutableList object is immutable.', d.sort)
  81. self.assertEqual(repr(d), '(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)')
  82. def test_custom_warning(self):
  83. d = ImmutableList(range(10), warning="Object is immutable!")
  84. self.assertEqual(d[1], 1)
  85. # AttributeError: Object is immutable!
  86. self.assertRaisesMessage(AttributeError,
  87. 'Object is immutable!', d.__setitem__, 1, 'test')
  88. class DictWrapperTests(SimpleTestCase):
  89. def test_dictwrapper(self):
  90. f = lambda x: "*%s" % x
  91. d = DictWrapper({'a': 'a'}, f, 'xx_')
  92. self.assertEqual(
  93. "Normal: %(a)s. Modified: %(xx_a)s" % d,
  94. 'Normal: a. Modified: *a'
  95. )