File: test_underline_bar.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 (127 lines) | stat: -rw-r--r-- 3,660 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
121
122
123
124
125
126
127
from unittest.mock import create_autospec

from rich.console import Console, ConsoleOptions
from rich.text import Text

from tests.utilities.render import render
from textual.renderables.bar import Bar

MAGENTA = "\x1b[35m"
GREY = "\x1b[38;5;59m"
STOP = "\x1b[0m"
GREEN = "\x1b[32m"
RED = "\x1b[31m"


def test_no_highlight():
    bar = Bar(width=6)
    assert render(bar) == f"{GREY}━━━━━━{STOP}"


def test_highlight_from_zero():
    bar = Bar(highlight_range=(0, 2.5), width=6)
    assert render(bar) == (f"{MAGENTA}━━{STOP}{MAGENTA}╸{STOP}{GREY}━━━{STOP}")


def test_highlight_from_zero_point_five():
    bar = Bar(highlight_range=(0.5, 2), width=6)
    assert render(bar) == (f"{MAGENTA}╺━{STOP}{GREY}╺{STOP}{GREY}━━━{STOP}")


def test_highlight_middle():
    bar = Bar(highlight_range=(2, 4), width=6)
    assert render(bar) == (
        f"{GREY}━{STOP}"
        f"{GREY}╸{STOP}"
        f"{MAGENTA}━━{STOP}"
        f"{GREY}╺{STOP}"
        f"{GREY}━{STOP}"
    )


def test_highlight_half_start():
    bar = Bar(highlight_range=(2.5, 4), width=6)
    assert render(bar) == (
        f"{GREY}━━{STOP}" f"{MAGENTA}╺━{STOP}" f"{GREY}╺{STOP}" f"{GREY}━{STOP}"
    )


def test_highlight_half_end():
    bar = Bar(highlight_range=(2, 4.5), width=6)
    assert render(bar) == (
        f"{GREY}━{STOP}"
        f"{GREY}╸{STOP}"
        f"{MAGENTA}━━{STOP}"
        f"{MAGENTA}╸{STOP}"
        f"{GREY}━{STOP}"
    )


def test_highlight_half_start_and_half_end():
    bar = Bar(highlight_range=(2.5, 4.5), width=6)
    assert render(bar) == (
        f"{GREY}━━{STOP}" f"{MAGENTA}╺━{STOP}" f"{MAGENTA}╸{STOP}" f"{GREY}━{STOP}"
    )


def test_highlight_to_near_end():
    bar = Bar(highlight_range=(3, 5.5), width=6)
    assert render(bar) == (
        f"{GREY}━━{STOP}" f"{GREY}╸{STOP}" f"{MAGENTA}━━{STOP}" f"{MAGENTA}╸{STOP}"
    )


def test_highlight_to_end():
    bar = Bar(highlight_range=(3, 6), width=6)
    assert render(bar) == (f"{GREY}━━{STOP}{GREY}╸{STOP}{MAGENTA}━━━{STOP}")


def test_highlight_out_of_bounds_start():
    bar = Bar(highlight_range=(-2, 3), width=6)
    assert render(bar) == (f"{MAGENTA}━━━{STOP}{GREY}╺{STOP}{GREY}━━{STOP}")


def test_highlight_out_of_bounds_end():
    bar = Bar(highlight_range=(3, 9), width=6)
    assert render(bar) == (f"{GREY}━━{STOP}{GREY}╸{STOP}{MAGENTA}━━━{STOP}")


def test_highlight_full_range_out_of_bounds_end():
    bar = Bar(highlight_range=(9, 10), width=6)
    assert render(bar) == f"{GREY}━━━━━━{STOP}"


def test_highlight_full_range_out_of_bounds_start():
    bar = Bar(highlight_range=(-5, -2), width=6)
    assert render(bar) == f"{GREY}━━━━━━{STOP}"


def test_custom_styles():
    bar = Bar(
        highlight_range=(2, 4), highlight_style="red", background_style="green", width=6
    )
    assert render(bar) == (
        f"{GREEN}━{STOP}"
        f"{GREEN}╸{STOP}"
        f"{RED}━━{STOP}"
        f"{GREEN}╺{STOP}"
        f"{GREEN}━{STOP}"
    )


def test_clickable_ranges():
    bar = Bar(
        highlight_range=(0, 1), width=6, clickable_ranges={"foo": (0, 2), "bar": (4, 5)}
    )

    console = create_autospec(Console)
    options = create_autospec(ConsoleOptions)
    text: Text = list(bar.__rich_console__(console, options))[0]

    start, end, style = text.spans[-2]
    assert (start, end) == (0, 2)
    assert style.meta == {"@click": "range_clicked('foo')"}

    start, end, style = text.spans[-1]
    assert (start, end) == (4, 5)
    assert style.meta == {"@click": "range_clicked('bar')"}