summaryrefslogtreecommitdiff
path: root/t/02item-richtext.t
diff options
context:
space:
mode:
Diffstat (limited to 't/02item-richtext.t')
-rw-r--r--t/02item-richtext.t123
1 files changed, 123 insertions, 0 deletions
diff --git a/t/02item-richtext.t b/t/02item-richtext.t
new file mode 100644
index 0000000..a081465
--- /dev/null
+++ b/t/02item-richtext.t
@@ -0,0 +1,123 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use Tickit::Test;
+use Tickit::RenderBuffer;
+
+use String::Tagged;
+use Tickit::Widget::Scroller::Item::RichText;
+
+my $term = mk_term;
+
+my $rb = Tickit::RenderBuffer->new( lines => $term->lines, cols => $term->cols );
+
+my $str = String::Tagged->new( "My message here" );
+$str->apply_tag( 3, 7, b => 1 );
+$str->apply_tag( 11, 4, u => 1 );
+
+my $item = Tickit::Widget::Scroller::Item::RichText->new( $str );
+
+isa_ok( $item, "Tickit::Widget::Scroller::Item::Text", '$item' );
+
+is_deeply( [ $item->chunks ],
+ [ [ "My ", 3, pen => Tickit::Pen->new() ],
+ [ "message", 7, pen => Tickit::Pen->new( b => 1 ) ],
+ [ " ", 1, pen => Tickit::Pen->new() ],
+ [ "here", 4, pen => Tickit::Pen->new( u => 1 ) ] ],
+ '$item->chunks' );
+
+is( $item->height_for_width( 80 ), 1, 'height_for_width 80' );
+
+$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 "),
+ SETPEN(b => 1),
+ PRINT("message"),
+ SETPEN,
+ PRINT(" "),
+ SETPEN(u => 1),
+ PRINT("here"),
+ SETBG(undef),
+ ERASECH(65) ],
+ 'Termlog for render fullwidth' );
+
+is_display( [ [TEXT("My "), TEXT("message",b=>1), BLANK(1), TEXT("here",u=>1)] ],
+ 'Display for render fullwidth' );
+
+# Linefeeds
+{
+ $term->clear;
+ drain_termlog;
+
+ my $str = String::Tagged->new( "Another message\nwith linefeeds" );
+ $str->apply_tag( 8, 12, b => 1 );
+
+ my $item = Tickit::Widget::Scroller::Item::RichText->new( $str );
+
+ is_deeply( [ $item->chunks ],
+ [ [ "Another ", 8, pen => Tickit::Pen->new() ],
+ [ "message", 7, pen => Tickit::Pen->new( b => 1 ), linebreak => 1 ],
+ [ "with", 4, pen => Tickit::Pen->new( b => 1 ) ],
+ [ " linefeeds", 10, pen => Tickit::Pen->new() ] ],
+ '$item->chunks with linefeeds' );
+}
+
+# Word wrapping on pen changes
+{
+ $term->clear;
+ drain_termlog;
+
+ my $str = String::Tagged->new;
+ foreach my $colour (qw( red blue green yellow )) {
+ $str->append_tagged( $colour, fg => $colour );
+ $str->append( " " );
+ }
+
+ my $item = Tickit::Widget::Scroller::Item::RichText->new( $str );
+
+ is( $item->height_for_width( 18 ), 2, 'height_for_width 18 for wrapping pen change' );
+
+ $item->render( $rb, top => 0, firstline => 0, lastline => 1, width => 18, height => 2 );
+ $rb->flush_to_term( $term );
+
+ flush_tickit;
+
+ is_termlog( [ GOTO(0,0),
+ SETPEN(fg=>1),
+ PRINT("red"),
+ SETPEN,
+ PRINT(" "),
+ SETPEN(fg=>4),
+ PRINT("blue"),
+ SETPEN,
+ PRINT(" "),
+ SETPEN(fg=>2),
+ PRINT("green"),
+ SETPEN,
+ PRINT(" "),
+ SETPEN,
+ ERASECH(3),
+ GOTO(1,0),
+ SETPEN(fg=>3),
+ PRINT("yellow"),
+ SETPEN,
+ PRINT(" "),
+ SETPEN,
+ ERASECH(11) ],
+ 'Termlog for render wrapping pen change' );
+
+ is_display( [ [TEXT("red",fg=>1), BLANK(1), TEXT("blue",fg=>4), BLANK(1), TEXT("green",fg=>2)],
+ [TEXT("yellow",fg=>3)] ],
+ 'Display for render wrapping pen change' );
+}
+
+done_testing;