1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
#!/usr/bin/perl
use v5.14;
use warnings;
use Test::More;
use Tickit::Test;
use Tickit::Widget::Entry;
use Tickit::Widget::Entry::Plugin::History;
my $win = mk_window;
my $entered;
my $entry = Tickit::Widget::Entry->new(
on_enter => sub { ( undef, $entered ) = @_; },
);
my @history;
Tickit::Widget::Entry::Plugin::History->apply( $entry,
storage => \@history,
);
$entry->set_window( $win );
flush_tickit;
sub presskeys
{
my ( $text ) = @_;
foreach my $chr ( split //, $text ) {
presskey( $chr eq "\n" ?
( key => "Enter" ) :
( text => $chr )
);
}
}
# initial entry
{
presskeys "hello";
flush_tickit;
is_display( [ "hello" ],
'Display after initial typing' );
presskeys "\n";
flush_tickit;
is_display( [ ],
'Display after initial entry' );
is( $entered, "hello", 'on_enter invoked' );
is_deeply( \@history, [ "hello" ], 'storage after initial entry' );
}
# Enter more for history
presskeys "more\n";
presskeys "text\n";
is_deeply( \@history, [ "hello", "more", "text" ],
'storage after more entries' );
# replay
{
presskey key => "Up";
flush_tickit;
is_display( [ "text" ],
'Display after history replay' );
presskey key => "Up";
flush_tickit;
is_display( [ "more" ],
'Display after history replay further' );
presskey key => "Down";
flush_tickit;
is_display( [ "text" ],
'Display after history replay down' );
undef $entered;
presskeys "\n";
flush_tickit;
is_display( [ ],
'Display after replay commit' );
is( $entered, "text", 'on_enter invoked' );
}
done_testing;
|