]> git.sur5r.net Git - i3/i3/commitdiff
make testcases use AnyEvent::I3
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 27 Mar 2010 14:20:38 +0000 (15:20 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 17 Apr 2010 20:40:01 +0000 (22:40 +0200)
12 files changed:
testcases/t/05-ipc.t
testcases/t/06-focus.t
testcases/t/07-move.t
testcases/t/08-focus-stack.t
testcases/t/09-stacking.t
testcases/t/10-dock.t
testcases/t/11-goto.t
testcases/t/12-floating-resize.t
testcases/t/13-urgent.t
testcases/t/14-client-leader.t
testcases/t/15-ipc-workspaces.t
testcases/t/lib/i3test.pm

index ac52911af19d8fb107e62312b3e4b28b77b5ab4c..8f4279389be7c4e90663fa6b0b909b372795d0ba 100644 (file)
@@ -1,7 +1,7 @@
 #!perl
 # vim:ts=4:sw=4:expandtab
 
-use Test::More tests => 4;
+use Test::More tests => 3;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -9,6 +9,7 @@ use Time::HiRes qw(sleep);
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
     use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
@@ -17,19 +18,14 @@ BEGIN {
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-
-isa_ok($sock, 'IO::Socket::UNIX');
-
+my $i3 = i3;
 
 #####################################################################
 # Ensure IPC works by switching workspaces
 #####################################################################
 
 # Switch to the first workspace to get a clean testing environment
-$sock->write(i3test::format_ipc_command("1"));
-
-sleep(0.25);
+$i3->command('1')->recv;
 
 # Create a window so we can get a focus different from NULL
 my $window = i3test::open_standard_window($x);
@@ -41,9 +37,7 @@ my $focus = $x->input_focus;
 diag("old focus = $focus");
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep(0.25);
+$i3->command('9')->recv;
 
 my $new_focus = $x->input_focus;
 isnt($focus, $new_focus, "Focus changed");
index 5ca3e062bd801cf258ec7877745ab273301b652c..a95e0e40b959c2f47b31f94f4a7b4455c4137fd7 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 14;
+use Test::More tests => 13;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -12,29 +12,25 @@ use Time::HiRes qw(sleep);
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep(0.25);
+$i3->command('9')->recv;
 
 #####################################################################
 # Create two windows and make sure focus switching works
 #####################################################################
 
 # Change mode of the container to "default" for following tests
-$sock->write(i3test::format_ipc_command("d"));
-sleep(0.25);
+$i3->command('d')->recv;
 
 my $top = i3test::open_standard_window($x);
 my $mid = i3test::open_standard_window($x);
@@ -52,8 +48,7 @@ diag("bottom id = " . $bottom->id);
 sub focus_after {
     my $msg = shift;
 
-    $sock->write(i3test::format_ipc_command($msg));
-    sleep(0.5);
+    $i3->command($msg)->recv;
     return $x->input_focus;
 }
 
@@ -81,8 +76,7 @@ is($focus, $top->id, "Top window focused (wrapping to the bottom works)");
 ###############################################
 
 # Switch to the 10. workspace
-$sock->write(i3test::format_ipc_command("10"));
-sleep 0.25;
+$i3->command('10')->recv;
 
 $top = i3test::open_standard_window($x);
 $bottom = i3test::open_standard_window($x);
@@ -102,8 +96,7 @@ is($focus, $top->id, "Top window focused");
 # Same thing, but left/right instead of top/bottom
 
 # Switch to the 11. workspace
-$sock->write(i3test::format_ipc_command("11"));
-sleep 0.25;
+$i3->command('11')->recv;
 
 my $left = i3test::open_standard_window($x);
 my $right = i3test::open_standard_window($x);
index 10cb9830d611eac1a4acd33211806085f66a0f43..efd3df15da29ab703908563362142e4218368048 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 10;
+use Test::More tests => 8;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -12,21 +12,18 @@ use Time::HiRes qw(sleep);
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep(0.25);
+$i3->command('9')->recv;
 
 #####################################################################
 # Create two windows and make sure focus switching works
@@ -50,8 +47,7 @@ diag("bottom id = " . $bottom->id);
 sub focus_after {
     my $msg = shift;
 
-    $sock->write(i3test::format_ipc_command($msg));
-    sleep(0.5);
+    $i3->command($msg)->recv;
     return $x->input_focus;
 }
 
@@ -82,9 +78,7 @@ is($focus, $top->id, "Top window focused");
 # Move window cross-workspace
 #####################################################################
 
-$sock->write(i3test::format_ipc_command("m12"));
-$sock->write(i3test::format_ipc_command("t"));
-$sock->write(i3test::format_ipc_command("m13"));
-$sock->write(i3test::format_ipc_command("12"));
-$sock->write(i3test::format_ipc_command("13"));
+for my $cmd (qw(m12 t m13 12 13)) {
+    $i3->command($cmd)->recv;
+}
 ok(1, "Still living");
index 370369d8697bae3663cadab4addd3ccde8a6c4a9..4ae924070e4c7dca84c33e1297a21dac8ee6141d 100644 (file)
@@ -3,7 +3,7 @@
 # Checks if the focus is correctly restored, when creating a floating client
 # over an unfocused tiling client and destroying the floating one again.
 
-use Test::More tests => 6;
+use Test::More tests => 4;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -11,28 +11,25 @@ use Time::HiRes qw(sleep);
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Window') or BAIL_OUT('Could not load X11::XCB::Window');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep(0.25);
+$i3->command('9')->recv;
 
 my $tiled_left = i3test::open_standard_window($x);
 my $tiled_right = i3test::open_standard_window($x);
 
 sleep(0.25);
 
-$sock->write(i3test::format_ipc_command("ml"));
+$i3->command('ml')->recv;
 
 # Get input focus before creating the floating window
 my $focus = $x->input_focus;
index 8f40047e324aad71008ab65ef3368f32df070b67..59d2e6f467119308f61875c21bae592b734e044a 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 24;
+use Test::More tests => 22;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -12,21 +12,18 @@ use Time::HiRes qw(sleep);
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep(0.25);
+$i3->command('9')->recv;
 
 #####################################################################
 # Create two windows and make sure focus switching works
@@ -50,8 +47,7 @@ diag("bottom id = " . $bottom->id);
 sub focus_after {
     my $msg = shift;
 
-    $sock->write(i3test::format_ipc_command($msg));
-    sleep(0.25);
+    $i3->command($msg)->recv;
     return $x->input_focus;
 }
 
index b1b7bfcb6415b7c73235ada7736e41e99d94ef13..5206313133a4ee0453f1ea6b87567e216891771b 100644 (file)
@@ -12,7 +12,6 @@ use i3test;
 use List::Util qw(first);
 
 BEGIN {
-    #use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
index 476759036e95d95787c672f979057018ae306410..9b06112b172832af6e18bad9f214f6c9a959d04e 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 9;
+use Test::More tests => 7;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -13,21 +13,18 @@ use FindBin;
 use Digest::SHA1 qw(sha1_base64);
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep(0.25);
+$i3->command('9')->recv;
 
 #####################################################################
 # Create two windows and make sure focus switching works
@@ -51,8 +48,7 @@ diag("bottom id = " . $bottom->id);
 sub focus_after {
     my $msg = shift;
 
-    $sock->write(i3test::format_ipc_command($msg));
-    sleep(0.5);
+    $i3->command($msg)->recv;
     return $x->input_focus;
 }
 
@@ -74,7 +70,7 @@ my $random_mark = sha1_base64(rand());
 $focus = focus_after("goto $random_mark");
 is($focus, $mid->id, "focus unchanged");
 
-$sock->write(i3test::format_ipc_command("mark $random_mark"));
+$i3->command("mark $random_mark")->recv;
 
 $focus = focus_after("k");
 is($focus, $top->id, "Top window focused");
index d908d345b0066b3f261553be8aa4cf8749ab517d..74f66535013c12e11a5ac5f816467dd0bf080dbb 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 17;
+use Test::More tests => 15;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -13,21 +13,18 @@ use FindBin;
 use Digest::SHA1 qw(sha1_base64);
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep 0.25;
+$i3->command('9')->recv;
 
 #####################################################################
 # Create a floating window and see if resizing works
@@ -78,13 +75,11 @@ sub test_resize {
 test_resize;
 
 # Test borderless
-$sock->write(i3test::format_ipc_command("bb"));
-sleep 0.25;
+$i3->command('bb')->recv;
 
 test_resize;
 
 # Test with 1-px-border
-$sock->write(i3test::format_ipc_command("bp"));
-sleep 0.25;
+$i3->command('bp')->recv;
 
 test_resize;
index 7dee21c624979e5d3ea0a0a211cb5aa18c28b1cb..5fce6aeeccc08a4690d9b89007eb6e519e3c96b3 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 9;
+use Test::More tests => 7;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -13,21 +13,18 @@ use FindBin;
 use Digest::SHA1 qw(sha1_base64);
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
 
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep 0.25;
+$i3->command('9')->recv;
 
 #####################################################################
 # Create two windows and put them in stacking mode
@@ -38,8 +35,7 @@ sleep 0.25;
 my $bottom = i3test::open_standard_window($x);
 sleep 0.25;
 
-$sock->write(i3test::format_ipc_command("s"));
-sleep 0.25;
+$i3->command('s')->recv;
 
 #####################################################################
 # Add the urgency hint, switch to a different workspace and back again
@@ -47,12 +43,9 @@ sleep 0.25;
 $top->add_hint('urgency');
 sleep 1;
 
-$sock->write(i3test::format_ipc_command("1"));
-sleep 0.25;
-$sock->write(i3test::format_ipc_command("9"));
-sleep 0.25;
-$sock->write(i3test::format_ipc_command("1"));
-sleep 0.25;
+$i3->command('1')->recv;
+$i3->command('9')->recv;
+$i3->command('1')->recv;
 
 my $std = i3test::open_standard_window($x);
 sleep 0.25;
index ead52764c0c38c350aa95b96c0d825a32a239a29..b9160131e76afb88e7eba48020ee97dc7ab41241 100644 (file)
@@ -4,7 +4,7 @@
 # the workspace to be empty).
 # TODO: skip it by default?
 
-use Test::More tests => 5;
+use Test::More tests => 3;
 use Test::Deep;
 use X11::XCB qw(:all);
 use Data::Dumper;
@@ -13,21 +13,17 @@ use FindBin;
 use Digest::SHA1 qw(sha1_base64);
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
 BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
     use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
 }
 
 my $x = X11::XCB::Connection->new;
-
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 # Switch to the nineth workspace
-$sock->write(i3test::format_ipc_command("9"));
-
-sleep 0.25;
+$i3->command('9')->recv;
 
 #####################################################################
 # Create a parent window
@@ -48,8 +44,7 @@ sleep 0.25;
 # Switch workspace to 10 and open a child window. It should be positioned
 # on workspace 9.
 #########################################################################
-$sock->write(i3test::format_ipc_command("10"));
-sleep 0.25;
+$i3->command('10')->recv;
 
 my $child = $x->root->create_child(
 class => WINDOW_CLASS_INPUT_OUTPUT,
@@ -66,7 +61,6 @@ sleep 0.25;
 isnt($x->input_focus, $child->id, "Child window focused");
 
 # Switch back
-$sock->write(i3test::format_ipc_command("9"));
-sleep 0.25;
+$i3->command('9')->recv;
 
 is($x->input_focus, $child->id, "Child window focused");
index 0194709460a535b9fa07096ac0c47c27a1c1015b..4e2c0e8daf5e5b2b96f50bf9b8f4cfc02350004e 100644 (file)
@@ -1,52 +1,21 @@
 #!perl
 # vim:ts=4:sw=4:expandtab
 
-use Test::More tests => 8;
+use Test::More tests => 3;
 use Test::Exception;
-use Data::Dumper;
-use JSON::XS;
 use List::MoreUtils qw(all);
 use FindBin;
 use lib "$FindBin::Bin/lib";
 use i3test;
+use AnyEvent::I3;
 
-BEGIN {
-    use_ok('IO::Socket::UNIX') or BAIL_OUT('Cannot load IO::Socket::UNIX');
-    use_ok('X11::XCB::Connection') or BAIL_OUT('Cannot load X11::XCB::Connection');
-}
-
-my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
-isa_ok($sock, 'IO::Socket::UNIX');
+my $i3 = i3;
 
 ####################
 # Request workspaces
 ####################
 
-# message type 1 is GET_WORKSPACES
-my $message = "i3-ipc" . pack("LL", 0, 1);
-$sock->write($message);
-
-#######################################
-# Test the reply format for correctness
-#######################################
-
-# The following lines duplicate functionality from recv_ipc_command
-# to have it included in the test-suite.
-my $buffer;
-$sock->read($buffer, length($message));
-is(substr($buffer, 0, length("i3-ipc")), "i3-ipc", "ipc message received");
-my ($len, $type) = unpack("LL", substr($buffer, 6));
-is($type, 1, "correct reply type");
-
-# read the payload
-$sock->read($buffer, $len);
-my $workspaces;
-
-#########################
-# Actually test the reply
-#########################
-
-lives_ok { $workspaces = decode_json($buffer) } 'JSON could be decoded';
+my $workspaces = $i3->get_workspaces->recv;
 
 ok(@{$workspaces} > 0, "More than zero workspaces found");
 
index e98685f710fcc00fe508f17497bb652eaa278c83..684e8118977464fdb4ea77aa1c13995a42afaa00 100644 (file)
@@ -35,35 +35,6 @@ sub open_standard_window {
     return $window;
 }
 
-sub format_ipc_command {
-    my $msg = shift;
-    my $len;
-
-    { use bytes; $len = length($msg); }
-
-    my $message = "i3-ipc" . pack("LL", $len, 0) . $msg;
-
-    return $message;
-}
-
-sub recv_ipc_command {
-    my ($sock, $expected) = @_;
-
-    my $buffer;
-    # header is 14 bytes ("i3-ipc" + 32 bit + 32 bit)
-    $sock->read($buffer, 14);
-    return undef unless substr($buffer, 0, length("i3-ipc")) eq "i3-ipc";
-
-    my ($len, $type) = unpack("LL", substr($buffer, 6));
-
-    return undef unless $type == $expected;
-
-    # read the payload
-    $sock->read($buffer, $len);
-
-    decode_json($buffer)
-}
-
 sub get_workspace_names {
     my $i3 = i3("/tmp/nestedcons");
     # TODO: use correct command as soon as AnyEvent::i3 is updated