2020-02-04 09:33:20 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
from benedict.core import keylists as _keylists
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
class keylists_test_case(unittest.TestCase):
|
|
|
|
|
|
|
|
def test_keylists(self):
|
|
|
|
i = {
|
|
|
|
'a': 1,
|
|
|
|
'b': {
|
|
|
|
'c': {
|
|
|
|
'x': 2,
|
|
|
|
'y': 3,
|
|
|
|
},
|
|
|
|
'd': {
|
|
|
|
'x': 4,
|
|
|
|
'y': 5,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
o = _keylists(i)
|
|
|
|
r = [
|
|
|
|
['a'],
|
|
|
|
['b'],
|
|
|
|
['b', 'c'],
|
|
|
|
['b', 'c', 'x'],
|
|
|
|
['b', 'c', 'y'],
|
|
|
|
['b', 'd'],
|
|
|
|
['b', 'd', 'x'],
|
|
|
|
['b', 'd', 'y'],
|
|
|
|
]
|
2020-02-04 11:45:08 +00:00
|
|
|
for k in r:
|
|
|
|
self.assertTrue(k in o)
|
2020-02-04 09:33:20 +00:00
|
|
|
|
|
|
|
def test_keylists_with_non_string_keys(self):
|
|
|
|
i = {
|
|
|
|
True: {
|
|
|
|
True: 1,
|
|
|
|
},
|
|
|
|
False: {
|
|
|
|
False: 1,
|
|
|
|
},
|
|
|
|
None: {
|
|
|
|
None: 1,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
o = _keylists(i)
|
|
|
|
r = [
|
|
|
|
[False],
|
|
|
|
[False, False],
|
|
|
|
[None],
|
|
|
|
[None, None],
|
|
|
|
[True],
|
|
|
|
[True, True],
|
|
|
|
]
|
|
|
|
for k in r:
|
|
|
|
self.assertTrue(k in o)
|
2020-09-21 14:41:44 +00:00
|
|
|
|
|
|
|
def test_keylists_with_lists_and_indexes_included(self):
|
|
|
|
i = {
|
|
|
|
'a': 1,
|
|
|
|
'b': {
|
|
|
|
'c': {
|
|
|
|
'x': 2,
|
|
|
|
'y': 3,
|
|
|
|
},
|
|
|
|
'd': {
|
|
|
|
'x': 4,
|
|
|
|
'y': 5,
|
|
|
|
},
|
|
|
|
'e': [
|
|
|
|
{
|
|
|
|
'x': 1,
|
|
|
|
'y': -1,
|
|
|
|
'z': [1, 2, 3],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'x': 2,
|
|
|
|
'y': -2,
|
|
|
|
'z': [2, 3, 4],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'x': 3,
|
|
|
|
'y': -3,
|
|
|
|
'z': [3, 4, 5],
|
|
|
|
},
|
|
|
|
]
|
|
|
|
},
|
|
|
|
}
|
|
|
|
o = _keylists(i, indexes=True)
|
|
|
|
r = [
|
|
|
|
['a'],
|
|
|
|
['b'],
|
|
|
|
['b', 'c'],
|
|
|
|
['b', 'c', 'x'],
|
|
|
|
['b', 'c', 'y'],
|
|
|
|
['b', 'd'],
|
|
|
|
['b', 'd', 'x'],
|
|
|
|
['b', 'd', 'y'],
|
|
|
|
['b', 'e'],
|
|
|
|
['b', 'e[0]'],
|
|
|
|
['b', 'e[0]', 'x'],
|
|
|
|
['b', 'e[0]', 'y'],
|
|
|
|
['b', 'e[0]', 'z'],
|
|
|
|
['b', 'e[0]', 'z[0]'],
|
|
|
|
['b', 'e[0]', 'z[1]'],
|
|
|
|
['b', 'e[0]', 'z[2]'],
|
|
|
|
['b', 'e[1]'],
|
|
|
|
['b', 'e[1]', 'x'],
|
|
|
|
['b', 'e[1]', 'y'],
|
|
|
|
['b', 'e[1]', 'z'],
|
|
|
|
['b', 'e[1]', 'z[0]'],
|
|
|
|
['b', 'e[1]', 'z[1]'],
|
|
|
|
['b', 'e[1]', 'z[2]'],
|
|
|
|
['b', 'e[2]'],
|
|
|
|
['b', 'e[2]', 'x'],
|
|
|
|
['b', 'e[2]', 'y'],
|
|
|
|
['b', 'e[2]', 'z'],
|
|
|
|
['b', 'e[2]', 'z[0]'],
|
|
|
|
['b', 'e[2]', 'z[1]'],
|
|
|
|
['b', 'e[2]', 'z[2]'],
|
|
|
|
]
|
|
|
|
self.assertEqual(o, r)
|
|
|
|
|
|
|
|
def test_keylists_with_nested_lists_and_indexes_included(self):
|
|
|
|
i = {
|
|
|
|
'a': {
|
|
|
|
'b': [
|
|
|
|
[1, 2],
|
|
|
|
[3, 4, 5],
|
|
|
|
[
|
|
|
|
{
|
|
|
|
'x': 1,
|
|
|
|
'y': -1,
|
|
|
|
},
|
|
|
|
] ,
|
|
|
|
],
|
|
|
|
},
|
|
|
|
}
|
|
|
|
o = _keylists(i, indexes=True)
|
|
|
|
r = [
|
|
|
|
['a'],
|
|
|
|
['a', 'b'],
|
|
|
|
['a', 'b[0]'],
|
|
|
|
['a', 'b[0][0]'],
|
|
|
|
['a', 'b[0][1]'],
|
|
|
|
['a', 'b[1]'],
|
|
|
|
['a', 'b[1][0]'],
|
|
|
|
['a', 'b[1][1]'],
|
|
|
|
['a', 'b[1][2]'],
|
|
|
|
['a', 'b[2]'],
|
|
|
|
['a', 'b[2][0]'],
|
|
|
|
['a', 'b[2][0]', 'x'],
|
|
|
|
['a', 'b[2][0]' ,'y'],
|
|
|
|
]
|
|
|
|
self.assertEqual(o, r)
|
|
|
|
|
|
|
|
def test_keylists_with_lists_and_indexes_not_included(self):
|
|
|
|
i = {
|
|
|
|
'a': 1,
|
|
|
|
'b': {
|
|
|
|
'c': {
|
|
|
|
'x': 2,
|
|
|
|
'y': 3,
|
|
|
|
},
|
|
|
|
'd': {
|
|
|
|
'x': 4,
|
|
|
|
'y': 5,
|
|
|
|
},
|
|
|
|
'e': [
|
|
|
|
{
|
|
|
|
'x': 1,
|
|
|
|
'y': -1,
|
|
|
|
'z': [1, 2, 3],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'x': 2,
|
|
|
|
'y': -2,
|
|
|
|
'z': [2, 3, 4],
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'x': 3,
|
|
|
|
'y': -3,
|
|
|
|
'z': [3, 4, 5],
|
|
|
|
},
|
|
|
|
]
|
|
|
|
},
|
|
|
|
}
|
|
|
|
o = _keylists(i, indexes=False)
|
|
|
|
r = [
|
|
|
|
['a'],
|
|
|
|
['b'],
|
|
|
|
['b', 'c'],
|
|
|
|
['b', 'c', 'x'],
|
|
|
|
['b', 'c', 'y'],
|
|
|
|
['b', 'd'],
|
|
|
|
['b', 'd', 'x'],
|
|
|
|
['b', 'd', 'y'],
|
|
|
|
['b', 'e'],
|
|
|
|
]
|
|
|
|
self.assertEqual(o, r)
|