]> git.sur5r.net Git - i3/i3/blob - testcases/t/199-ipc-mode-event.t
Merge branch 'master' into next
[i3/i3] / testcases / t / 199-ipc-mode-event.t
1 #!perl
2 # vim:ts=4:sw=4:expandtab
3 #
4 # Please read the following documents before working on tests:
5 # • http://build.i3wm.org/docs/testsuite.html
6 #   (or docs/testsuite)
7 #
8 # • http://build.i3wm.org/docs/lib-i3test.html
9 #   (alternatively: perldoc ./testcases/lib/i3test.pm)
10 #
11 # • http://build.i3wm.org/docs/ipc.html
12 #   (or docs/ipc)
13 #
14 # • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
15 #   (unless you are already familiar with Perl)
16 #
17 # Verifies that the IPC 'mode' event is sent when modes are changed.
18 use i3test i3_autostart => 0;
19
20 my $config = <<EOT;
21 # i3 config file (v4)
22 font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
23
24 mode "m1" {
25     bindsym Mod1+x nop foo
26 }
27
28 mode "with spaces" {
29     bindsym Mod1+y nop bar
30 }
31 EOT
32
33 my $pid = launch_with_config($config);
34
35 my $i3 = i3(get_socket_path(0));
36 $i3->connect->recv;
37
38 my $cv = AnyEvent->condvar;
39
40 $i3->subscribe({
41     mode => sub {
42         my ($event) = @_;
43         $cv->send($event->{change} eq 'm1');
44     }
45 })->recv;
46
47 cmd 'mode "m1"';
48
49 # Timeout after 0.5s
50 my $t;
51 $t = AnyEvent->timer(after => 0.5, cb => sub { $cv->send(0); });
52
53 ok($cv->recv, 'Mode event received');
54
55 exit_gracefully($pid);
56
57 done_testing;