tests: lib/i3test: provide wait_for_map and wait_for_unmap
These functions should be used instead of calling wait_for_event directly when waiting for MAP_NOTIFY or UNMAP_NOTIFY
This commit is contained in:
parent
38a9eabff1
commit
4821b13cae
|
@ -36,6 +36,9 @@ our @EXPORT = qw(
|
||||||
focused_ws
|
focused_ws
|
||||||
get_socket_path
|
get_socket_path
|
||||||
launch_with_config
|
launch_with_config
|
||||||
|
wait_for_event
|
||||||
|
wait_for_map
|
||||||
|
wait_for_unmap
|
||||||
);
|
);
|
||||||
|
|
||||||
my $tester = Test::Builder->new();
|
my $tester = Test::Builder->new();
|
||||||
|
@ -99,12 +102,28 @@ sub wait_for_event {
|
||||||
};
|
};
|
||||||
|
|
||||||
# Trigger timeout after $timeout seconds (can be fractional)
|
# Trigger timeout after $timeout seconds (can be fractional)
|
||||||
my $timeout = AE::timer $timeout, 0, sub { say STDERR "timeout"; $cv->send(0) };
|
my $timeout = AE::timer $timeout, 0, sub { warn "timeout"; $cv->send(0) };
|
||||||
|
|
||||||
my $result = $cv->recv;
|
my $result = $cv->recv;
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# thin wrapper around wait_for_event which waits for MAP_NOTIFY
|
||||||
|
# make sure to include 'structure_notify' in the window’s event_mask attribute
|
||||||
|
sub wait_for_map {
|
||||||
|
my ($x) = @_;
|
||||||
|
wait_for_event $x, 1, sub { $_[0]->{response_type} == MAP_NOTIFY };
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wrapper around wait_for_event which waits for UNMAP_NOTIFY. Also calls
|
||||||
|
# sync_with_i3 to make sure i3 also picked up and processed the UnmapNotify
|
||||||
|
# event.
|
||||||
|
sub wait_for_unmap {
|
||||||
|
my ($x) = @_;
|
||||||
|
wait_for_event $x, 1, sub { $_[0]->{response_type} == UNMAP_NOTIFY };
|
||||||
|
sync_with_i3($x);
|
||||||
|
}
|
||||||
|
|
||||||
sub open_standard_window {
|
sub open_standard_window {
|
||||||
my ($x, $color, $floating) = @_;
|
my ($x, $color, $floating) = @_;
|
||||||
|
|
||||||
|
@ -286,7 +305,7 @@ sub sync_with_i3 {
|
||||||
wait_for_event $x, 0.5, sub { $_[0]->{response_type} == MAP_NOTIFY };
|
wait_for_event $x, 0.5, sub { $_[0]->{response_type} == MAP_NOTIFY };
|
||||||
}
|
}
|
||||||
|
|
||||||
my $root = $x->root->id;
|
my $root = $x->get_root_window();
|
||||||
# Generate a random number to identify this particular ClientMessage.
|
# Generate a random number to identify this particular ClientMessage.
|
||||||
my $myrnd = int(rand(255)) + 1;
|
my $myrnd = int(rand(255)) + 1;
|
||||||
|
|
||||||
|
@ -386,7 +405,7 @@ sub launch_with_config {
|
||||||
# one test case.
|
# one test case.
|
||||||
my $i3cmd = "exec " . abs_path("../i3") . " -V -d all --disable-signalhandler -c $tmpfile >>$ENV{LOGPATH} 2>&1";
|
my $i3cmd = "exec " . abs_path("../i3") . " -V -d all --disable-signalhandler -c $tmpfile >>$ENV{LOGPATH} 2>&1";
|
||||||
my $process = Proc::Background->new($i3cmd);
|
my $process = Proc::Background->new($i3cmd);
|
||||||
sleep 1;
|
sleep 1.25;
|
||||||
|
|
||||||
# force update of the cached socket path in lib/i3test
|
# force update of the cached socket path in lib/i3test
|
||||||
get_socket_path(0);
|
get_socket_path(0);
|
||||||
|
|
Loading…
Reference in New Issue