Reorder tests to not use the same number (#2947)
Distinct numbers make re-running individual tests easier by helping with tab-completion. Completeness verified using: % for i in $(seq 0 600) do files=$(ls testcases/t/$(printf "%03d" $i)-*.t 2>&- | wc -l) [ "$files" != "0" ] && [ "$files" != "1" ] && echo "clash: $i" done
This commit is contained in:
committed by
Michael Stapelberg
parent
31834b3ce4
commit
5d9db61dda
376
testcases/t/274-move-branch-position.t
Normal file
376
testcases/t/274-move-branch-position.t
Normal file
@ -0,0 +1,376 @@
|
||||
#!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)
|
||||
#
|
||||
# Test that movement of a con into a branch will place the moving con at the
|
||||
# correct position within the branch.
|
||||
#
|
||||
# If the direction of movement is the same as the orientation of the branch
|
||||
# container, append or prepend the container to the branch in the obvious way.
|
||||
# If the movement is to the right or downward, insert the moving container in
|
||||
# the first position (i.e., the leftmost or top position resp.) If the movement
|
||||
# is to the left or upward, insert the moving container in the last position
|
||||
# (i.e., the rightmost or bottom position resp.)
|
||||
#
|
||||
# If the direction of movement is different from the orientation of the branch
|
||||
# container, insert the container into the branch after the focused-inactive
|
||||
# container.
|
||||
#
|
||||
# For testing purposes, we will demonstrate the behavior for tabbed containers
|
||||
# to represent the case of split-horizontal branches and stacked containers to
|
||||
# represent the case of split-vertical branches.
|
||||
#
|
||||
# Ticket: #1060
|
||||
# Bug still in: 4.6-109-g18cfc36
|
||||
|
||||
use i3test;
|
||||
|
||||
# Opens tabs on the presently focused branch and adds several additional
|
||||
# windows. Shifts focus to somewhere in the middle of the tabs so the most
|
||||
# general case can be assumed.
|
||||
sub open_tabs {
|
||||
cmd 'layout tabbed';
|
||||
open_window;
|
||||
open_window;
|
||||
open_window;
|
||||
open_window;
|
||||
cmd 'focus left; focus left'
|
||||
}
|
||||
|
||||
# Likewise for a stack
|
||||
sub open_stack {
|
||||
cmd 'layout stacking';
|
||||
open_window;
|
||||
open_window;
|
||||
open_window;
|
||||
open_window;
|
||||
cmd 'focus up; focus up'
|
||||
}
|
||||
|
||||
# Gets the position of the given leaf within the given branch. The first
|
||||
# position is one (1). Returns negative one (-1) if the leaf cannot be found
|
||||
# within the branch.
|
||||
sub get_leaf_position {
|
||||
my ($branch, $leaf) = @_;
|
||||
my $position = -1;
|
||||
for my $i (0 .. @{$branch->{nodes}}) {
|
||||
if ($branch->{nodes}[$i]->{id} == $leaf) {
|
||||
$position = $i + 1;
|
||||
last;
|
||||
};
|
||||
}
|
||||
return $position;
|
||||
}
|
||||
|
||||
# convenience function to focus a con by id to avoid having to type an ugly
|
||||
# command each time
|
||||
sub focus_con {
|
||||
my $con_id = shift @_;
|
||||
cmd "[con_id=\"$con_id\"] focus";
|
||||
}
|
||||
|
||||
# Places a leaf into a branch and focuses the leaf. The newly created branch
|
||||
# will have orientation specified by the second parameter.
|
||||
sub branchify {
|
||||
my ($con_id, $orientation) = @_;
|
||||
focus_con($con_id);
|
||||
$orientation eq 'horizontal' ? cmd 'splith' : cmd 'splitv';
|
||||
open_window;
|
||||
focus_con($con_id);
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
# When moving a con right into tabs, the moving con should be placed as the
|
||||
# first tab in the branch
|
||||
##############################################################################
|
||||
my $ws = fresh_workspace;
|
||||
|
||||
# create the target leaf
|
||||
open_window;
|
||||
my $target_leaf = get_focused($ws);
|
||||
|
||||
# create the tabbed branch container
|
||||
open_window;
|
||||
cmd 'splith';
|
||||
open_tabs;
|
||||
|
||||
# move the target leaf into the tabbed branch
|
||||
focus_con($target_leaf);
|
||||
cmd 'move right';
|
||||
|
||||
# the target leaf should be the first in the branch
|
||||
my $branch = shift @{get_ws_content($ws)};
|
||||
is($branch->{nodes}[0]->{id}, $target_leaf, 'moving con right into tabs placed it as the first tab in the branch');
|
||||
|
||||
# repeat the test when the target is in a branch
|
||||
cmd 'move up; move left';
|
||||
branchify($target_leaf, 'vertical');
|
||||
cmd 'move right';
|
||||
|
||||
$branch = pop @{get_ws_content($ws)};
|
||||
is($branch->{nodes}[0]->{id}, $target_leaf, 'moving con right into tabs from a branch placed it as the first tab in the branch');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con right into a stack, the moving con should be placed
|
||||
# below the focused-inactive leaf
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
|
||||
# create the target leaf
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# create the stacked branch container and find the focused leaf
|
||||
open_window;
|
||||
cmd 'splith';
|
||||
open_stack;
|
||||
my $secondary_leaf = get_focused($ws);
|
||||
|
||||
# move the target leaf into the stacked branch
|
||||
focus_con($target_leaf);
|
||||
cmd 'move right';
|
||||
|
||||
# the secondary focus leaf should be below the target
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
my $target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
my $secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con right into a stack placed it below the focused-inactive leaf');
|
||||
|
||||
# repeat the test when the target is in a branch
|
||||
cmd 'move up; move left';
|
||||
branchify($target_leaf, 'vertical');
|
||||
cmd 'move right';
|
||||
|
||||
$branch = pop @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con right into a stack from a branch placed it below the focused-inactive leaf');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con down into a stack, the moving con should be placed at the
|
||||
# top of the stack
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
cmd 'layout splitv';
|
||||
|
||||
# create the target leaf
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# create the stacked branch container
|
||||
open_window;
|
||||
cmd 'splitv';
|
||||
open_stack;
|
||||
|
||||
# move the target leaf into the stacked branch
|
||||
focus_con($target_leaf);
|
||||
cmd 'move down';
|
||||
|
||||
# the target leaf should be on the top of the stack
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
is($branch->{nodes}[0]->{id}, $target_leaf, 'moving con down into a stack placed it on the top of the stack');
|
||||
|
||||
# repeat the test when the target is in a branch
|
||||
cmd 'move right; move up';
|
||||
branchify($target_leaf, 'horizontal');
|
||||
cmd 'move down';
|
||||
|
||||
$branch = pop @{get_ws_content($ws)};
|
||||
is($branch->{nodes}[0]->{id}, $target_leaf, 'moving con down into a stack from a branch placed it on the top of the stack');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con down into tabs, the moving con should be placed after the
|
||||
# focused-inactive tab
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
cmd 'layout splitv';
|
||||
|
||||
# create the target leaf
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# create the tabbed branch container and find the focused tab
|
||||
open_window;
|
||||
cmd 'splitv';
|
||||
open_tabs;
|
||||
$secondary_leaf = get_focused($ws);
|
||||
|
||||
# move the target leaf into the tabbed branch
|
||||
focus_con($target_leaf);
|
||||
cmd 'move down';
|
||||
|
||||
# the secondary focus tab should be to the right
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con down into tabs placed it after the focused-inactive tab');
|
||||
|
||||
# repeat the test when the target is in a branch
|
||||
cmd 'move right; move up';
|
||||
branchify($target_leaf, 'horizontal');
|
||||
cmd 'move down';
|
||||
|
||||
$branch = pop @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con down into tabs from a branch placed it after the focused-inactive tab');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con left into tabs, the moving con should be placed as the last
|
||||
# tab in the branch
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
|
||||
# create the tabbed branch container
|
||||
open_window;
|
||||
cmd 'splith';
|
||||
open_tabs;
|
||||
|
||||
# create the target leaf
|
||||
cmd 'focus parent';
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# move the target leaf into the tabbed branch
|
||||
cmd 'move left';
|
||||
|
||||
# the target leaf should be last in the branch
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
|
||||
is($branch->{nodes}->[-1]->{id}, $target_leaf, 'moving con left into tabs placed it as the last tab in the branch');
|
||||
|
||||
# repeat the test when the target leaf is in a branch
|
||||
cmd 'move up; move right';
|
||||
branchify($target_leaf, 'vertical');
|
||||
cmd 'move left';
|
||||
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
is($branch->{nodes}->[-1]->{id}, $target_leaf, 'moving con left into tabs from a branch placed it as the last tab in the branch');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con left into a stack, the moving con should be placed below
|
||||
# the focused-inactive leaf
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
|
||||
# create the stacked branch container and find the focused leaf
|
||||
open_window;
|
||||
open_stack;
|
||||
$secondary_leaf = get_focused($ws);
|
||||
|
||||
# create the target leaf to the right
|
||||
cmd 'focus parent';
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# move the target leaf into the stacked branch
|
||||
cmd 'move left';
|
||||
|
||||
# the secondary focus leaf should be below
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con left into a stack placed it below the focused-inactive leaf');
|
||||
|
||||
# repeat the test when the target leaf is in a branch
|
||||
cmd 'move up; move right';
|
||||
branchify($target_leaf, 'vertical');
|
||||
cmd 'move left';
|
||||
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con left into a stack from a branch placed it below the focused-inactive leaf');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con up into a stack, the moving con should be placed last in
|
||||
# the stack
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
cmd 'layout splitv';
|
||||
|
||||
# create the stacked branch container
|
||||
open_window;
|
||||
cmd 'splitv';
|
||||
open_stack;
|
||||
|
||||
# create the target leaf
|
||||
cmd 'focus parent';
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# move the target leaf into the stacked branch
|
||||
cmd 'move up';
|
||||
|
||||
# the target leaf should be on the bottom of the stack
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
|
||||
is($branch->{nodes}->[-1]->{id}, $target_leaf, 'moving con up into stack placed it on the bottom of the stack');
|
||||
|
||||
# repeat the test when the target leaf is in a branch
|
||||
cmd 'move right; move down';
|
||||
branchify($target_leaf, 'horizontal');
|
||||
cmd 'move up';
|
||||
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
|
||||
is($branch->{nodes}->[-1]->{id}, $target_leaf, 'moving con up into stack from a branch placed it on the bottom of the stack');
|
||||
|
||||
##############################################################################
|
||||
# When moving a con up into tabs, the moving con should be placed after the
|
||||
# focused-inactive tab
|
||||
##############################################################################
|
||||
$ws = fresh_workspace;
|
||||
cmd 'layout splitv';
|
||||
|
||||
# create the tabbed branch container and find the focused leaf
|
||||
open_window;
|
||||
cmd 'splitv';
|
||||
open_tabs;
|
||||
$secondary_leaf = get_focused($ws);
|
||||
|
||||
# create the target leaf below
|
||||
cmd 'focus parent';
|
||||
open_window;
|
||||
$target_leaf = get_focused($ws);
|
||||
|
||||
# move the target leaf into the tabbed branch
|
||||
cmd 'move up';
|
||||
|
||||
# the secondary focus tab should be to the right
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con up into tabs placed it after the focused-inactive tab');
|
||||
|
||||
# repeat the test when the target leaf is in a branch
|
||||
cmd 'move right; move down';
|
||||
branchify($target_leaf, 'horizontal');
|
||||
cmd 'move up';
|
||||
|
||||
$branch = shift @{get_ws_content($ws)};
|
||||
$target_leaf_position = get_leaf_position($branch, $target_leaf);
|
||||
$secondary_leaf_position = get_leaf_position($branch, $secondary_leaf);
|
||||
|
||||
is($target_leaf_position, $secondary_leaf_position + 1, 'moving con up into tabs from a branch placed it after the focused-inactive tab');
|
||||
|
||||
done_testing;
|
Reference in New Issue
Block a user