rich/tests/test_align.py

107 lines
3.3 KiB
Python
Raw Normal View History

2020-05-17 11:39:51 +00:00
import io
import pytest
from rich.console import Console
2021-01-10 19:26:36 +00:00
from rich.align import Align, VerticalCenter
2020-07-10 15:11:33 +00:00
from rich.measure import Measurement
2020-05-17 11:39:51 +00:00
def test_bad_align_legal():
# Legal
Align("foo", "left")
Align("foo", "center")
Align("foo", "right")
# illegal
with pytest.raises(ValueError):
Align("foo", None)
with pytest.raises(ValueError):
Align("foo", "middle")
with pytest.raises(ValueError):
Align("foo", "")
with pytest.raises(ValueError):
Align("foo", "LEFT")
2021-01-10 19:26:36 +00:00
def test_repr():
repr(Align("foo", "left"))
repr(Align("foo", "center"))
repr(Align("foo", "right"))
2020-07-10 15:11:33 +00:00
def test_align_left():
2020-05-17 11:39:51 +00:00
console = Console(file=io.StringIO(), width=10)
console.print(Align("foo", "left"))
2020-07-10 15:11:33 +00:00
assert console.file.getvalue() == "foo \n"
def test_align_center():
console = Console(file=io.StringIO(), width=10)
console.print(Align("foo", "center"))
assert console.file.getvalue() == " foo \n"
def test_align_right():
console = Console(file=io.StringIO(), width=10)
console.print(Align("foo", "right"))
assert console.file.getvalue() == " foo\n"
def test_align_fit():
console = Console(file=io.StringIO(), width=10)
console.print(Align("foobarbaze", "center"))
assert console.file.getvalue() == "foobarbaze\n"
def test_align_right_style():
console = Console(
file=io.StringIO(), width=10, color_system="truecolor", force_terminal=True
)
console.print(Align("foo", "right", style="on blue"))
assert console.file.getvalue() == "\x1b[44m \x1b[0m\x1b[44mfoo\x1b[0m\n"
def test_measure():
console = Console(file=io.StringIO(), width=20)
_min, _max = Measurement.get(console, Align("foo bar", "left"), 20)
assert _min == 3
assert _max == 7
2020-07-12 15:17:36 +00:00
def test_align_no_pad():
console = Console(file=io.StringIO(), width=10)
console.print(Align("foo", "center", pad=False))
console.print(Align("foo", "left", pad=False))
assert console.file.getvalue() == " foo\nfoo\n"
def test_align_width():
console = Console(file=io.StringIO(), width=40)
words = "Deep in the human unconscious is a pervasive need for a logical universe that makes sense. But the real universe is always one step beyond logic"
console.print(Align(words, "center", width=30))
result = console.file.getvalue()
2020-07-15 10:42:11 +00:00
expected = " Deep in the human unconscious \n is a pervasive need for a \n logical universe that makes \n sense. But the real universe \n is always one step beyond \n logic \n"
2020-07-12 15:17:36 +00:00
assert result == expected
2020-07-10 15:11:33 +00:00
def test_shortcuts():
assert Align.left("foo").align == "left"
assert Align.left("foo").renderable == "foo"
assert Align.right("foo").align == "right"
assert Align.right("foo").renderable == "foo"
assert Align.center("foo").align == "center"
assert Align.center("foo").renderable == "foo"
2021-01-10 19:26:36 +00:00
def test_vertical_center():
console = Console(color_system=None, height=6)
console.begin_capture()
vertical_center = VerticalCenter("foo")
repr(vertical_center)
console.print(vertical_center)
result = console.end_capture()
expected = "\n\nfoo\n\n\n\n"
assert result == expected
assert Measurement.get(console, vertical_center) == Measurement(3, 3)