X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=testcases%2Ft%2F241-consistent-center.t;fp=testcases%2Ft%2F241-consistent-center.t;h=283d173180904e7cf0a222a57eca9e66d966a910;hb=c6581a5fd650a94b3d3228f53fa6975801ff5d1e;hp=0000000000000000000000000000000000000000;hpb=2759a308a2a026759e063599f8ed8c99c4500502;p=i3%2Fi3 diff --git a/testcases/t/241-consistent-center.t b/testcases/t/241-consistent-center.t new file mode 100644 index 00000000..283d1731 --- /dev/null +++ b/testcases/t/241-consistent-center.t @@ -0,0 +1,106 @@ +#!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) +# +# Verifies that most of i3's centering methods produce consistent results. +# Decorations are disabled to avoid floating_enable's logic which shifts +# windows upwards dependent on their decoration height. +# +use i3test i3_autostart => 0; + +my $config = <rect; +is(int($initial->{x} + $initial->{width} / 2), int($x->root->rect->width / 2), + 'x coordinates match'); +is(int($initial->{y} + $initial->{height} / 2), int($x->root->rect->height / 2), + 'y coordinates match'); + +cmd 'move position center'; + +my $new = $first->rect; +is($initial->{x}, $new->{x}, 'x coordinates match'); +is($initial->{y}, $new->{y}, 'y coordinates match'); + +cmd 'move absolute position center'; + +$new = $first->rect; +is($initial->{x}, $new->{x}, 'x coordinates match'); +is($initial->{y}, $new->{y}, 'y coordinates match'); + +##################################################################### +# Create a second window and move it into and out of the scratchpad. +# Because it hasn't been moved or resized, it should be floated in +# the center of the screen when pulled out of the scratchpad. +##################################################################### + +my $second = open_window; + +cmd 'move scratchpad, scratchpad show'; + +$new = $second->rect; +my $mid_init = $initial->{x} + int($initial->{width} / 2); +my $mid_new = $new->{x} + int($new->{width} / 2); +is($mid_init, $mid_new, 'x midpoint is ws center'); + +$mid_init = $initial->{y} + int($initial->{height} / 2); +$mid_new = $new->{y} + int($new->{height} / 2); +is($mid_init, $mid_new, 'y midpoint is ws center'); + +##################################################################### +# Verify that manually floating a tiled window results in proper +# centering. +##################################################################### + +my $third = open_window; + +cmd 'floating enable'; + +$new = $third->rect; +is($initial->{x}, $new->{x}, 'x coordinates match'); +is($initial->{y}, $new->{y}, 'y coordinates match'); + +##################################################################### +# Create a child window of the previous window, which should result +# in the new window being centered over the last one. +##################################################################### + +my $fourth = open_window( dont_map => 1, client_leader => $third ); +$fourth->map; +sync_with_i3; + +my $child = $fourth->rect; +is($new->{x}, $child->{x}, 'x coordinates match'); +is($new->{y}, $child->{y}, 'y coordinates match'); + +exit_gracefully($pid); + +done_testing;