blob: 5900ab456e0e05b84add3e9fac0c3b45f4585483 [file] [log] [blame]
<!DOCTYPE HTML>
<link href="resources/grid.css" rel="stylesheet">
<link href="resources/grid-alignment.css" rel="stylesheet">
<style>
.grid {
font: 50px/1 Ahem;
position: relative;
}
.singleNamedGridLines {
grid-template-columns: [a] auto [b];
grid-template-rows: [x] auto [y];
}
.multipleNamedGridLines {
grid-template-columns: [a b c] auto [d e];
grid-template-rows: [x y z] auto [v w];
}
</style>
<script src="../../resources/js-test.js"></script>
<div class="grid singleNamedGridLines justifyContentStart" id="gridOneColumnSingle">
<div>XXXX</div>
<div>XXX</div>
<div>XX</div>
<div>X</div>
</div>
<div class="grid singleNamedGridLines justifyContentStart" id="gridTwoColumnsSingle">
<div class="firstRowAutoColumn">XXXX</div>
<div class="firstRowAutoColumn">XXX</div>
<div>XX</div>
<div>X</div>
</div>
<div class="grid singleNamedGridLines justifyContentStart" id="gridThreeColumnsSingle">
<div class="firstRowAutoColumn">XXXX</div>
<div class="firstRowAutoColumn">XXX</div>
<div class="firstRowAutoColumn">XX</div>
<div>X</div>
</div>
<div class="grid singleNamedGridLines justifyContentStart" id="gridFourColumnsSingle">
<div class="firstRowAutoColumn">XXXX</div>
<div class="firstRowAutoColumn">XXX</div>
<div class="firstRowAutoColumn">XX</div>
<div class="firstRowAutoColumn">X</div>
</div>
<div class="grid multipleNamedGridLines justifyContentStart" id="gridOneColumnMultiple">
<div>XXXX</div>
<div>XXX</div>
<div>XX</div>
<div>X</div>
</div>
<div class="grid multipleNamedGridLines justifyContentStart" id="gridTwoColumnsMultiple">
<div class="firstRowAutoColumn">XXXX</div>
<div class="firstRowAutoColumn">XXX</div>
<div>XX</div>
<div>X</div>
</div>
<div class="grid multipleNamedGridLines justifyContentStart" id="gridThreeColumnsMultiple">
<div class="firstRowAutoColumn">XXXX</div>
<div class="firstRowAutoColumn">XXX</div>
<div class="firstRowAutoColumn">XX</div>
<div>X</div>
</div>
<div class="grid multipleNamedGridLines justifyContentStart" id="gridFourColumnsMultiple">
<div class="firstRowAutoColumn">XXXX</div>
<div class="firstRowAutoColumn">XXX</div>
<div class="firstRowAutoColumn">XX</div>
<div class="firstRowAutoColumn">X</div>
</div>
<script src="resources/grid-definitions-parsing-utils.js"></script>
<script>
function testSizeAndPositionOfItems(element, expectedItemData) {
window.element = element;
var elementID = element.id || "element";
shouldBeEqualToNumber(elementID + ".childElementCount", expectedItemData.length);
var props = ["offsetWidth", "offsetTop", "offsetHeight"];
for (var i = 0; i < expectedItemData.length; ++i)
for (let prop of props)
shouldBeEqualToNumber(elementID + ".children[" + i + "]." + prop, expectedItemData[i][prop]);
}
function testGrid(element, columnValue, rowValue, expectedItemData) {
testGridTemplatesValues(element, columnValue, rowValue);
testSizeAndPositionOfItems(element, expectedItemData);
}
description("Test that computed style for grid-template-columns and grid-template-rows works as expected, with named grid lines but without implicit tracks. Also test the size and position of the items, since the size of implicit tracks is not exposed");
testGrid(document.getElementById("gridOneColumnSingle"), "[a] 200px [b]", "[x] 50px [y]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 100, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 150, offsetHeight: 50},
]);
testGrid(document.getElementById("gridTwoColumnsSingle"), "[a] 200px [b]", "[x] 50px [y]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 50, offsetHeight: 50},
]);
testGrid(document.getElementById("gridThreeColumnsSingle"), "[a] 200px [b]", "[x] 50px [y]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50},
]);
testGrid(document.getElementById("gridFourColumnsSingle"), "[a] 200px [b]", "[x] 50px [y]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 450, offsetWidth: 50, offsetTop: 0, offsetHeight: 50},
]);
testGrid(document.getElementById("gridOneColumnMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 100, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 150, offsetHeight: 50},
]);
testGrid(document.getElementById("gridTwoColumnsMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 50, offsetHeight: 50},
]);
testGrid(document.getElementById("gridThreeColumnsMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 0, offsetWidth: 200, offsetTop: 50, offsetHeight: 50},
]);
testGrid(document.getElementById("gridFourColumnsMultiple"), "[a b c] 200px [d e]", "[x y z] 50px [v w]", [
{offsetLeft: 0, offsetWidth: 200, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 200, offsetWidth: 150, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 350, offsetWidth: 100, offsetTop: 0, offsetHeight: 50},
{offsetLeft: 450, offsetWidth: 50, offsetTop: 0, offsetHeight: 50},
]);
</script>