f0b56c5e98
This eliminates an error message upon split horizontal which did not occur in older i3 versions. The command itself worked just fine.
123 lines
3.6 KiB
Perl
123 lines
3.6 KiB
Perl
#!perl
|
||
# vim:ts=4:sw=4:expandtab
|
||
#
|
||
# Tests splitting
|
||
#
|
||
use i3test;
|
||
|
||
my $tmp;
|
||
my $ws;
|
||
|
||
################################################################################
|
||
# Open two containers, split, open another container. Then verify
|
||
# the layout is like we expect it to be
|
||
################################################################################
|
||
|
||
sub verify_split_layout {
|
||
my (%args) = @_;
|
||
|
||
$tmp = fresh_workspace;
|
||
|
||
$ws = get_ws($tmp);
|
||
is($ws->{orientation}, 'horizontal', 'orientation horizontal by default');
|
||
cmd 'split v';
|
||
$ws = get_ws($tmp);
|
||
is($ws->{orientation}, 'vertical', 'split v changes workspace orientation');
|
||
|
||
cmd 'open';
|
||
cmd 'open';
|
||
my $content = get_ws_content($tmp);
|
||
|
||
is(@{$content}, 2, 'two containers on workspace level');
|
||
my $first = $content->[0];
|
||
my $second = $content->[1];
|
||
|
||
is(@{$first->{nodes}}, 0, 'first container has no children');
|
||
is(@{$second->{nodes}}, 0, 'second container has no children (yet)');
|
||
my $old_name = $second->{name};
|
||
|
||
cmd $args{split_command};
|
||
cmd 'open';
|
||
|
||
$content = get_ws_content($tmp);
|
||
|
||
is(@{$content}, 2, 'two containers on workspace level');
|
||
$first = $content->[0];
|
||
$second = $content->[1];
|
||
|
||
is(@{$first->{nodes}}, 0, 'first container has no children');
|
||
isnt($second->{name}, $old_name, 'second container was replaced');
|
||
is($second->{orientation}, 'horizontal', 'orientation is horizontal');
|
||
is(@{$second->{nodes}}, 2, 'second container has 2 children');
|
||
is($second->{nodes}->[0]->{name}, $old_name, 'found old second container');
|
||
}
|
||
|
||
verify_split_layout(split_command => 'split h');
|
||
verify_split_layout(split_command => 'split horizontal');
|
||
|
||
# TODO: extend this test-case (test next/prev)
|
||
# - wrapping (no horizontal switch possible, goes level-up)
|
||
# - going level-up "manually"
|
||
|
||
######################################################################
|
||
# Test splitting multiple times without actually creating windows
|
||
######################################################################
|
||
|
||
$tmp = fresh_workspace;
|
||
|
||
$ws = get_ws($tmp);
|
||
is($ws->{orientation}, 'horizontal', 'orientation horizontal by default');
|
||
cmd 'split v';
|
||
$ws = get_ws($tmp);
|
||
is($ws->{orientation}, 'vertical', 'split v changes workspace orientation');
|
||
|
||
cmd 'open';
|
||
my @content = @{get_ws_content($tmp)};
|
||
|
||
# recursively sums up all nodes and their children
|
||
sub sum_nodes {
|
||
my ($nodes) = @_;
|
||
|
||
return 0 if !@{$nodes};
|
||
|
||
my @children = (map { @{$_->{nodes}} } @{$nodes},
|
||
map { @{$_->{'floating_nodes'}} } @{$nodes});
|
||
|
||
return @{$nodes} + sum_nodes(\@children);
|
||
}
|
||
|
||
my $old_count = sum_nodes(\@content);
|
||
cmd 'split v';
|
||
|
||
@content = @{get_ws_content($tmp)};
|
||
$old_count = sum_nodes(\@content);
|
||
|
||
cmd 'split v';
|
||
|
||
@content = @{get_ws_content($tmp)};
|
||
my $count = sum_nodes(\@content);
|
||
is($count, $old_count, 'not more windows after splitting again');
|
||
|
||
######################################################################
|
||
# In the special case of being inside a stacked or tabbed container, we don’t
|
||
# want this to happen.
|
||
######################################################################
|
||
|
||
$tmp = fresh_workspace;
|
||
|
||
cmd 'open';
|
||
@content = @{get_ws_content($tmp)};
|
||
is(scalar @content, 1, 'Precisely one container on this ws');
|
||
cmd 'layout stacked';
|
||
@content = @{get_ws_content($tmp)};
|
||
is(scalar @content, 1, 'Still one container on this ws');
|
||
is(scalar @{$content[0]->{nodes}}, 1, 'Stacked con has one child node');
|
||
|
||
cmd 'split h';
|
||
cmd 'open';
|
||
@content = @{get_ws_content($tmp)};
|
||
is(scalar @content, 1, 'Still one container on this ws');
|
||
is(scalar @{$content[0]->{nodes}}, 1, 'Stacked con still has one child node');
|
||
|
||
done_testing;
|