File: test_keyedlist.py

package info (click to toggle)
libyang-python 4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 640 kB
  • sloc: python: 8,012; ansic: 1,231; sh: 159; makefile: 15
file content (107 lines) | stat: -rw-r--r-- 3,547 bytes parent folder | download | duplicates (2)
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, [])