2020-03-05 17:31:40 +00:00
import io
import pytest
2022-03-21 16:31:41 +00:00
from rich . console import Console
from rich . panel import Panel
from rich . segment import Segment
from rich . style import Style
2020-03-05 17:31:40 +00:00
tests = [
2020-10-15 20:17:03 +00:00
Panel ( " Hello, World " , padding = 0 ) ,
Panel ( " Hello, World " , expand = False , padding = 0 ) ,
Panel . fit ( " Hello, World " , padding = 0 ) ,
Panel ( " Hello, World " , width = 8 , padding = 0 ) ,
Panel ( Panel ( " Hello, World " , padding = 0 ) , padding = 0 ) ,
Panel ( " Hello, World " , title = " FOO " , padding = 0 ) ,
2021-08-23 17:08:21 +00:00
Panel ( " Hello, World " , subtitle = " FOO " , padding = 0 ) ,
2020-03-05 17:31:40 +00:00
]
expected = [
" ╭────────────────────────────────────────────────╮ \n │Hello, World │ \n ╰────────────────────────────────────────────────╯ \n " ,
" ╭────────────╮ \n │Hello, World│ \n ╰────────────╯ \n " ,
2020-07-10 16:09:41 +00:00
" ╭────────────╮ \n │Hello, World│ \n ╰────────────╯ \n " ,
2020-03-05 17:31:40 +00:00
" ╭──────╮ \n │Hello,│ \n │World │ \n ╰──────╯ \n " ,
" ╭────────────────────────────────────────────────╮ \n │╭──────────────────────────────────────────────╮│ \n ││Hello, World ││ \n │╰──────────────────────────────────────────────╯│ \n ╰────────────────────────────────────────────────╯ \n " ,
2020-07-12 15:17:36 +00:00
" ╭───────────────────── FOO ──────────────────────╮ \n │Hello, World │ \n ╰────────────────────────────────────────────────╯ \n " ,
2021-08-23 01:49:28 +00:00
" ╭────────────────────────────────────────────────╮ \n │Hello, World │ \n ╰───────────────────── FOO ──────────────────────╯ \n " ,
2020-03-05 17:31:40 +00:00
]
def render ( panel , width = 50 ) - > str :
2020-06-20 16:51:53 +00:00
console = Console ( file = io . StringIO ( ) , width = 50 , legacy_windows = False )
2020-03-05 17:31:40 +00:00
console . print ( panel )
return console . file . getvalue ( )
@pytest.mark.parametrize ( " panel,expected " , zip ( tests , expected ) )
def test_render_panel ( panel , expected ) :
assert render ( panel ) == expected
def test_console_width ( ) :
2020-06-20 16:51:53 +00:00
console = Console ( file = io . StringIO ( ) , width = 50 , legacy_windows = False )
2020-03-05 17:31:40 +00:00
panel = Panel ( " Hello, World " , expand = False )
2021-03-25 21:08:36 +00:00
min_width , max_width = panel . __rich_measure__ ( console , console . options )
2020-10-15 20:17:03 +00:00
assert min_width == 16
assert max_width == 16
2020-03-05 17:31:40 +00:00
2020-11-25 17:54:16 +00:00
def test_fixed_width ( ) :
console = Console ( file = io . StringIO ( ) , width = 50 , legacy_windows = False )
panel = Panel ( " Hello World " , width = 20 )
2021-03-25 21:08:36 +00:00
min_width , max_width = panel . __rich_measure__ ( console , console . options )
2020-11-25 17:54:16 +00:00
assert min_width == 20
assert max_width == 20
2022-03-21 16:31:41 +00:00
def test_render_size ( ) :
console = Console ( width = 63 , height = 46 , legacy_windows = False )
options = console . options . update_dimensions ( 80 , 4 )
lines = console . render_lines ( Panel ( " foo " , title = " Hello " ) , options = options )
print ( repr ( lines ) )
expected = [
[
Segment ( " ╭─ " , Style ( ) ) ,
Segment (
" ────────────────────────────────── Hello ─────────────────────────────────── "
) ,
Segment ( " ─╮ " , Style ( ) ) ,
] ,
[
Segment ( " │ " , Style ( ) ) ,
Segment ( " " , Style ( ) ) ,
Segment ( " foo " ) ,
Segment (
2022-07-11 11:49:56 +00:00
" " ,
Style ( ) ,
2022-03-21 16:31:41 +00:00
) ,
Segment ( " " , Style ( ) ) ,
Segment ( " │ " , Style ( ) ) ,
] ,
[
Segment ( " │ " , Style ( ) ) ,
Segment ( " " , Style ( ) ) ,
Segment (
" " ,
Style ( ) ,
) ,
Segment ( " " , Style ( ) ) ,
Segment ( " │ " , Style ( ) ) ,
] ,
[
Segment (
" ╰──────────────────────────────────────────────────────────────────────────────╯ " ,
Style ( ) ,
)
] ,
]
assert lines == expected
2020-03-05 17:31:40 +00:00
if __name__ == " __main__ " :
expected = [ ]
for panel in tests :
result = render ( panel )
print ( result )
expected . append ( result )
print ( " -- " )
print ( )
print ( f " expected= { repr ( expected ) } " )