summaryrefslogtreecommitdiff
path: root/t/30indicator.t
diff options
context:
space:
mode:
Diffstat (limited to 't/30indicator.t')
-rw-r--r--t/30indicator.t143
1 files changed, 143 insertions, 0 deletions
diff --git a/t/30indicator.t b/t/30indicator.t
new file mode 100644
index 0000000..1a7502e
--- /dev/null
+++ b/t/30indicator.t
@@ -0,0 +1,143 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use Tickit::Test;
+
+use Tickit::Widget::Scroller;
+use Tickit::Widget::Scroller::Item::Text;
+# These tests depend on the new Window rendering behaviour added in Tickit 0.43
+# but the actual functionallity will work fine before that
+eval { require Tickit::Window; Tickit::Window->VERSION( '0.43' ) }
+ or plan skip_all => "Tickit::Window older than 0.43; these tests won't work";
+
+my $win = mk_window;
+
+my $scroller = Tickit::Widget::Scroller->new(
+ gen_top_indicator => sub {
+ my $self = shift;
+ # TODO: This is a fragile API, needs fixing
+ return sprintf "-- Start{%d/%d} items{%d} --",
+ $self->{start_item}, $self->{start_partial}, scalar @{ $self->{items} };
+ },
+);
+
+$scroller->push(
+ map { Tickit::Widget::Scroller::Item::Text->new( "Line $_ of content" ) } 1 .. 50
+);
+
+$scroller->set_window( $win );
+flush_tickit;
+
+# At Tickit::Window 0.44, rendering is done in one go.
+if( $Tickit::Window::VERSION >= '0.44' ) {
+ is_termlog( [ GOTO(0,0),
+ SETPEN,
+ PRINT("Line 1 of content"),
+ SETBG(undef),
+ ERASECH(37,1),
+ SETPEN(rv=>1),
+ PRINT("-- Start{0/0} items{50} --"),
+
+ ( map { GOTO($_-1,0),
+ SETPEN,
+ PRINT("Line $_ of content"),
+ SETBG(undef),
+ ERASECH(64-length $_), } 2 .. 25 ) ],
+ 'Termlog initially' );
+}
+else {
+ is_termlog( [ GOTO(0,0),
+ SETPEN,
+ PRINT("Line 1 of content"),
+ SETBG(undef),
+ ERASECH(37),
+ ( map { GOTO($_-1,0),
+ SETPEN,
+ PRINT("Line $_ of content"),
+ SETBG(undef),
+ ERASECH(64-length $_), } 2 .. 25 ),
+ GOTO(0,54),
+ SETPEN(rv=>1),
+ PRINT("-- Start{0/0} items{50} --") ],
+ 'Termlog initially' );
+}
+
+is_display( [ [TEXT("Line 1 of content" . (" "x37)), TEXT("-- Start{0/0} items{50} --",rv=>1) ],
+ map { "Line $_ of content" } 2 .. 25 ],
+ 'Display initially' );
+
+$scroller->scroll( 2 );
+flush_tickit;
+
+if( $Tickit::Window::VERSION >= '0.44' ) {
+ is_termlog( [ SETPEN,
+ SCROLLRECT(1,0,24,80,2,0),
+ GOTO(0,0),
+ SETPEN,
+ PRINT("Line 3 of content"),
+ SETBG(undef),
+ ERASECH(37,1),
+ SETPEN(rv=>1),
+ PRINT("-- Start{2/0} items{50} --"),
+ ( map { GOTO($_-3,0),
+ SETPEN,
+ PRINT("Line $_ of content"),
+ SETBG(undef),
+ ERASECH(64-length $_), } 26 .. 27 ) ],
+ 'Termlog after ->scroll' );
+}
+else {
+ is_termlog( [ SETPEN,
+ SCROLLRECT(1,0,24,80,2,0),
+ GOTO(0,0),
+ SETPEN,
+ PRINT("Line 3 of content"),
+ SETBG(undef),
+ ERASECH(37),
+ GOTO(0,54),
+ SETPEN(rv=>1),
+ PRINT("-- Start{2/0} items{50} --"),
+ ( map { GOTO($_-3,0),
+ SETPEN,
+ PRINT("Line $_ of content"),
+ SETBG(undef),
+ ERASECH(64-length $_), } 26 .. 27 ) ],
+ 'Termlog after ->scroll' );
+}
+
+is_display( [ [TEXT("Line 3 of content" . (" "x37)), TEXT("-- Start{2/0} items{50} --",rv=>1) ],
+ map { "Line $_ of content" } 4 .. 27 ],
+ 'Display after ->scroll' );
+
+$scroller->set_gen_top_indicator( undef );
+flush_tickit;
+
+is_termlog( [ GOTO(0,54),
+ SETPEN,
+ ERASECH(26) ],
+ 'Termlog after removing top indicator' );
+
+is_display( [ map { "Line $_ of content" } 3 .. 27 ],
+ 'Display after removing top indicator' );
+
+$scroller->set_gen_bottom_indicator( sub {
+ my $self = shift;
+ defined $self->item2line( -1, -1 ) ? undef : "-- more --"
+} );
+
+flush_tickit;
+
+is_termlog( [ GOTO(24,70),
+ SETPEN(rv=>1),
+ PRINT("-- more --") ],
+ 'Termlog after setting bottom indicator' );
+
+is_display( [ ( map { "Line $_ of content" } 3 .. 26 ),
+ [TEXT("Line 27 of content" . (" "x52)), TEXT("-- more --",rv=>1) ] ],
+ 'Display after setting bottom indicator' );
+
+done_testing;