92 lines
1.9 KiB
Python
92 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from benedict.core import invert as _invert
|
|
|
|
import unittest
|
|
|
|
|
|
class invert_test_case(unittest.TestCase):
|
|
|
|
def test_invert_with_unique_values(self):
|
|
i = {
|
|
'a': 1,
|
|
'b': 2,
|
|
'c': 3,
|
|
'd': 4,
|
|
'e': 5,
|
|
}
|
|
o = _invert(i)
|
|
r = {
|
|
1: ['a'],
|
|
2: ['b'],
|
|
3: ['c'],
|
|
4: ['d'],
|
|
5: ['e'],
|
|
}
|
|
self.assertEqual(o, r)
|
|
|
|
def test_invert_with_flat_unique_values(self):
|
|
i = {
|
|
'a': 1,
|
|
'b': 2,
|
|
'c': 3,
|
|
'd': 4,
|
|
'e': 5,
|
|
}
|
|
o = _invert(i, flat=True)
|
|
r = {
|
|
1: 'a',
|
|
2: 'b',
|
|
3: 'c',
|
|
4: 'd',
|
|
5: 'e',
|
|
}
|
|
self.assertEqual(o, r)
|
|
|
|
def test_invert_with_multiple_values(self):
|
|
i = {
|
|
'a': 1,
|
|
'b': 2,
|
|
'c': 3,
|
|
'd': 1,
|
|
'e': 2,
|
|
'f': 3,
|
|
}
|
|
o = _invert(i)
|
|
self.assertTrue('a' and 'd' in o[1])
|
|
self.assertTrue('b' and 'e' in o[2])
|
|
self.assertTrue('c' and 'f' in o[3])
|
|
|
|
def test_invert_with_list_values(self):
|
|
i = {
|
|
'a': ['x', 'y', 'z'],
|
|
'b': ['c', 'd', 'e'],
|
|
}
|
|
o = _invert(i)
|
|
r = {
|
|
'x': ['a'],
|
|
'y': ['a'],
|
|
'z': ['a'],
|
|
'c': ['b'],
|
|
'd': ['b'],
|
|
'e': ['b'],
|
|
}
|
|
self.assertEqual(o, r)
|
|
self.assertEqual(_invert(o), i)
|
|
|
|
def test_invert_with_tuple_values(self):
|
|
i = {
|
|
'a': ('x', 'y', 'z', ),
|
|
'b': ('c', 'd', 'e', ),
|
|
}
|
|
o = _invert(i)
|
|
r = {
|
|
'x': ['a', ],
|
|
'y': ['a', ],
|
|
'z': ['a', ],
|
|
'c': ['b', ],
|
|
'd': ['b', ],
|
|
'e': ['b', ],
|
|
}
|
|
self.assertEqual(o, r)
|