diff options
Diffstat (limited to 't/01item-text.t')
-rw-r--r-- | t/01item-text.t | 205 |
1 files changed, 205 insertions, 0 deletions
diff --git a/t/01item-text.t b/t/01item-text.t new file mode 100644 index 0000000..ca5a5fe --- /dev/null +++ b/t/01item-text.t @@ -0,0 +1,205 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More; + +use Tickit::Test 0.12; +use Tickit::RenderBuffer; + +use Tickit::Widget::Scroller::Item::Text; + +my $term = mk_term; + +my $item = Tickit::Widget::Scroller::Item::Text->new( "My message here" ); + +isa_ok( $item, "Tickit::Widget::Scroller::Item::Text", '$item' ); + +is_deeply( [ $item->chunks ], + [ [ "My message here", 15 ] ], + '$item->chunks' ); + +is( $item->height_for_width( 80 ), 1, 'height_for_width 80' ); + +my $rb = Tickit::RenderBuffer->new( lines => $term->lines, cols => $term->cols ); + +$item->render( $rb, top => 0, firstline => 0, lastline => 0, width => 80, height => 25 ); +$rb->flush_to_term( $term ); + +flush_tickit; + +is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("My message here"), + SETBG(undef), + ERASECH(65) ], + 'Termlog for render fullwidth' ); + +is_display( [ [TEXT("My message here")] ], + 'Display for render fullwidth' ); + +$term->clear; +drain_termlog; + +{ + { + $rb->save; + + $rb->clip( Tickit::Rect->new( + top => 0, + left => 0, + lines => 10, + cols => 12, + ) ); + + is( $item->height_for_width( 12 ), 2, 'height_for_width 12' ); + + $item->render( $rb, top => 0, firstline => 0, lastline => 1, width => 12, height => 10 ); + + $rb->restore; + } + + $rb->flush_to_term( $term ); + + flush_tickit; + + is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("My message "), + SETBG(undef), + ERASECH(1), + GOTO(1,0), + SETPEN, + PRINT("here"), + SETBG(undef), + ERASECH(8) ], + 'Termlog for render width 12' ); + + is_display( [ [TEXT("My message")], + [TEXT("here")] ], + 'Display for render width 12' ); + + my $indenteditem = Tickit::Widget::Scroller::Item::Text->new( "My message here", indent => 4 ); + + is( $indenteditem->height_for_width( 12 ), 2, 'height_for_width 12 with indent' ); + + $indenteditem->render( $rb, top => 0, firstline => 0, lastline => 1, width => 12, height => 10 ); + $rb->flush_to_term( $term ); + + flush_tickit; + + is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("My message "), + SETBG(undef), + ERASECH(1), + GOTO(1,0), + SETBG(undef), + ERASECH(4,1), + SETPEN, + PRINT("here"), + SETBG(undef), + ERASECH(4) ], + 'Termlog for render width 12 with indent' ); + + is_display( [ [TEXT("My message")], + [TEXT(" here")] ], + 'Display for render width 12 with indent' ); +} + +# Boundary condition in whitespace splitting +{ + $term->clear; + drain_termlog; + + my $item = Tickit::Widget::Scroller::Item::Text->new( "AAAA BBBB CCCC DDDD" ); + + is( $item->height_for_width( 9 ), 2, 'height_for_width 2 for splitting boundary' ); + + $item->render( $rb, top => 0, firstline => 0, lastline => 1, width => 9, height => 2 ); + $rb->flush_to_term( $term ); + + flush_tickit; + + is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("AAAA BBBB"), + GOTO(1,0), + SETPEN, + PRINT("CCCC DDDD") ], + 'Termlog for render splitting boundary' ); + + is_display( [ [TEXT("AAAA BBBB")], + [TEXT("CCCC DDDD")] ], + 'Display for render splitting boundary' ); +} + +# Linefeeds +{ + $term->clear; + drain_termlog; + + my $item = Tickit::Widget::Scroller::Item::Text->new( "Some more text\nwith linefeeds" ); + + is_deeply( [ $item->chunks ], + [ [ "Some more text", 14, linebreak => 1 ], + [ "with linefeeds", 14 ] ], + '$item->chunks with linefeeds' ); + + is( $item->height_for_width( 80 ), 2, 'height_for_width 2 with linefeeds' ); + + $item->render( $rb, top => 0, firstline => 0, lastline => 1, width => 80, height => 2 ); + $rb->flush_to_term( $term ); + + flush_tickit; + + is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("Some more text"), + SETPEN, + ERASECH(66), + GOTO(1,0), + SETPEN, + PRINT("with linefeeds"), + SETPEN, + ERASECH(66) ], + 'Termlog for render with linefeeds' ); + + is_display( [ [TEXT("Some more text")], + [TEXT("with linefeeds")] ], + 'Display for render with linefeeds' ); +} + +# Odd Unicode +{ + use utf8; + + $term->clear; + drain_termlog; + + my $item = Tickit::Widget::Scroller::Item::Text->new( "(ノಠ益ಠ)ノ彡┻━┻" ); + + is_deeply( [ $item->chunks ], + [ [ "(ノಠ益ಠ)ノ彡┻━┻", 15 ] ], + '$item->chunks with Unicode' ); + + is( $item->height_for_width( 80 ), 1, 'height_for_width 2 with Unicode' ); + + $item->render( $rb, top => 0, firstline => 0, lastline => 0, width => 80, height => 1 ); + $rb->flush_to_term( $term ); + + flush_tickit; + + is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("(ノಠ益ಠ)ノ彡┻━┻"), + SETPEN, + ERASECH(65) ], + 'Termlog for render with Unicode' ); + + is_display( [ [TEXT("(ノಠ益ಠ)ノ彡┻━┻")] ], + 'Display for render with Unicode' ); +} + +done_testing; |