95 lines
2.4 KiB
Perl
95 lines
2.4 KiB
Perl
|
#!perl
|
||
|
# vim:ts=4:sw=4:expandtab
|
||
|
#
|
||
|
# Please read the following documents before working on tests:
|
||
|
# • https://build.i3wm.org/docs/testsuite.html
|
||
|
# (or docs/testsuite)
|
||
|
#
|
||
|
# • https://build.i3wm.org/docs/lib-i3test.html
|
||
|
# (alternatively: perldoc ./testcases/lib/i3test.pm)
|
||
|
#
|
||
|
# • https://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)
|
||
|
#
|
||
|
# Contains various tests that use the cmp_tree subroutine.
|
||
|
# Ticket: #3503
|
||
|
use i3test;
|
||
|
|
||
|
sub sanity_check {
|
||
|
local $Test::Builder::Level = $Test::Builder::Level + 1;
|
||
|
|
||
|
my ($layout, $focus_idx) = @_;
|
||
|
my @windows = cmp_tree(
|
||
|
msg => 'Sanity check',
|
||
|
layout_before => $layout,
|
||
|
layout_after => $layout);
|
||
|
is($x->input_focus, $windows[$focus_idx]->id, 'Correct window focused') if $focus_idx >= 0;
|
||
|
}
|
||
|
|
||
|
sanity_check('H[ V[ a* V[ b c ] d ] e ]', 0);
|
||
|
sanity_check('H[ a b c d* ]', 3);
|
||
|
sanity_check('V[a b] V[c d*]', 3);
|
||
|
sanity_check('T[a b] S[c*]', 2);
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Simple focus test',
|
||
|
layout_before => 'H[a b] V[c* d]',
|
||
|
layout_after => 'H[a* b] V[c d]',
|
||
|
cb => sub {
|
||
|
cmd '[class=a] focus';
|
||
|
});
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Simple move test',
|
||
|
layout_before => 'H[a b] V[c* d]',
|
||
|
layout_after => 'H[a b] V[d c*]',
|
||
|
cb => sub {
|
||
|
cmd 'move down';
|
||
|
});
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Move from horizontal to vertical',
|
||
|
layout_before => 'H[a b] V[c d*]',
|
||
|
layout_after => 'H[b] V[c d a*]',
|
||
|
cb => sub {
|
||
|
cmd '[class=a] focus';
|
||
|
cmd 'move right, move right';
|
||
|
});
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Move unfocused non-leaf container',
|
||
|
layout_before => 'S[a b] V[c d* T[e f g]]',
|
||
|
layout_after => 'S[a T[e f g] b] V[c d*]',
|
||
|
cb => sub {
|
||
|
cmd '[con_mark=T1] move up, move up, move left, move up';
|
||
|
});
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Simple swap test',
|
||
|
layout_before => 'H[a b] V[c d*]',
|
||
|
layout_after => 'H[a d*] V[c b]',
|
||
|
cb => sub {
|
||
|
cmd '[class=b] swap with id ' . $_[0][3]->{id};
|
||
|
});
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Swap non-leaf containers',
|
||
|
layout_before => 'S[a b] V[c d*]',
|
||
|
layout_after => 'V[c d*] S[a b]',
|
||
|
cb => sub {
|
||
|
cmd '[con_mark=S1] swap with mark V1';
|
||
|
});
|
||
|
|
||
|
cmp_tree(
|
||
|
msg => 'Swap nested non-leaf containers',
|
||
|
layout_before => 'S[a b] V[c d* T[e f g]]',
|
||
|
layout_after => 'T[e f g] V[c d* S[a b]]',
|
||
|
cb => sub {
|
||
|
cmd '[con_mark=S1] swap with mark T1';
|
||
|
});
|
||
|
|
||
|
done_testing;
|