#
# Check if the focus is correctly restored after closing windows.
#
-use i3test tests => 6;
+use i3test tests => 9;
+use List::Util qw(first);
use Time::HiRes qw(sleep);
my $i3 = i3("/tmp/nestedcons");
ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
-$i3->command('open')->recv;
-my ($nodes, $focus) = get_ws_content($tmp);
-my $first = $focus->[0];
+my $first = open_empty_con($i3);
$i3->command('split v')->recv;
-($nodes, $focus) = get_ws_content($tmp);
+my ($nodes, $focus) = get_ws_content($tmp);
is($nodes->[0]->{focused}, 0, 'split container not focused');
$i3->command('level up')->recv;
($nodes, $focus) = get_ws_content($tmp);
is($nodes->[0]->{focused}, 1, 'split container focused after level up');
-$i3->command('open')->recv;
-
-($nodes, $focus) = get_ws_content($tmp);
-my $second = $focus->[0];
+my $second = open_empty_con($i3);
isnt($first, $second, 'different container focused');
is($nodes->[0]->{nodes}->[0]->{id}, $first, 'first container found');
is($nodes->[0]->{nodes}->[0]->{focused}, 1, 'first container focused');
+##############################################################
+# another case, using a slightly different layout (regression)
+##############################################################
+
+$tmp = get_unused_workspace();
+$i3->command("workspace $tmp")->recv;
+
+ok(@{get_ws_content($tmp)} == 0, 'no containers yet');
+
+$i3->command('split v')->recv;
+$first = open_empty_con($i3);
+my $bottom = open_empty_con($i3);
+
+$i3->command('prev v')->recv;
+$i3->command('split h')->recv;
+my $middle = open_empty_con($i3);
+my $right = open_empty_con($i3);
+$i3->command('next v')->recv;
+
+# We have the following layout now (second is focused):
+# .----------------------------.
+# | .------------------------. |
+# | | first | middle | right | |
+# | `------------------------' |
+# |----------------------------|
+# | |
+# | second |
+# | |
+# `----------------------------'
+
+# Check if the focus is restored to $right when we close $second
+$i3->command('kill')->recv;
+
+is(get_focused($tmp), $right, 'top right container focused (in focus stack)');
+
+($nodes, $focus) = get_ws_content($tmp);
+my $tr = first { $_->{id} eq $right } @{$nodes->[0]->{nodes}};
+is($tr->{focused}, 1, 'top right container really has focus');
+
+##############################################################
+# and now for something completely different:
+# check if the pointer position is relevant when restoring focus
+# (it should not be relevant, of course)
+##############################################################
+
+# TODO: add test code as soon as I can reproduce it
+
diag( "Testing i3, Perl $], $^X" );