File: test_tree_node_add.py

package info (click to toggle)
textual 2.1.2-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 55,080 kB
  • sloc: python: 85,423; lisp: 1,669; makefile: 101
file content (120 lines) | stat: -rw-r--r-- 4,676 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
108
109
110
111
112
113
114
115
116
117
118
119
120
import pytest

from textual.widgets import Tree
from textual.widgets.tree import AddNodeError


def test_tree_node_add_before_and_after_raises_exception():
    tree = Tree[None]("root")
    with pytest.raises(AddNodeError):
        tree.root.add("error", before=99, after=0)


def test_tree_node_add_before_or_after_with_invalid_type_raises_exception():
    tree = Tree[None]("root")
    tree.root.add("node")
    with pytest.raises(TypeError):
        tree.root.add("before node", before="node")
    with pytest.raises(TypeError):
        tree.root.add("after node", after="node")


def test_tree_node_add_before_index():
    tree = Tree[None]("root")
    tree.root.add("node")
    tree.root.add("before node", before=0)
    tree.root.add("first", before=-99)
    tree.root.add("after first", before=-2)
    tree.root.add("last", before=99)
    tree.root.add("after node", before=4)
    tree.root.add("before last", before=-1)

    assert str(tree.root.children[0].label) == "first"
    assert str(tree.root.children[1].label) == "after first"
    assert str(tree.root.children[2].label) == "before node"
    assert str(tree.root.children[3].label) == "node"
    assert str(tree.root.children[4].label) == "after node"
    assert str(tree.root.children[5].label) == "before last"
    assert str(tree.root.children[6].label) == "last"


def test_tree_node_add_after_index():
    tree = Tree[None]("root")
    tree.root.add("node")
    tree.root.add("after node", after=0)
    tree.root.add("first", after=-99)
    tree.root.add("after first", after=-3)
    tree.root.add("before node", after=1)
    tree.root.add("before last", after=99)
    tree.root.add("last", after=-1)

    assert str(tree.root.children[0].label) == "first"
    assert str(tree.root.children[1].label) == "after first"
    assert str(tree.root.children[2].label) == "before node"
    assert str(tree.root.children[3].label) == "node"
    assert str(tree.root.children[4].label) == "after node"
    assert str(tree.root.children[5].label) == "before last"
    assert str(tree.root.children[6].label) == "last"


def test_tree_node_add_relative_to_unknown_node_raises_exception():
    tree = Tree[None]("root")
    removed_node = tree.root.add("removed node")
    removed_node.remove()
    with pytest.raises(AddNodeError):
        tree.root.add("node", before=removed_node)
    with pytest.raises(AddNodeError):
        tree.root.add("node", after=removed_node)


def test_tree_node_add_before_node():
    tree = Tree[None]("root")
    node = tree.root.add("node")
    before_node = tree.root.add("before node", before=node)
    tree.root.add("first", before=before_node)
    tree.root.add("after first", before=before_node)
    last = tree.root.add("last", before=4)
    before_last = tree.root.add("before last", before=last)
    tree.root.add("after node", before=before_last)

    assert str(tree.root.children[0].label) == "first"
    assert str(tree.root.children[1].label) == "after first"
    assert str(tree.root.children[2].label) == "before node"
    assert str(tree.root.children[3].label) == "node"
    assert str(tree.root.children[4].label) == "after node"
    assert str(tree.root.children[5].label) == "before last"
    assert str(tree.root.children[6].label) == "last"


def test_tree_node_add_after_node():
    tree = Tree[None]("root")
    node = tree.root.add("node")
    after_node = tree.root.add("after node", after=node)
    first = tree.root.add("first", after=-3)
    after_first = tree.root.add("after first", after=first)
    tree.root.add("before node", after=after_first)
    before_last = tree.root.add("before last", after=after_node)
    tree.root.add("last", after=before_last)

    assert str(tree.root.children[0].label) == "first"
    assert str(tree.root.children[1].label) == "after first"
    assert str(tree.root.children[2].label) == "before node"
    assert str(tree.root.children[3].label) == "node"
    assert str(tree.root.children[4].label) == "after node"
    assert str(tree.root.children[5].label) == "before last"
    assert str(tree.root.children[6].label) == "last"


def test_tree_node_add_leaf_before_or_after():
    tree = Tree[None]("root")
    leaf = tree.root.add_leaf("leaf")
    tree.root.add_leaf("before leaf", before=leaf)
    tree.root.add_leaf("after leaf", after=leaf)
    tree.root.add_leaf("first", before=0)
    tree.root.add_leaf("last", after=-1)

    assert str(tree.root.children[0].label) == "first"
    assert str(tree.root.children[1].label) == "before leaf"
    assert str(tree.root.children[2].label) == "leaf"
    assert str(tree.root.children[3].label) == "after leaf"
    assert str(tree.root.children[4].label) == "last"