@qooxdoo/framework
Version:
The JS Framework for Coders
701 lines (627 loc) • 15.3 kB
JavaScript
/* ************************************************************************
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"
)
);
}
}
});