]> git.sur5r.net Git - i3/i3/commitdiff
workspace events test
authorFrancesco Mazzoli <f@mazzo.li>
Sat, 3 Nov 2012 11:17:33 +0000 (11:17 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 13 Nov 2012 08:40:29 +0000 (09:40 +0100)
testcases/t/115-ipc-workspaces.t

index ec2ec9d2a242f948ffb105c81e5ba4f9ebce229e..1dd12417c15e5675b3a8fb03c019849241e496b6 100644 (file)
@@ -18,20 +18,62 @@ use i3test;
 
 my $i3 = i3(get_socket_path());
 
-####################
-# Request workspaces
-####################
-
-SKIP: {
-    skip "IPC API not yet stabilized", 2;
+################################
+# Workspaces requests and events
+################################
 
 my $workspaces = $i3->get_workspaces->recv;
 
 ok(@{$workspaces} > 0, "More than zero workspaces found");
 
-#my $name_exists = all { defined($_->{name}) } @{$workspaces};
-#ok($name_exists, "All workspaces have a name");
+# my $name_exists = all { defined($_->{name}) } @{$workspaces};
+# ok($name_exists, "All workspaces have a name");
 
+# Focused workspace
+my $focused;
+foreach (@{$workspaces}) {
+    $focused = $_ if $_->{focused};
 }
+ok($focused, "At least one workspace is focused");
+
+# Events
+
+# We are switching to an empty workpspace from an empty workspace, so we expect
+# to receive "init", "focus", and "empty".
+my $init = AnyEvent->condvar;
+my $focus = AnyEvent->condvar;
+my $empty = AnyEvent->condvar;
+$i3->subscribe({
+    workspace => sub {
+        my ($event) = @_;
+        if ($event->{change} eq 'init') {
+            $init->send(1);
+        } elsif ($event->{change} eq 'focus') {
+            # Check that we have the old and new workspace
+            $focus->send(
+                $event->{current}->{name} == '2' &&
+                $event->{old}->{name} == $focused->{name}
+            );
+        } elsif ($event->{change} eq 'empty') {
+            $empty->send(1);
+        }
+    }
+})->recv;
+
+cmd 'workspace 2';
+
+my $t;
+$t = AnyEvent->timer(
+    after => 0.5,
+    cb => sub {
+        $init->send(0);
+        $focus->send(0);
+        $empty->send(0);
+    }
+);
+
+ok($init->recv, 'Workspace "init" event received');
+ok($focus->recv, 'Workspace "focus" event received');
+ok($empty->recv, 'Workspace "empty" event received');
 
 done_testing;