The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

use Test::More;
use Prima::Test;

plan tests => 3;

reset_flag;
my @keydata = ();
my $window = create_window;
my $c = $window-> insert( Widget =>
	onCreate  => \&set_flag,
	onDestroy => \&set_flag,
	onKeyDown => sub { set_flag; push( @keydata, [@_]); },
	onKeyUp   => sub { set_flag; push( @keydata, [ $_[0]-> get_shift_state, @_])  },
);

$c-> key_event( cm::KeyDown, ord(' '), kb::Space, 0, 1, 0);
@keydata = grep { scalar @$_ == 5 && $$_[1] == ord(' ') && $$_[2] == kb::Space && $$_[3] == 0} @keydata;
ok( get_flag && scalar @keydata, "send" );
@keydata = ();

$c-> key_event( cm::KeyDown, ord(' '), kb::Space, 0, 1, 1);
reset_flag;
my $ww = wait_flag;
@keydata = grep {  scalar @$_ == 5 && $$_[1] == ord(' ') && $$_[2] == kb::Space && $$_[3] == 0} @keydata;
ok( $ww && scalar @keydata, "post" );
@keydata = ();

$c-> key_event( cm::KeyUp, 0, kb::Down, km::Ctrl|km::Shift, 1, 0);
@keydata = grep { scalar @$_ == 5 && $$_[3] == kb::Down && $$_[4] == (km::Ctrl|km::Shift) } @keydata;
ok(get_flag && scalar @keydata, "simulation" );
@keydata = ();

$c-> destroy;