import io import pytest from rich.color import ColorSystem from rich.console import Console, ConsoleOptions from rich import errors from rich.segment import Segment from rich.style import Style from rich.theme import Theme def test_console_options_update(): options = ConsoleOptions( min_width=10, max_width=20, is_terminal=False, encoding="utf-8" ) options1 = options.update(width=15) assert options1.min_width == 15 and options1.max_width == 15 options2 = options.update(min_width=5, max_width=15, justify="right") assert ( options2.min_width == 5 and options2.max_width == 15 and options2.justify == "right" ) options_copy = options.update() assert options_copy == options and options_copy is not options def test_init(): console = Console(color_system=None) assert console._color_system == None console = Console(color_system="standard") assert console._color_system == ColorSystem.STANDARD console = Console(color_system="auto") def test_size(): console = Console() w, h = console.size assert console.width == w console = Console(width=99, height=101) w, h = console.size assert w == 99 and h == 101 def test_repr(): console = Console() assert isinstance(repr(console), str) assert isinstance(str(console), str) def test_print(): console = Console(file=io.StringIO(), color_system="truecolor") console.print("foo") assert console.file.getvalue() == "foo\n" def test_print_style(): console = Console(file=io.StringIO(), color_system="truecolor") console.print("foo", style="bold") assert console.file.getvalue() == "\x1b[1mfoo\x1b[0m\n" def test_show_cursor(): console = Console(file=io.StringIO()) console.show_cursor(False) console.print("foo") console.show_cursor(True) assert console.file.getvalue() == "\x1b[?25lfoo\n\x1b[?25h" def test_get_style(): console = Console() console.get_style("repr.brace") == Style(bold=True) def test_get_style_error(): console = Console() with pytest.raises(errors.MissingStyle): console.get_style("nosuchstyle") with pytest.raises(errors.MissingStyle): console.get_style("foo bar")