blob: b7ed7cf92af7cfd5da67a8628736228b005fe0fb [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<link href="resources/grid.css" rel="stylesheet">
<style>
.grid {
/* Give an explicit size to the grid so that percentage grid tracks have a consistent resolution */
width: 800px;
height: 600px;
}
.gridItem {
grid-column: 1;
grid-row: 1;
width: 33px;
height: 44px;
}
.gridItem2 {
grid-column: 2;
grid-row: 2;
width: 66px;
height: 77px;
}
.singleSingleTrackRepeat {
grid-template-rows: repeat(1, 18px);
grid-template-columns: repeat(1, 15%);
}
.twoSingleTrackRepeat {
grid-template-rows: repeat(2, auto);
grid-template-columns: repeat(2, minmax(15px, 50%));
}
.twoDoubleTrackRepeat {
grid-template-rows: repeat(2, minmax(5px, 10px) auto);
grid-template-columns: repeat(2, auto minmax(100px, 120px));
}
.twoDoubleTrackWithNamedGridLineRepeat {
grid-template-rows: repeat(2, 10px (start) auto (end));
grid-template-columns: repeat(2, auto (middle) 250px (end));
}
.twoDoubleTrackWithTrailingNamedGridLineRepeat {
grid-template-rows: repeat(2, (before) 10px);
grid-template-columns: repeat(2, (before) auto);
}
.trailingNamedGridLineRepeat {
grid-template-rows: repeat(1, 10px) (end);
grid-template-columns: repeat(1, 250px) (end);
}
.leadingNamedGridLineRepeat {
grid-template-rows: (start) repeat(2, 10px);
grid-template-columns: (start) repeat(2, 250px);
}
.mixRepeatAfterNonRepeat {
grid-template-rows: auto repeat(2, 10px);
grid-template-columns: (start) 140px repeat(2, 250px);
}
.mixNonRepeatAfterRepeat {
grid-template-rows: repeat(2, 10px) (end) auto;
grid-template-columns: repeat(2, 250px) 15% (last);
}
</style>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<div class="grid singleSingleTrackRepeat" id="singleSingleTrackRepeatWithSize"></div>
<div class="indefiniteSizeGrid singleSingleTrackRepeat" id="singleSingleTrackRepeatWithoutSize"></div>
<div class="grid twoSingleTrackRepeat" id="twoSingleTrackRepeat"></div>
<div class="grid twoSingleTrackRepeat" id="twoSingleTrackRepeatWithChildren">
<div class="gridItem"></div>
<div class="gridItem2"></div>
</div>
<div class="grid twoDoubleTrackRepeat" id="twoDoubleTrackRepeat">
<div class="gridItem"></div>
<div class="gridItem2"></div>
</div>
<div class="grid twoDoubleTrackWithNamedGridLineRepeat" id="twoDoubleTrackWithNamedGridLineRepeat">
<div class="gridItem"></div>
<div class="gridItem2"></div>
</div>
<div class="grid twoDoubleTrackWithTrailingNamedGridLineRepeat" id="twoDoubleTrackWithTrailingNamedGridLineRepeat"></div>
<div class="grid trailingNamedGridLineRepeat" id="trailingNamedGridLineRepeat"></div>
<div class="grid leadingNamedGridLineRepeat" id="leadingNamedGridLineRepeat"></div>
<div class="grid mixRepeatAfterNonRepeat" id="mixRepeatAfterNonRepeat">
<div class="gridItem"></div>
</div>
<div class="grid mixNonRepeatAfterRepeat" id="mixNonRepeatAfterRepeat"></div>
<script src="resources/grid-definitions-parsing-utils.js"></script>
<script>
description('Test that setting and getting grid-template-columns and grid-template-rows with repeat() works as expected');
debug("Test getting grid-template-columns and grid-template-rows set through CSS");
testGridDefinitionsValues(document.getElementById("singleSingleTrackRepeatWithSize"), "120px", "18px");
testGridDefinitionsValues(document.getElementById("singleSingleTrackRepeatWithoutSize"), "0px", "18px");
testGridDefinitionsValues(document.getElementById("twoSingleTrackRepeat"), "400px 400px", "0px 0px");
testGridDefinitionsValues(document.getElementById("twoSingleTrackRepeatWithChildren"), "400px 400px", "44px 77px");
testGridDefinitionsValues(document.getElementById("twoDoubleTrackRepeat"), "33px 120px 0px 120px", "10px 77px 10px 0px");
testGridDefinitionsValues(document.getElementById("twoDoubleTrackWithNamedGridLineRepeat"), "33px (middle) 250px (end) 0px (middle) 250px (end)", "10px (start) 77px (end) 10px (start) 0px (end)");
testGridDefinitionsValues(document.getElementById("twoDoubleTrackWithTrailingNamedGridLineRepeat"), "(before) 0px (before) 0px", "(before) 10px (before) 10px");
testGridDefinitionsValues(document.getElementById("trailingNamedGridLineRepeat"), "250px (end)", "10px (end)");
testGridDefinitionsValues(document.getElementById("leadingNamedGridLineRepeat"), "(start) 250px 250px", "(start) 10px 10px");
testGridDefinitionsValues(document.getElementById("mixRepeatAfterNonRepeat"), "(start) 140px 250px 250px", "44px 10px 10px");
testGridDefinitionsValues(document.getElementById("mixNonRepeatAfterRepeat"), "250px 250px 120px (last)", "10px 10px (end) 0px");
debug("");
debug("Test invalid repeat syntax.");
function testInvalidSyntax(gridColumn) {
element = document.createElement("div");
document.body.appendChild(element);
element.style.gridTemplateColumns = gridColumn;
shouldBeEqualToString("window.getComputedStyle(element, '').getPropertyValue('grid-template-columns')", "none");
document.body.removeChild(element);
}
testInvalidSyntax("repeat(");
testInvalidSyntax("repeat()");
testInvalidSyntax("repeat(3 / auto)");
testInvalidSyntax("repeat(3 , ,)");
testInvalidSyntax("repeat(0, 15px)");
testInvalidSyntax("repeat(-1, auto)");
testInvalidSyntax("repeat(1, (foo))");
testInvalidSyntax("repeat(1, )");
testInvalidSyntax("repeat(1)");
// Nesting is no allowed.
testInvalidSyntax("repeat(2, repeat(1, auto))");
</script>
</body>
</html>