my ($result);
my @urgent;
+$pid = launch_with_config($config);
+
###############################################################################
# Invalid con_id should not crash i3
# See issue #2895.
###############################################################################
-$pid = launch_with_config($config);
$ws = fresh_workspace;
open_window;
cmd "swap container with con_id 1";
does_i3_live;
-exit_gracefully($pid);
###############################################################################
# Swap 2 windows in different workspaces using con_id
###############################################################################
-$pid = launch_with_config($config);
-
$ws = fresh_workspace;
open_window;
$A = get_focused($ws);
cmd "swap container with con_id $A";
is(get_focused($ws), $A, 'A is now focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two containers next to each other.
# Focus should stay on B because both windows are on the focused workspace.
# | A | B | Focus Stacks:
# +---+---+ H1: B, A
###############################################################################
-$pid = launch_with_config($config);
$ws = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is($nodes->[1]->{window}, $A->{id}, 'A is on the right');
is(get_focused($ws), $expected_focus, 'B is still focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two containers with different parents.
# In this test, the focus head of the left v-split container is A.
# | Y | B | V1: A, Y
# +---+---+ V2: B, X
###############################################################################
-$pid = launch_with_config($config);
$ws = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is($nodes->[1]->{nodes}->[1]->{window}, $A->{id}, 'A is on the bottom right');
is(get_focused($ws), $expected_focus, 'B is still focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two containers with different parents.
# In this test, the focus head of the left v-split container is _not_ A.
# | Y | B | V1: Y, A
# +---+---+ V2: B, X
###############################################################################
-$pid = launch_with_config($config);
$ws = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is($nodes->[1]->{nodes}->[1]->{window}, $A->{id}, 'A is on the bottom right');
is(get_focused($ws), $expected_focus, 'B is still focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two containers with one being on a different workspace.
# The focused container is B.
# | Y | B | Focus Stacks:
# +---+---+ H2: B, Y
###############################################################################
-$pid = launch_with_config($config);
-
$ws1 = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
$expected_focus = get_focused($ws1);
is($nodes->[1]->{window}, $A->{id}, 'A is on ws2:right');
is(get_focused($ws2), $expected_focus, 'A is focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two non-focused containers within the same workspace.
#
# | X | B | V1: A, X
# +---+---+ V2: F, B
###############################################################################
-$pid = launch_with_config($config);
$ws = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is($nodes->[1]->{nodes}->[1]->{window}, $A->{id}, 'A is on the bottom right');
is(get_focused($ws), $expected_focus, 'F is still focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two non-focused containers which are both on different workspaces.
#
# | F |
# +---+
###############################################################################
-$pid = launch_with_config($config);
-
$ws1 = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is(get_focused($ws3), $expected_focus, 'F is still focused');
-exit_gracefully($pid);
-
###############################################################################
# Swap two non-focused containers with one being on a different workspace.
#
# | B | F | Focus Stacks:
# +---+---+ H2: F, B
###############################################################################
-$pid = launch_with_config($config);
$ws1 = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is($nodes->[0]->{window}, $A->{id}, 'A is on the left of the second workspace');
is(get_focused($ws2), $expected_focus, 'F is still focused');
-exit_gracefully($pid);
-
###############################################################################
# 1. A container cannot be swapped with its parent.
# 2. A container cannot be swapped with one of its children.
# | | B |
# +---+---+
###############################################################################
-$pid = launch_with_config($config);
-
$ws = fresh_workspace;
open_window;
open_window;
$result = cmd '[con_mark=A] swap container with mark B';
is($result->[0]->{success}, 0, 'A cannot be swappd with one of its children');
-exit_gracefully($pid);
-
###############################################################################
# Swapping two containers preserves the geometry of the container they are
# being swapped with.
# | B | A |
# +---+-------+
###############################################################################
-$pid = launch_with_config($config);
-
$ws = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
$B = open_window(wm_class => 'mark_B');
cmp_float($nodes->[0]->{percent}, 0.25, 'B has 25% width');
cmp_float($nodes->[1]->{percent}, 0.75, 'A has 75% width');
-exit_gracefully($pid);
-
###############################################################################
# Swapping containers not sharing the same parent preserves the geometry of
# the container they are swapped with.
# | | X |
# +---+-----+
###############################################################################
-$pid = launch_with_config($config);
$ws = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
cmp_float($nodes->[0]->{nodes}->[0]->{percent}, 0.25, 'B has 25% height');
cmp_float($nodes->[1]->{nodes}->[0]->{percent}, 0.75, 'A has 75% height');
-exit_gracefully($pid);
-
###############################################################################
# Swapping containers moves the urgency hint correctly.
###############################################################################
-$pid = launch_with_config($config);
$ws1 = fresh_workspace;
$A = open_window(wm_class => 'mark_A');
is(@urgent, 0, 'A is not marked urgent');
is(get_ws($ws2)->{urgent}, 0, 'the second workspace is not marked urgent');
-exit_gracefully($pid);
-
###############################################################################
+exit_gracefully($pid);
+
done_testing;