With this PR the 'layout toggle' command can be passed any combination of valid layout keywords as arguments. They will be activated one after another each time you issue the command, advancing from left to right always selecting the layout after the currently active layout or the leftmost layout if the active layout is not in the argument list. This PR also incorporates the feature request from #2476.
167 lines
5.2 KiB
Perl
167 lines
5.2 KiB
Perl
#!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)
|
|
#
|
|
# Verifies that switching between the different layouts works as expected.
|
|
use i3test;
|
|
|
|
my $tmp = fresh_workspace;
|
|
|
|
open_window;
|
|
open_window;
|
|
cmd 'split v';
|
|
open_window;
|
|
|
|
my ($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout is splitv currently');
|
|
|
|
cmd 'layout stacked';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout tabbed';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle split';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv again');
|
|
|
|
cmd 'layout toggle split';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
cmd 'layout toggle split';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle split';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
cmd 'layout toggle';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout toggle';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
cmd 'layout toggle';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
cmd 'layout toggle all';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle splith splitv';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
cmd 'layout toggle splith splitv';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle stacked splitv tabbed';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle stacking splitv tabbed';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout toggle stacking splitv tabbed';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle splitv i stacking tabbed';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout toggle stacked';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
# this is correct if it does nothing
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle tabbed stacked';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now stacked');
|
|
|
|
# obsoletes 'split' ;)
|
|
cmd 'layout toggle splith splitv';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
# nonsense but works expectedly
|
|
cmd 'layout toggle split split';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle split split';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splith', 'layout now splith');
|
|
|
|
# testing with arbitrary length and garbage
|
|
cmd 'layout toggle stacking splith tabbed splitv stacking';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
cmd 'layout toggle stacking splith garbage tabbed splitv stacking';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle stacking splith garbage tabbed splitv stacking';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'stacked', 'layout now stacked');
|
|
|
|
cmd 'layout toggle splitv splith garbage splitv tabbed stacking splitv';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'splitv', 'layout now splitv');
|
|
|
|
cmd 'layout toggle splitv garbage tabbed';
|
|
($nodes, $focus) = get_ws_content($tmp);
|
|
is($nodes->[1]->{layout}, 'tabbed', 'layout now tabbed');
|
|
|
|
done_testing;
|