summaryrefslogtreecommitdiff
path: root/t/01item-text.t
diff options
context:
space:
mode:
Diffstat (limited to 't/01item-text.t')
-rw-r--r--t/01item-text.t205
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;