#!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) # use i3test i3_config => <{nodes}}; cmp_ok(@nodes, '==', 1, 'one tiling container on this workspace'); is_deeply($nodes[0]->{marks}, [ 'tiling', 'tiling_auto' ], "mark set for 'tiling' criterion"); @nodes = @{get_ws($tmp)->{floating_nodes}}; cmp_ok(@nodes, '==', 1, 'one floating container on this workspace'); is_deeply($nodes[0]->{nodes}[0]->{marks}, [ 'floating', 'floating_auto' ], "mark set for 'floating' criterion"); ################################################################################ # Check that the user tiling / floating criteria work. # The following rules are triggered here: 'tiling', 'tiling_user', 'floating', # 'floating_user'. Therefore, the old marks 'tiling' and 'floating' are # replaced but the 'tiling_auto' and 'floating_auto' marks are preserved. ################################################################################ cmd '[id=' . $A->{id} . '] floating enable'; cmd '[id=' . $B->{id} . '] floating disable'; @nodes = @{get_ws($tmp)->{nodes}}; cmp_ok(@nodes, '==', 1, 'one tiling container on this workspace'); is_deeply($nodes[0]->{marks}, [ 'floating_auto', 'tiling', 'tiling_user' ], "Marks updated after 'floating_user' criterion"); @nodes = @{get_ws($tmp)->{floating_nodes}}; cmp_ok(@nodes, '==', 1, 'one floating container on this workspace'); is_deeply($nodes[0]->{nodes}[0]->{marks}, [ 'tiling_auto', 'floating', 'floating_user' ], "Marks updated after 'tiling_user' criterion"); ################################################################################ # Check that the default and auto rules do not re-trigger # Here, the windows are returned to their original state but since the rules # `tiling`, `tiling_auto`, `floating` and `floating_auto` where already # triggered, only the `tiling_user` and `floating_user` rules should trigger. ################################################################################ # Use 'mark' to clear old marks cmd '[id=' . $A->{id} . '] mark A, floating disable'; cmd '[id=' . $B->{id} . '] mark B, floating enable'; @nodes = @{get_ws($tmp)->{nodes}}; cmp_ok(@nodes, '==', 1, 'one tiling container on this workspace'); is_deeply($nodes[0]->{marks}, [ 'A', 'tiling_user' ], "Only 'tiling_user' rule triggered"); @nodes = @{get_ws($tmp)->{floating_nodes}}; cmp_ok(@nodes, '==', 1, 'one floating container on this workspace'); is_deeply($nodes[0]->{nodes}[0]->{marks}, [ 'B', 'floating_user' ], "Only 'floating_user' rule triggered"); ############################################################## done_testing;