UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

701 lines (627 loc) 15.3 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) * Christian Hagendorn (chris_schmidt) ************************************************************************ */ qx.Class.define("qx.test.util.placement.Placement", { extend: qx.dev.unit.TestCase, members: { testEnoughSpace() { var size = { width: 200, height: 300 }; var area = { width: 1000, height: 1000 }; var target = { left: 500, top: 500, right: 600, bottom: 550 }; var offsets = { top: 0, left: 0, bottom: 0, right: 0 }; var modes = ["direct", "keep-align", "best-fit"]; for (var i = 0; i < modes.length; i++) { var mode = modes[i]; this.assertJsonEquals( { left: 500, top: 200 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-left", mode, mode ), mode ); this.assertJsonEquals( { left: 450, top: 200 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-center", mode, mode ), mode ); this.assertJsonEquals( { left: 400, top: 200 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-right", mode, mode ), mode ); this.assertJsonEquals( { left: 500, top: 550 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-left", mode, mode ), mode ); this.assertJsonEquals( { left: 450, top: 550 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-center", mode, mode ), mode ); this.assertJsonEquals( { left: 400, top: 550 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-right", mode, mode ), mode ); this.assertJsonEquals( { left: 300, top: 500 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-top", mode, mode ), mode ); this.assertJsonEquals( { left: 300, top: 375 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-middle", mode, mode ), mode ); this.assertJsonEquals( { left: 300, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-bottom", mode, mode ), mode ); this.assertJsonEquals( { left: 600, top: 500 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-top", mode, mode ), mode ); this.assertJsonEquals( { left: 600, top: 375 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-middle", mode, mode ), mode ); this.assertJsonEquals( { left: 600, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-bottom", mode, mode ), mode ); } }, testRestrictedBottomKeepAlign() { var size = { width: 200, height: 300 }; var area = { width: 1000, height: 600 }; var target = { left: 500, top: 500, right: 600, bottom: 550 }; var offsets = { top: 0, left: 0, bottom: 0, right: 0 }; this.assertJsonEquals( { left: 500, top: 200 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-left", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 450, top: 200 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-center", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 400, top: 200 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-right", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 300, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 300, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-middle", "keep-align", "keep-align" ) ); }, testRestrictedTopKeepAlign() { var size = { width: 200, height: 300 }; var area = { width: 1000, height: 1000 }; var target = { left: 500, top: 100, right: 600, bottom: 150 }; var offsets = { top: 0, left: 0, bottom: 0, right: 0 }; this.assertJsonEquals( { left: 500, top: 150 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-left", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 450, top: 150 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-center", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 400, top: 150 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-right", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 300, top: 100 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 300, top: 100 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-bottom", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 100 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 100 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-bottom", "keep-align", "keep-align" ) ); }, testRestrictedRightKeepAlign() { var size = { width: 200, height: 300 }; var area = { width: 700, height: 1000 }; var target = { left: 500, top: 500, right: 600, bottom: 550 }; var offsets = { top: 0, left: 0, bottom: 0, right: 0 }; this.assertJsonEquals( { left: 300, top: 500 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 300, top: 375 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 300, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-bottom", "keep-align", "keep-align" ) ); }, testRestrictedLeftKeepAlign() { var size = { width: 200, height: 300 }; var area = { width: 1000, height: 1000 }; var target = { left: 100, top: 500, right: 200, bottom: 550 }; var offsets = { top: 0, left: 0, bottom: 0, right: 0 }; this.assertJsonEquals( { left: 200, top: 500 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 200, top: 375 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 200, top: 250 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-bottom", "keep-align", "keep-align" ) ); }, testRestrictedBottomAndTopWithBetterBottomKeepAlign() { var size = { width: 200, height: 300 }; var area = { width: 1000, height: 440 }; var target = { left: 500, top: 100, right: 600, bottom: 150 }; var offsets = { top: 10, bottom: 20, left: 0, right: 0 }; this.assertJsonEquals( { left: 500, top: 160 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-left", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 450, top: 160 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-center", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 500, top: 160 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-left", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 450, top: 160 }, qx.util.placement.Placement.compute( size, area, target, offsets, "top-center", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 110 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 110 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 600, top: 110 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-bottom", "keep-align", "keep-align" ) ); }, testRestrictedLeftAndRightWithBetterLeftKeepAlign() { var size = { width: 200, height: 300 }; var area = { width: 650, height: 1000 }; var target = { left: 500, top: 500, right: 600, bottom: 550 }; var offsets = { top: 0, bottom: 0, left: 10, right: 20 }; this.assertJsonEquals( { left: 280, top: 500 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 280, top: 375 }, qx.util.placement.Placement.compute( size, area, target, offsets, "left-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 280, top: 500 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-top", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 280, top: 375 }, qx.util.placement.Placement.compute( size, area, target, offsets, "right-middle", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 380, top: 550 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-left", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 380, top: 550 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-center", "keep-align", "keep-align" ) ); this.assertJsonEquals( { left: 380, top: 550 }, qx.util.placement.Placement.compute( size, area, target, offsets, "bottom-right", "keep-align", "keep-align" ) ); } } });