X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=testcases%2Ft%2F117-workspace.t;h=04d9b9dd3a58a51ec7acddacfd27aa777d2ad644;hb=6bf7f8ef78f165504ff39f8767e7e11b3fbd8e84;hp=3c52e31eea1399fc8e569ffcbfaf4bd57674b22f;hpb=fabcd7d911de216573848872f6c6574c6353b32b;p=i3%2Fi3 diff --git a/testcases/t/117-workspace.t b/testcases/t/117-workspace.t index 3c52e31e..04d9b9dd 100644 --- a/testcases/t/117-workspace.t +++ b/testcases/t/117-workspace.t @@ -1,6 +1,19 @@ #!perl # vim:ts=4:sw=4:expandtab # +# Please read the following documents before working on tests: +# • http://build.i3wm.org/docs/testsuite.html +# (or docs/testsuite) +# +# • http://build.i3wm.org/docs/lib-i3test.html +# (alternatively: perldoc ./testcases/lib/i3test.pm) +# +# • http://build.i3wm.org/docs/ipc.html +# (or docs/ipc) +# +# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf +# (unless you are already familiar with Perl) +# # Tests whether we can switch to a non-existant workspace # (necessary for further tests) # @@ -117,4 +130,163 @@ $ws = get_ws("aa: $tmp"); ok(defined($ws), "workspace aa: $tmp was created"); is($ws->{num}, -1, 'workspace number is -1'); +################################################################################ +# Check that we can go to workspace "4: foo" with the command +# "workspace number 4". +################################################################################ + +ok(!workspace_exists('4'), 'workspace 4 does not exist'); +ok(!workspace_exists('4: foo'), 'workspace 4: foo does not exist yet'); +cmd 'workspace 4: foo'; +ok(workspace_exists('4: foo'), 'workspace 4: foo was created'); +cmd 'open'; + +cmd 'workspace 3'; +ok(workspace_exists('4: foo'), 'workspace 4: foo still open'); +cmd 'workspace number 4'; +is(focused_ws(), '4: foo', 'now on workspace 4: foo'); +ok(!workspace_exists('4'), 'workspace 4 still does not exist'); + +################################################################################ +# Check that we "workspace number 5" will create workspace 5 if it does not yet +# exist. +################################################################################ + +ok(!workspace_exists('5'), 'workspace 5 does not exist'); +cmd 'workspace number 5'; +ok(workspace_exists('5'), 'workspace 5 was created'); + +################################################################################ +# Check that we can go to workspace "7: foo" with the command +# "workspace number 7: bar", i.e. the additional workspace name is ignored. +################################################################################ + +ok(!workspace_exists('7'), 'workspace 7 does not exist'); +ok(!workspace_exists('7: bar'), 'workspace 7: bar does not exist'); +ok(!workspace_exists('7: foo'), 'workspace 7: foo does not exist yet'); +cmd 'workspace 7: foo'; +ok(workspace_exists('7: foo'), 'workspace 7: foo was created'); +cmd 'open'; + +cmd 'workspace 6'; +ok(workspace_exists('7: foo'), 'workspace 7: foo still open'); +cmd 'workspace number 7: bar'; +is(focused_ws(), '7: foo', 'now on workspace 7: foo'); +ok(!workspace_exists('7'), 'workspace 7 still does not exist'); +ok(!workspace_exists('7: bar'), 'workspace 7: bar still does not exist'); + +################################################################################ +# Check that "workspace number 8: foo" will create workspace "8: foo" if it +# does not yet exist (just like "workspace 8: foo" would). +################################################################################ + +ok(!workspace_exists('8: foo'), 'workspace 8: foo does not exist'); +cmd 'workspace number 8: foo'; +ok(workspace_exists('8: foo'), 'workspace 8: foo was created'); + +################################################################################ +# Verify that renaming workspaces works. +################################################################################ + +sub workspace_numbers_sorted { + my ($name) = @_; + my $i3 = i3(get_socket_path()); + my $tree = $i3->get_tree->recv; + + my @outputs = @{$tree->{nodes}}; + my @workspaces; + for my $output (@outputs) { + my $content = first { $_->{type} eq 'con' } @{$output->{nodes}}; + @workspaces = (@workspaces, @{$content->{nodes}}); + } + + my @numbers = grep { $_ != -1 } map { $_->{num} } @workspaces; + is_deeply( + [ sort { $a <=> $b } @numbers ], + \@numbers, + 'workspace numbers sorted'); +} + +# 1: numbered workspace +cmd 'workspace 10'; +cmd 'open'; +cmd 'workspace 13'; +cmd 'open'; + +workspace_numbers_sorted(); + +cmd 'workspace 9'; +is(focused_ws(), '9', 'now on workspace 9'); + +ok(!workspace_exists('12'), 'workspace 12 does not exist yet'); +cmd 'rename workspace 9 to 12'; +ok(!workspace_exists('9'), 'workspace 9 does not exist anymore'); +is(focused_ws(), '12', 'now on workspace 12'); +$ws = get_ws('12'); +is($ws->{num}, 12, 'number correctly changed'); + +workspace_numbers_sorted(); + +# 2: numbered + named workspace +cmd 'workspace 9: foo'; +is(focused_ws(), '9: foo', 'now on workspace 9: foo'); + +ok(!workspace_exists('11: bar'), 'workspace 11: bar does not exist yet'); +cmd 'rename workspace "9: foo" to "11: bar"'; +ok(!workspace_exists('9: foo'), 'workspace 9 does not exist anymore'); +is(focused_ws(), '11: bar', 'now on workspace 10'); +$ws = get_ws('11: bar'); +is($ws->{num}, 11, 'number correctly changed'); +workspace_numbers_sorted(); +# keep that one open, we need it later +cmd 'open'; + +# 3: named workspace +cmd 'workspace bleh'; +is(focused_ws(), 'bleh', 'now on workspace bleh'); + +ok(!workspace_exists('qux'), 'workspace qux does not exist yet'); +cmd 'rename workspace bleh to qux'; +ok(!workspace_exists('bleh'), 'workspace 9 does not exist anymore'); +is(focused_ws(), 'qux', 'now on workspace qux'); +$ws = get_ws('qux'); +is($ws->{num}, -1, 'number correctly changed'); +workspace_numbers_sorted(); + +# 4: rename current workspace +cmd 'workspace 4711'; +is(focused_ws(), '4711', 'now on workspace 4711'); + +ok(!workspace_exists('42'), 'workspace 42 does not exist yet'); +cmd 'rename workspace to 42'; +ok(!workspace_exists('4711'), 'workspace 4711 does not exist anymore'); +is(focused_ws(), '42', 'now on workspace 42'); +$ws = get_ws('42'); +is($ws->{num}, 42, 'number correctly changed'); +workspace_numbers_sorted(); + +# 5: special cases +cmd 'workspace bla'; +is(focused_ws(), 'bla', 'now on workspace to'); + +ok(!workspace_exists('to'), 'workspace to does not exist yet'); +cmd 'rename workspace bla to to'; +ok(!workspace_exists('bla'), 'workspace bla does not exist anymore'); +is(focused_ws(), 'to', 'now on workspace to'); +cmd 'rename workspace to to bla'; +ok(!workspace_exists('to'), 'workspace to does not exist anymore'); +is(focused_ws(), 'bla', 'now on workspace bla'); +cmd 'rename workspace to to'; +ok(!workspace_exists('bla'), 'workspace bla does not exist anymore'); +is(focused_ws(), 'to', 'now on workspace to'); + +# 6: already existing workspace +my $result = cmd 'rename workspace qux to 11: bar'; +ok(!$result->[0]->{success}, 'renaming workspace to an already existing one failed'); + +# 7: non-existing old workspace (verify command result) +$result = cmd 'rename workspace notexistant to bleh'; +ok(!$result->[0]->{success}, 'renaming workspace which does not exist failed'); + + done_testing;