File: test_selection_values.py

package info (click to toggle)
textual 2.1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 55,056 kB
  • sloc: python: 85,423; lisp: 1,669; makefile: 101
file content (82 lines) | stat: -rw-r--r-- 3,216 bytes parent folder | download
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
"""Unit tests dealing with the tracking of selection list values."""

from __future__ import annotations

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


class SelectionListApp(App[None]):
    def __init__(self, default_state: bool = False) -> None:
        super().__init__()
        self._default_state = default_state

    def compose(self) -> ComposeResult:
        yield SelectionList[int](*[(str(n), n, self._default_state) for n in range(50)])


async def test_empty_selected() -> None:
    """Selected should be empty when nothing is selected."""
    async with SelectionListApp().run_test() as pilot:
        assert pilot.app.query_one(SelectionList).selected == []


async def test_programatic_select() -> None:
    """Selected should contain a selected value."""
    async with SelectionListApp().run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        selection.select(0)
        assert pilot.app.query_one(SelectionList).selected == [0]


async def test_programatic_select_all() -> None:
    """Selected should contain all selected values."""
    async with SelectionListApp().run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        selection.select_all()
        assert pilot.app.query_one(SelectionList).selected == list(range(50))


async def test_programatic_deselect() -> None:
    """Selected should not contain a deselected value."""
    async with SelectionListApp(True).run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        selection.deselect(0)
        assert pilot.app.query_one(SelectionList).selected == list(range(50)[1:])


async def test_programatic_deselect_all() -> None:
    """Selected should not contain anything after deselecting all values."""
    async with SelectionListApp(True).run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        selection.deselect_all()
        assert pilot.app.query_one(SelectionList).selected == []


async def test_programatic_toggle() -> None:
    """Selected should reflect a toggle."""
    async with SelectionListApp().run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        for n in range(25, 50):
            selection.select(n)
        for n in range(50):
            selection.toggle(n)
        assert pilot.app.query_one(SelectionList).selected == list(range(50)[:25])


async def test_programatic_toggle_all() -> None:
    """Selected should contain all values after toggling all on."""
    async with SelectionListApp().run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        selection.toggle_all()
        assert pilot.app.query_one(SelectionList).selected == list(range(50))


async def test_removal_of_selected_item() -> None:
    """Removing a selected selection should remove its value from the selected set."""
    async with SelectionListApp().run_test() as pilot:
        selection = pilot.app.query_one(SelectionList)
        selection.toggle(0)
        assert pilot.app.query_one(SelectionList).selected == [0]
        selection.remove_option_at_index(0)
        assert pilot.app.query_one(SelectionList).selected == []