1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
# Copyright (c) 2020 6WIND S.A.
# SPDX-License-Identifier: MIT
import unittest
import libyang as ly
# -------------------------------------------------------------------------------------
class KeyedListTest(unittest.TestCase):
def test_keylist_base(self):
l = ly.KeyedList(["x"])
with self.assertRaises(TypeError):
l.index("x")
with self.assertRaises(TypeError):
l.insert(0, "x")
with self.assertRaises(TypeError):
l.reverse()
with self.assertRaises(TypeError):
l.sort()
with self.assertRaises(TypeError):
l["x"] = 2
with self.assertRaises(TypeError):
l[0] # pylint: disable=pointless-statement
with self.assertRaises(TypeError):
del l[0]
with self.assertRaises(TypeError):
l.pop()
with self.assertRaises(TypeError):
l.pop(0)
def test_keylist_leaflist(self):
l = ly.KeyedList("abcdef")
self.assertEqual(len(l), 6)
self.assertIn("e", l)
l.remove("e")
self.assertNotIn("e", l)
self.assertIn("c", l)
del l["c"]
self.assertNotIn("c", l)
with self.assertRaises(KeyError):
del l["x"]
with self.assertRaises(KeyError):
l.remove("x")
self.assertEqual(l.pop("x", "not-found"), "not-found")
self.assertEqual(l.pop("b"), "b")
self.assertNotIn("b", l)
l.clear()
self.assertEqual(len(l), 0)
self.assertEqual(l, [])
def test_keylist_list_one_key(self):
l = ly.KeyedList(
[
{"mtu": 1500, "name": "eth0"},
{"mtu": 512, "name": "eth2"},
{"mtu": 1280, "name": "eth4"},
],
key_name="name",
)
self.assertIn("eth2", l)
self.assertEqual(l["eth4"], {"mtu": 1280, "name": "eth4"})
del l["eth0"]
self.assertEqual(
l, [{"mtu": 512, "name": "eth2"}, {"mtu": 1280, "name": "eth4"}]
)
l.append({"name": "eth6", "mtu": 6})
l.append({"name": "eth5", "mtu": 5})
l.append({"name": "eth10", "mtu": 10})
self.assertEqual(
l,
# order does not matter
[
{"mtu": 10, "name": "eth10"},
{"mtu": 512, "name": "eth2"},
{"mtu": 5, "name": "eth5"},
{"mtu": 6, "name": "eth6"},
{"mtu": 1280, "name": "eth4"},
],
)
self.assertEqual(l.pop("eth10000", {}), {})
self.assertEqual(l.pop("eth10"), {"mtu": 10, "name": "eth10"})
self.assertNotIn("eth10", l)
l.clear()
self.assertEqual(len(l), 0)
self.assertEqual(l, [])
def test_keylist_list_multiple_keys(self):
l = ly.KeyedList(
[
{"id": 5, "size": 10, "desc": "foo"},
{"id": 8, "size": 5, "desc": "bar"},
{"id": 2, "size": 14, "desc": "baz"},
],
key_name=("id", "size"),
)
self.assertIn(("8", "5"), l)
self.assertEqual(l["8", "5"], {"id": 8, "size": 5, "desc": "bar"})
self.assertEqual(l[("2", "14")], {"id": 2, "size": 14, "desc": "baz"})
del l["2", "14"]
self.assertEqual(
l,
[{"id": 5, "size": 10, "desc": "foo"}, {"id": 8, "size": 5, "desc": "bar"}],
)
l.clear()
self.assertEqual(len(l), 0)
self.assertEqual(l, [])
|