diff --git a/testcases/t/216-layout-restore-split-swallows.t b/testcases/t/216-layout-restore-split-swallows.t new file mode 100644 index 00000000..2e2028a2 --- /dev/null +++ b/testcases/t/216-layout-restore-split-swallows.t @@ -0,0 +1,160 @@ +#!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 i3 removes swallows specifications for split containers. +# ticket #1149, bug still present in commit 2fea5ef82bd3528ed62681f9ac64f45830f4acdf +use i3test; +use File::Temp qw(tempfile); +use IO::Handle; + +my $ws = fresh_workspace; + +my @content = @{get_ws_content($ws)}; +is(@content, 0, 'no nodes on the new workspace yet'); + +my ($fh, $filename) = tempfile(UNLINK => 1); +print $fh <<'EOT'; +// vim:ts=4:sw=4:et +{ + "border": "pixel", + "floating": "auto_off", + "geometry": { + "height": 777, + "width": 199, + "x": 0, + "y": 0 + }, + "name": "Buddy List", + "percent": 0.116145833333333, + "swallows": [ + { + "class": "^Pidgin$", + "window_role": "^buddy_list$" + } + ], + "type": "con" +} + +{ + // splitv split container with 1 children + "border": "pixel", + "floating": "auto_off", + "layout": "splitv", + "percent": 0.883854166666667, + "swallows": [ + {} + ], + "type": "con", + "nodes": [ + { + // splitv split container with 2 children + "border": "pixel", + "floating": "auto_off", + "layout": "splitv", + "percent": 1, + "swallows": [ + {} + ], + "type": "con", + "nodes": [ + { + "border": "pixel", + "floating": "auto_off", + "geometry": { + "height": 318, + "width": 566, + "x": 0, + "y": 0 + }, + "name": "zsh", + "percent": 0.5, + "swallows": [ + { + "class": "^URxvt$", + "instance": "^IRC$" + } + ], + "type": "con" + }, + { + "border": "pixel", + "floating": "auto_off", + "geometry": { + "height": 1057, + "width": 636, + "x": 0, + "y": 0 + }, + "name": "Michael Stapelberg", + "percent": 0.5, + "swallows": [ + { + "class": "^Pidgin$", + "window_role": "^conversation$" + } + ], + "type": "con" + } + ] + } + ] +} + +EOT +$fh->flush; +my $reply = cmd "append_layout $filename"; + +does_i3_live; + +ok($reply->[0]->{success}, 'IPC reply indicates success'); + +my @nodes = @{get_ws_content($ws)}; + +is_deeply($nodes[0]->{swallows}, + [ + { + class => '^Pidgin$', + window_role => '^buddy_list$', + }, + ], + 'swallows specification not parsed correctly'); + +is_deeply($nodes[1]->{swallows}, + [], + 'swallows specification empty on split container'); + +my @children = @{$nodes[1]->{nodes}->[0]->{nodes}}; + +is_deeply($children[0]->{swallows}, + [ + { + class => '^URxvt$', + instance => '^IRC$', + }, + ], + 'swallows specification not parsed correctly'); + +is_deeply($children[1]->{swallows}, + [ + { + class => '^Pidgin$', + window_role => '^conversation$', + }, + ], + 'swallows specification not parsed correctly'); + +close($fh); +done_testing;