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 \n foo \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 ( )
2021-01-10 22:00:53 +00:00
expected = " \n \n foo \n \n \n "
2021-01-10 19:26:36 +00:00
assert result == expected
2021-01-10 22:02:38 +00:00
assert Measurement . get ( console , vertical_center ) == Measurement ( 3 , 3 )