File: test_tree_expand_etc.py

package info (click to toggle)
textual 2.1.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 55,084 kB
  • sloc: python: 85,423; lisp: 1,669; makefile: 101
file content (106 lines) | stat: -rw-r--r-- 4,824 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
from __future__ import annotations

from textual.app import App, ComposeResult
from textual.widgets import Tree


class TreeApp(App[None]):
    """Test tree app."""

    def compose(self) -> ComposeResult:
        yield Tree("Test")

    def on_mount(self) -> None:
        tree = self.query_one(Tree)
        for n in range(10):
            tree.root.add(f"Trunk {n}")
        node = tree.root.children[0]
        for n in range(10):
            node = node.add(str(n))


async def test_tree_node_expand() -> None:
    """Expanding one node should not expand all nodes."""
    async with TreeApp().run_test() as pilot:
        pilot.app.query_one(Tree).root.expand()
        assert pilot.app.query_one(Tree).root.is_expanded is True
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert any(child.is_expanded for child in check_node.children) is False
            check_node = check_node.children[0]


async def test_tree_node_expand_all() -> None:
    """Expanding all on a node should expand all child nodes too."""
    async with TreeApp().run_test() as pilot:
        pilot.app.query_one(Tree).root.expand_all()
        assert pilot.app.query_one(Tree).root.is_expanded is True
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert check_node.children[0].is_expanded is True
            assert any(child.is_expanded for child in check_node.children[1:]) is False
            check_node = check_node.children[0]


async def test_tree_node_collapse() -> None:
    """Collapsing one node should not collapse all nodes."""
    async with TreeApp().run_test() as pilot:
        pilot.app.query_one(Tree).root.expand_all()
        pilot.app.query_one(Tree).root.children[0].collapse()
        assert pilot.app.query_one(Tree).root.children[0].is_expanded is False
        check_node = pilot.app.query_one(Tree).root.children[0].children[0]
        while check_node.children:
            assert all(child.is_expanded for child in check_node.children) is True
            check_node = check_node.children[0]


async def test_tree_node_collapse_all() -> None:
    """Collapsing all on a node should collapse all child noes too."""
    async with TreeApp().run_test() as pilot:
        pilot.app.query_one(Tree).root.expand_all()
        pilot.app.query_one(Tree).root.children[0].collapse_all()
        assert pilot.app.query_one(Tree).root.children[0].is_expanded is False
        check_node = pilot.app.query_one(Tree).root.children[0].children[0]
        while check_node.children:
            assert check_node.children[0].is_expanded is False
            assert all(child.is_expanded for child in check_node.children[1:]) is True
            check_node = check_node.children[0]


async def test_tree_node_toggle() -> None:
    """Toggling one node should not toggle all nodes."""
    async with TreeApp().run_test() as pilot:
        assert pilot.app.query_one(Tree).root.is_expanded is False
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert any(child.is_expanded for child in check_node.children) is False
            check_node = check_node.children[0]
        pilot.app.query_one(Tree).root.toggle()
        assert pilot.app.query_one(Tree).root.is_expanded is True
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert any(child.is_expanded for child in check_node.children) is False
            check_node = check_node.children[0]


async def test_tree_node_toggle_all() -> None:
    """Toggling all on a node should toggle all child nodes too."""
    async with TreeApp().run_test() as pilot:
        assert pilot.app.query_one(Tree).root.is_expanded is False
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert any(child.is_expanded for child in check_node.children) is False
            check_node = check_node.children[0]
        pilot.app.query_one(Tree).root.toggle_all()
        assert pilot.app.query_one(Tree).root.is_expanded is True
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert check_node.children[0].is_expanded is True
            assert any(child.is_expanded for child in check_node.children[1:]) is False
            check_node = check_node.children[0]
        pilot.app.query_one(Tree).root.toggle_all()
        assert pilot.app.query_one(Tree).root.is_expanded is False
        check_node = pilot.app.query_one(Tree).root.children[0]
        while check_node.children:
            assert any(child.is_expanded for child in check_node.children) is False
            check_node = check_node.children[0]