X-Git-Url: https://git.sur5r.net/?p=i3%2Fi3;a=blobdiff_plain;f=testcases%2Ft%2F522-rename-assigned-workspace.t;fp=testcases%2Ft%2F522-rename-assigned-workspace.t;h=9897e4ee263860be01b52f8f185496282e3228ed;hp=981471f78f7821eb0f6ef495f3721484f6d656ce;hb=1847938d4eeba98260cc79ca45a11a134274c2ea;hpb=c54f5008395b10c046f380cc3069ff779e5d2877 diff --git a/testcases/t/522-rename-assigned-workspace.t b/testcases/t/522-rename-assigned-workspace.t index 981471f7..9897e4ee 100644 --- a/testcases/t/522-rename-assigned-workspace.t +++ b/testcases/t/522-rename-assigned-workspace.t @@ -28,23 +28,11 @@ workspace 1 output fake-0 workspace 2 output fake-1 workspace 3:foo output fake-1 workspace baz output fake-1 +workspace 5 output left +workspace 6 output doesnotexist fake-0 +workspace 7 output fake-1 fake-0 EOT -my $i3 = i3(get_socket_path()); -$i3->connect->recv; - -# Returns the name of the output on which this workspace resides -sub get_output_for_workspace { - my $ws_name = shift @_; - - foreach (grep { not $_->{name} =~ /^__/ } @{$i3->get_tree->recv->{nodes}}) { - my $output = $_->{name}; - foreach (grep { $_->{name} =~ "content" } @{$_->{nodes}}) { - return $output if $_->{nodes}[0]->{name} =~ $ws_name; - } - } -} - ########################################################################## # Renaming the workspace to an unassigned name does not move the workspace # (regression test) @@ -82,4 +70,62 @@ cmd 'rename workspace to baz'; is(get_output_for_workspace('baz'), 'fake-1', 'Renaming the workspace to a number and name should move it to the assigned output'); +########################################################################## +# Renaming a workspace so that it is assigned a directional output does +# not move the workspace or crash +########################################################################## + +cmd 'focus output fake-0'; +cmd 'workspace bar'; +cmd 'rename workspace to 5'; +is(get_output_for_workspace('5'), 'fake-0', + 'Renaming the workspace to a workspace assigned to a directional output should not move the workspace'); + +########################################################################## +# Renaming an unfocused workspace, triggering an assignment to the output +# which holds the currently focused empty workspace should result in the +# original workspace replacing the empty one. +# See issue #3228. +########################################################################## + +cmd 'workspace baz'; +cmd 'rename workspace 5 to 2'; +is(get_output_for_workspace('2'), 'fake-1', + 'Renaming an unfocused workspace, triggering an assignment to the output which holds the currently focused empty workspace should result in the original workspace replacing the empty one'); + +########################################################################## +# Renaming an unfocused empty workspace, triggering an assignment to the +# output which holds the currently focused non-empty workspace should +# close the empty workspace and not crash i3. +# See issue #3248. +########################################################################## + +cmd 'workspace 1'; +cmd 'workspace 2'; +open_window; +cmd 'rename workspace 1 to baz'; +is(get_output_for_workspace('baz'), '', + 'Renaming an unfocused empty workspace, triggering an assignment to the output which holds the currently focused non-empty workspace should close the empty workspace and not crash i3'); +kill_all_windows; + +########################################################################## +# Renaming a workspace with multiple assignments, where the first output +# doesn't exist. +########################################################################## + +cmd 'focus output fake-1'; +cmd 'rename workspace to 6'; +is(get_output_for_workspace('6'), 'fake-0', + 'Renaming the workspace while first target output doesn\'t exist moves it to the second assigned output'); + +########################################################################## +# Renaming a workspace with multiple assignments, where both outputs exist +# moves it to the first output. +########################################################################## + +cmd 'focus output fake-0'; +cmd 'rename workspace to 7'; +is(get_output_for_workspace('7'), 'fake-1', + 'Renaming a workspace with multiple assignments, where both outputs exist moves it to the first output.'); + done_testing;