summaryrefslogtreecommitdiff
path: root/t/23pop-bottom.t
diff options
context:
space:
mode:
Diffstat (limited to 't/23pop-bottom.t')
-rw-r--r--t/23pop-bottom.t170
1 files changed, 170 insertions, 0 deletions
diff --git a/t/23pop-bottom.t b/t/23pop-bottom.t
new file mode 100644
index 0000000..f9da224
--- /dev/null
+++ b/t/23pop-bottom.t
@@ -0,0 +1,170 @@
+#!/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 );
+
+$scroller->unshift(
+ Tickit::Widget::Scroller::Item::Text->new( "Existing line $_" ),
+) for 1 .. 20;
+
+flush_tickit;
+
+is_termlog( [ ( map { SETBG(undef),
+ SCROLLRECT(0,0,6,20, -1,0) } 1 .. 5, ),
+ ( map { GOTO(6-$_,0),
+ SETPEN,
+ PRINT("Existing line $_"),
+ SETBG(undef),
+ ERASECH(5) } reverse 1 .. 6 ),
+ GOTO(7,0) ],
+ 'Termlog initially' );
+
+is_display( [ [TEXT("Existing line 6")],
+ [TEXT("Existing line 5")],
+ [TEXT("Existing line 4")],
+ [TEXT("Existing line 3")],
+ [TEXT("Existing line 2")],
+ [TEXT("Existing line 1")] ],
+ 'Display initially' );
+
+is_cursorpos( 7, 0, 'Cursor position intially' );
+
+my ( $item ) = $scroller->pop;
+
+isa_ok( $item, "Tickit::Widget::Scroller::Item::Text" );
+
+flush_tickit;
+
+is_termlog( [ SETBG(undef),
+ SCROLLRECT(0,0,6,20, -1,0),
+ GOTO(0,0),
+ SETPEN,
+ PRINT("Existing line 7"),
+ SETBG(undef),
+ ERASECH(5),
+ GOTO(7,0) ],
+ 'Termlog after pop' );
+
+is_display( [ [TEXT("Existing line 7")],
+ [TEXT("Existing line 6")],
+ [TEXT("Existing line 5")],
+ [TEXT("Existing line 4")],
+ [TEXT("Existing line 3")],
+ [TEXT("Existing line 2")] ],
+ 'Display after pop' );
+
+is_cursorpos( 7, 0, 'Cursor position after pop' );
+
+$scroller->pop( 3 );
+
+flush_tickit;
+
+is_termlog( [ SETBG(undef),
+ SCROLLRECT(0,0,6,20, -3,0),
+ GOTO(0,0),
+ SETPEN,
+ PRINT("Existing line 10"),
+ SETBG(undef),
+ ERASECH(4),
+ GOTO(1,0),
+ SETPEN,
+ PRINT("Existing line 9"),
+ SETBG(undef),
+ ERASECH(5),
+ GOTO(2,0),
+ SETPEN,
+ PRINT("Existing line 8"),
+ SETBG(undef),
+ ERASECH(5),
+ GOTO(7,0) ],
+ 'Termlog after pop 3' );
+
+is_display( [ [TEXT("Existing line 10")],
+ [TEXT("Existing line 9")],
+ [TEXT("Existing line 8")],
+ [TEXT("Existing line 7")],
+ [TEXT("Existing line 6")],
+ [TEXT("Existing line 5")] ],
+ 'Display after pop 3' );
+
+is_cursorpos( 7, 0, 'Cursor position after pop 3' );
+
+$scroller->scroll_to_top;
+flush_tickit;
+drain_termlog;
+
+is_display( [ [TEXT("Existing line 20")],
+ [TEXT("Existing line 19")],
+ [TEXT("Existing line 18")],
+ [TEXT("Existing line 17")],
+ [TEXT("Existing line 16")],
+ [TEXT("Existing line 15")] ],
+ 'Display after scroll_to_top' );
+
+$scroller->pop;
+
+flush_tickit;
+
+is_termlog( [],
+ 'Termlog empty after pop at top' );
+
+is_display( [ [TEXT("Existing line 20")],
+ [TEXT("Existing line 19")],
+ [TEXT("Existing line 18")],
+ [TEXT("Existing line 17")],
+ [TEXT("Existing line 16")],
+ [TEXT("Existing line 15")] ],
+ 'Display unchanged after pop at top' );
+
+$scroller->scroll_to_bottom;
+flush_tickit;
+drain_termlog;
+
+is_display( [ [TEXT("Existing line 11")],
+ [TEXT("Existing line 10")],
+ [TEXT("Existing line 9")],
+ [TEXT("Existing line 8")],
+ [TEXT("Existing line 7")],
+ [TEXT("Existing line 6")] ],
+ 'Display after scroll_to_bottom' );
+
+$scroller->pop( 6 );
+
+flush_tickit;
+
+is_termlog( [ ( map { GOTO(17-$_,0),
+ SETPEN,
+ PRINT("Existing line $_"),
+ SETBG(undef),
+ ERASECH(4) } reverse 12 .. 17 ),
+ GOTO(7,0) ],
+ 'Termlog after pop 6 at bottom' );
+
+is_display( [ [TEXT("Existing line 17")],
+ [TEXT("Existing line 16")],
+ [TEXT("Existing line 15")],
+ [TEXT("Existing line 14")],
+ [TEXT("Existing line 13")],
+ [TEXT("Existing line 12")] ],
+ 'Display after pop 6 at bottom' );
+
+done_testing;