diff options
Diffstat (limited to 't/20push-bottom.t')
-rw-r--r-- | t/20push-bottom.t | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/t/20push-bottom.t b/t/20push-bottom.t new file mode 100644 index 0000000..4185ac3 --- /dev/null +++ b/t/20push-bottom.t @@ -0,0 +1,188 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More; + +use Tickit::Test 0.12; + +use Tickit::Widget::Scroller; +use Tickit::Widget::Scroller::Item::Text; + +# TODO: mk_window once Tickit::Test can take a size there too +my ( $term, $rootwin ) = mk_term_and_window cols => 20, lines => 8; +my $win = $rootwin->make_sub( 0, 0, 6, 20 ); + +$rootwin->focus( 7, 0 ); + +my $scroller = Tickit::Widget::Scroller->new( + gravity => "bottom", +); + +$scroller->set_window( $win ); + +flush_tickit; + +is_termlog( [ ( map { GOTO($_,0), SETBG(undef), ERASECH(20) } 0 .. 5 ), + GOTO(7,0) ], + 'Termlog initially' ); + +is_display( [ ], + 'Display initially' ); + +is_cursorpos( 7, 0, 'Cursor position intially' ); + +$scroller->push( + Tickit::Widget::Scroller::Item::Text->new( "A line of text" ), +); + +flush_tickit; + +is_termlog( [ GOTO(0,0), + SETPEN, + PRINT("A line of text"), + SETBG(undef), + ERASECH(6), + GOTO(7,0) ], + 'Termlog after push' ); + +is_display( [ [TEXT("A line of text")] ], + 'Display after push' ); + +is_cursorpos( 7, 0, 'Cursor position after push' ); + +$scroller->push( + map { Tickit::Widget::Scroller::Item::Text->new( "Another line $_" ) } 1 .. 4, +); + +flush_tickit; + +is_termlog( [ GOTO(1,0), + SETPEN, + PRINT("Another line 1"), + SETBG(undef), + ERASECH(6), + GOTO(2,0), + SETPEN, + PRINT("Another line 2"), + SETBG(undef), + ERASECH(6), + GOTO(3,0), + SETPEN, + PRINT("Another line 3"), + SETBG(undef), + ERASECH(6), + GOTO(4,0), + SETPEN, + PRINT("Another line 4"), + SETBG(undef), + ERASECH(6), + GOTO(7,0) ], + 'Termlog after push 4' ); + +is_display( [ [TEXT("A line of text")], + [TEXT("Another line 1")], + [TEXT("Another line 2")], + [TEXT("Another line 3")], + [TEXT("Another line 4")] ], + 'Display after push 4' ); + +is_cursorpos( 7, 0, 'Cursor position after push 4' ); + +$scroller->push( Tickit::Widget::Scroller::Item::Text->new( "An item of text that wraps" ) ); + +flush_tickit; + +is_termlog( [ SETBG(undef), + SCROLLRECT(0,0,6,20, 1,0), + GOTO(4,0), + SETPEN, + PRINT("An item of text that"), + GOTO(5,0), + SETPEN, + PRINT("wraps"), + SETBG(undef), + ERASECH(15), + GOTO(7,0) ], + 'Termlog after push wrapping' ); + +is_display( [ [TEXT("Another line 1")], + [TEXT("Another line 2")], + [TEXT("Another line 3")], + [TEXT("Another line 4")], + [TEXT("An item of text that")], + [TEXT("wraps")] ], + 'Display after push wrapping' ); + +is_cursorpos( 7, 0, 'Cursor position after push wrapping' ); + +$scroller->push( + map { Tickit::Widget::Scroller::Item::Text->new( "Another line $_" ) } 5 .. 10, +); + +flush_tickit; +drain_termlog; + +is_display( [ [TEXT("Another line 5")], + [TEXT("Another line 6")], + [TEXT("Another line 7")], + [TEXT("Another line 8")], + [TEXT("Another line 9")], + [TEXT("Another line 10")] ], + 'Display after push 6' ); + +is_cursorpos( 7, 0, 'Cursor position after push 6' ); + +$scroller->set_window( undef ); + +$scroller->push( Tickit::Widget::Scroller::Item::Text->new( "A line while offscreen" ) ); + +$scroller->set_window( $win ); + +flush_tickit; +drain_termlog; + +is_display( [ [TEXT("Another line 7")], + [TEXT("Another line 8")], + [TEXT("Another line 9")], + [TEXT("Another line 10")], + [TEXT("A line while ")], + [TEXT("offscreen")] ], + 'Display after push while offscreen' ); + +is_cursorpos( 7, 0, 'Cursor position after push while offscreen' ); + +$scroller->scroll_to_top; + +flush_tickit; +drain_termlog; + +is_display( [ [TEXT("A line of text")], + [TEXT("Another line 1")], + [TEXT("Another line 2")], + [TEXT("Another line 3")], + [TEXT("Another line 4")], + [TEXT("An item of text that")] ], + 'Display after scroll_to_top' ); + +is_cursorpos( 7, 0, 'Cursor position after push scroll_to_top' ); + +$scroller->push( + Tickit::Widget::Scroller::Item::Text->new( "Unseen line" ), +); + +is_termlog( [], + 'Termlog empty after push at head' ); + +is_display( [ [TEXT("A line of text")], + [TEXT("Another line 1")], + [TEXT("Another line 2")], + [TEXT("Another line 3")], + [TEXT("Another line 4")], + [TEXT("An item of text that")] ], + 'Display after push at head' ); + +is_cursorpos( 7, 0, 'Cursor position after push at head' ); + +done_testing; |