From fbbe9cf2e8648fe05b682d4004e6a63750b54a67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20B=C3=BCrk?= Date: Sun, 3 May 2015 16:19:23 +0200 Subject: [PATCH] Added testcases for 'move position mouse' --- testcases/t/245-move-position-mouse.t | 142 ++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 testcases/t/245-move-position-mouse.t diff --git a/testcases/t/245-move-position-mouse.t b/testcases/t/245-move-position-mouse.t new file mode 100644 index 00000000..ae049271 --- /dev/null +++ b/testcases/t/245-move-position-mouse.t @@ -0,0 +1,142 @@ +#!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) +# +# Tests the 'move [window|container] [to] position mouse|cursor|pointer command. +# Ticket: #1696 +use i3test i3_autostart => 0; +use POSIX qw(floor); + +sub warp_pointer { + my ($pos_x, $pos_y) = @_; + $x->root->warp_pointer($pos_x, $pos_y); + sync_with_i3; +} + +my ($pid, $config, $ws, $rect, @cons); +my $root_rect = $x->root->rect; + +########################################################################## + +########################################################################## +# Given a floating container and the cursor far from any edges, when +# moving the container to the mouse, then the container is moved such +# that the cursor is centered inside it. +########################################################################## + +$config = <{floating_nodes}}; +$rect = $cons[0]->{rect}; + +is(floor($rect->{x} + $rect->{width} / 2), 100, "con is centered around cursor horizontally"); +is(floor($rect->{y} + $rect->{height} / 2), 100, "con is centered around cursor vertically"); + +exit_gracefully($pid); + +########################################################################## +# Given a floating container and the cursor is in the left upper edge +# of the output, when moving the container to the mouse, then the +# container is moved but adjusted to stay in-bounds. +########################################################################## + +$config = <{floating_nodes}}; +$rect = $cons[0]->{rect}; + +is($rect->{x}, 0, "con is on the left edge"); +is($rect->{y}, 0, "con is on the upper edge"); + +exit_gracefully($pid); + +########################################################################## +# Given a floating container and the cursor is in the left right lower +# edge of the output, when moving the container to the mouse, then the +# container is moved but adjusted to stay in-bounds. +########################################################################## + +$config = <width - 5, $root_rect->height - 5); + +cmd 'move position mouse'; + +@cons = @{get_ws($ws)->{floating_nodes}}; +$rect = $cons[0]->{rect}; + +is($rect->{x} + $rect->{width}, $root_rect->width, "con is on the right edge"); +is($rect->{y} + $rect->{height}, $root_rect->height, "con is on the lower edge"); + +exit_gracefully($pid); + +########################################################################## +# Given a floating container and the cursor being close to the corner of +# an output, when the container is moved to the mouse, then the container +# is moved but adjusted to the output boundaries. +# This test verifies that boundaries of individual outputs are respected +# and not just boundaries of the entire X root screen. +########################################################################## + +$config = <{floating_nodes}}; +$rect = $cons[0]->{rect}; + +is($rect->{x} + $rect->{width}, 500, "con is on the right edge"); +is($rect->{y} + $rect->{height}, 500, "con is on the lower edge"); + +exit_gracefully($pid); + +########################################################################## + +done_testing;