Implement the tick event

This makes our tests less flaky, shorter, and more readable.

fixes #2988
This commit is contained in:
Michael Stapelberg
2017-09-24 15:40:30 +02:00
parent 14c8cf8622
commit ce21de8dde
29 changed files with 457 additions and 734 deletions

View File

@ -18,27 +18,16 @@
# Ticket: #2501
use i3test;
my ($i3, $timer, $event, $mark);
sub mark_subtest {
my ($cmd) = @_;
$i3 = i3(get_socket_path());
$i3->connect()->recv;
my @events = events_for(
sub { cmd $cmd },
'window');
$i3->subscribe({
window => sub {
my ($event) = @_;
return unless defined $mark;
return unless $event->{change} eq 'mark';
$mark->send($event);
}
})->recv;
$timer = AnyEvent->timer(
after => 0.5,
cb => sub {
$mark->send(0);
}
);
my @mark = grep { $_->{change} eq 'mark' } @events;
is(scalar @mark, 1, 'Received 1 window::mark event');
}
###############################################################################
# Marking a container triggers a 'mark' event.
@ -46,11 +35,7 @@ $timer = AnyEvent->timer(
fresh_workspace;
open_window;
$mark = AnyEvent->condvar;
cmd 'mark x';
$event = $mark->recv;
ok($event, 'window::mark event has been received');
subtest 'mark', \&mark_subtest, 'mark x';
###############################################################################
# Unmarking a container triggers a 'mark' event.
@ -59,11 +44,7 @@ fresh_workspace;
open_window;
cmd 'mark x';
$mark = AnyEvent->condvar;
cmd 'unmark x';
$event = $mark->recv;
ok($event, 'window::mark event has been received');
subtest 'unmark', \&mark_subtest, 'unmark x';
###############################################################################