AnyEvent-Tickit

 view release on metacpan or  search on metacpan

t/02input.t  view on Meta::CPAN

#!/usr/bin/perl

use strict;
use warnings;

# We need a UTF-8 locale to force libtermkey into UTF-8 handling, even if the
# system locale is not
# We also need to fool libtermkey into believing TERM=xterm even if it isn't,
# so we can reliably control it with fake escape sequences
BEGIN {
   $ENV{LANG} .= ".UTF-8" unless $ENV{LANG} =~ m/\.UTF-8$/;
   $ENV{TERM} = "xterm";
}

use Test::More;

use AnyEvent;
use AnyEvent::Util qw( portable_pipe );

use AnyEvent::Tickit;

my $loop = AE::cv;

my ( $term_rd, $my_wr ) = portable_pipe or die "Cannot pipepair - $!";
open my $term_wr, ">", \my $output;

my $tickit = AnyEvent::Tickit->new(
   cv => $loop,
   UTF8     => 1,
   term_in  => $term_rd,
   term_out => $term_wr,
);

{
   my @key_events;

   # We can't get at the key/mouse events easily from outside, so we'll hack it

   no warnings 'redefine';
   local *Tickit::on_key = sub {
      my ( $self, $keyev ) = @_;
      push @key_events, $keyev;
   };

   $my_wr->syswrite( "h" );

   undef @key_events;
   do { AnyEvent->_poll } until ( @key_events );

   is_deeply( \@key_events, [ { type => "text", str => "h", mod => 0 } ], 'on_key h' );

   $my_wr->syswrite( "\cA" );

   undef @key_events;
   do { AnyEvent->_poll } until ( @key_events );

   is_deeply( \@key_events, [ { type => "key", str => "C-a", mod => 4 } ], 'on_key Ctrl-A' );

   $my_wr->syswrite( "\eX" );

   undef @key_events;
   do { AnyEvent->_poll } until ( @key_events );

   is_deeply( \@key_events, [ { type => "key", str => "M-X", mod => 2 } ], 'on_key Alt-X' );

   $my_wr->syswrite( "\e" );
   # 10msec should be enough for us to have to wait but short enough for



( run in 1.653 second using v1.01-cache-2.11-cpan-ceb78f64989 )