37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from django.test import SimpleTestCase
|
|
from django.utils.hashable import make_hashable
|
|
|
|
|
|
class TestHashable(SimpleTestCase):
|
|
def test_equal(self):
|
|
tests = (
|
|
([], ()),
|
|
(["a", 1], ("a", 1)),
|
|
({}, ()),
|
|
({"a"}, ("a",)),
|
|
(frozenset({"a"}), {"a"}),
|
|
({"a": 1, "b": 2}, (("a", 1), ("b", 2))),
|
|
({"b": 2, "a": 1}, (("a", 1), ("b", 2))),
|
|
(("a", ["b", 1]), ("a", ("b", 1))),
|
|
(("a", {"b": 1}), ("a", (("b", 1),))),
|
|
)
|
|
for value, expected in tests:
|
|
with self.subTest(value=value):
|
|
self.assertEqual(make_hashable(value), expected)
|
|
|
|
def test_count_equal(self):
|
|
tests = (
|
|
({"a": 1, "b": ["a", 1]}, (("a", 1), ("b", ("a", 1)))),
|
|
({"a": 1, "b": ("a", [1, 2])}, (("a", 1), ("b", ("a", (1, 2))))),
|
|
)
|
|
for value, expected in tests:
|
|
with self.subTest(value=value):
|
|
self.assertCountEqual(make_hashable(value), expected)
|
|
|
|
def test_unhashable(self):
|
|
class Unhashable:
|
|
__hash__ = None
|
|
|
|
with self.assertRaisesMessage(TypeError, "unhashable type: 'Unhashable'"):
|
|
make_hashable(Unhashable())
|