<!DOCTYPE html>
<html>
<head>
<link href="resources/grid.css" rel="stylesheet">
<style>
#gridWithNone {
    grid: none;
}
.gridWithTemplate {
    grid: 10px / 15px;
}
.gridWithInherit {
    grid: inherit;
}
#gridColumnsAndAutoFlow {
    grid: auto-flow / 10px;
}
#gridWithAutoFlowAndAutoRows {
    grid: auto-flow 10px / none;
}
#gridWithAutoFlowColumnDense {
    grid: none / auto-flow dense;
}
#gridWithAutoFlowDenseRow {
    grid: auto-flow dense / none;
}
#gridWithAutoFlowAndAutoRowsAndColumns {
    grid: auto-flow 10px / 20px;
}
#gridWithAutoFlowAndMultipleAutoTracks {
    grid: auto-flow 20px 10px / 100px 50px;
}
#gridWithRowsAndAutoFlow {
    grid: 10px / auto-flow;
}
#gridWithRowsNoneAndAutoFlowAndAutoColumn {
    grid: none / auto-flow 10px;
}
#gridWithRowsAndAutoFlowDenseColumn {
    grid: 10px / auto-flow dense;
}
#gridWithColumnsAndDenseAutoFlow {
    grid: dense auto-flow / 10px;
}
#gridWithRowsAndAutoFlowAndAutoColumns {
    grid: 20px / auto-flow 10px;
}
#gridWithRowsAndAutoFlowAndMultipleAutoTracks {
    grid: 100px 50px / auto-flow 20px 10px;
}

/* Bad values. */

#gridWithMisplacedAutoColumn {
    grid: 10px / 20px auto-flow;
}
#gridWithMisplacedNone1 {
    grid: auto-flow 10px / none 20px;
}
#gridWithMisplacedNone2 {
    grid: 10px / 20px none;
}
#gridWithMisplacedDense {
    grid: dense 10px / auto-flow 20px;
}
#gridWithDuplicatedDense {
    grid: dense auto-flow dense / 10px;
}
#gridWithOnlyDense {
    grid: dense / 10px;
}
#gridWithoutColumnInfo {
    grid: auto-flow dense 10px;
}
#gridWithTwoAutoFlow {
    grid: auto-flow / auto-flow 20px;
}
#gridWithImplicitAndNoExplicit {
    grid: column 20px / 10px;
}
#gridWithExtraIdBeforeAutoFlowColumn {
    grid: 10px / a auto-flow 20px;
}
#gridWithExtraIdBeforeAutoFlowRow {
    grid: a auto-flow 10px / 20px;
}
#gridWithExtraIdBeforeAutoColumn {
    grid: 10px / auto-flow a 20px;
}
#gridWithExtraIdAfterAutoColumn {
    grid: 10px / auto-flow 20px a;
}
#gridWithExtraIdBeforeAutoRow {
   grid: auto-flow a 20px / 10px;
}
#gridWithExtraIdAfterAutoRow {
   grid: auto-flow 20px a / 10px;
}
</style>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<div class="grid" id="gridWithNone"></div>
<div class="grid gridWithTemplate" id="gridWithTemplate"></div>
<div class="grid gridWithTemplate">
    <div class="grid gridWithInherit" id="gridInherit"></div>
</div>
<div class="grid" class="gridWithTemplate">
    <div><div class="grid gridWithInherit" id="gridNoInherit"></div></div>
</div-->
<div class="grid" id="gridColumnsAndAutoFlow"></div>
<div class="grid" id="gridWithAutoFlowAndAutoRows"></div>
<div class="grid" id="gridWithAutoFlowColumnDense"></div>
<div class="grid" id="gridWithAutoFlowDenseRow"></div>
<div class="grid" id="gridWithAutoFlowAndAutoRowsAndColumns"></div>
<div class="grid" id="gridWithAutoFlowAndMultipleAutoTracks"></div>
<div class="grid" id="gridWithRowsAndAutoFlow"></div>
<div class="grid" id="gridWithRowsNoneAndAutoFlowAndAutoColumn"></div>
<div class="grid" id="gridWithRowsAndAutoFlowDenseColumn"></div>
<div class="grid" id="gridWithColumnsAndDenseAutoFlow"></div>
<div class="grid" id="gridWithRowsAndAutoFlowAndAutoColumns"></div>
<div class="grid" id="gridWithRowsAndAutoFlowAndMultipleAutoTracks"></div>
<div class="grid" id="gridWithMisplacedAutoColumn"></div>
<div class="grid" id="gridWithMisplacedNone1"></div>
<div class="grid" id="gridWithMisplacedNone2"></div>
<div class="grid" id="gridWithMisplacedDense"></div>
<div class="grid" id="gridWithDuplicatedDense"></div>
<div class="grid" id="gridWithOnlyDense"></div>
<div class="grid" id="gridWithoutColumnInfo"></div>
<div class="grid" id="gridWithTwoAutoFlow"></div>
<div class="grid" id="gridWithImplicitAndNoExplicit"></div>
<div class="grid" id="gridWithExtraIdBeforeAutoFlowColumn"></div>
<div class="grid" id="gridWithExtraIdBeforeAutoFlowRow"></div>
<div class="grid" id="gridWithExtraIdBeforeAutoColumn"></div>
<div class="grid" id="gridWithExtraIdAfterAutoColumn"></div>
<div class="grid" id="gridWithExtraIdBeforeAutoRow"></div>
<div class="grid" id="gridWithExtraIdAfterAutoRow"></div>
<script src="resources/grid-shorthand-parsing-utils.js"></script>
<script>
    description("This test checks that the 'grid' shorthand is properly parsed and the longhand properties correctly assigned.");

    debug("Test getting the longhand values when shorthand is set through CSS.");
    testGridDefinitionsValues(document.getElementById("gridWithNone"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithTemplate"), "15px", "10px", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridInherit"), "15px", "10px", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridNoInherit"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridColumnsAndAutoFlow"), "10px", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithAutoFlowAndAutoRows"), "none", "none", "none", "row", "auto", "10px");
    testGridDefinitionsValues(document.getElementById("gridWithAutoFlowColumnDense"), "none", "none", "none", "column dense", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithAutoFlowDenseRow"), "none", "none", "none", "row dense", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithAutoFlowAndAutoRowsAndColumns"), "20px", "none", "none", "row", "auto", "10px");
    testGridDefinitionsValues(document.getElementById("gridWithAutoFlowAndMultipleAutoTracks"), "100px 50px", "none", "none", "row", "auto", "20px 10px");

    testGridDefinitionsValues(document.getElementById("gridWithRowsAndAutoFlow"), "none", "10px", "none", "column", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithRowsNoneAndAutoFlowAndAutoColumn"), "none", "none", "none", "column", "10px", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithRowsAndAutoFlowDenseColumn"), "none", "10px", "none", "column dense", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithColumnsAndDenseAutoFlow"), "10px", "none", "none", "row dense", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithRowsAndAutoFlowAndAutoColumns"), "none", "20px", "none", "column", "10px", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithRowsAndAutoFlowAndMultipleAutoTracks"), "none", "100px 50px", "none", "column", "20px 10px", "auto");

    debug("");
    debug("Test getting wrong values for 'grid' shorthand through CSS (they should resolve to the default: 'none')");
    testGridDefinitionsValues(document.getElementById("gridWithMisplacedAutoColumn"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithMisplacedNone1"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithMisplacedNone2"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithMisplacedDense"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithDuplicatedDense"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithOnlyDense"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithoutColumnInfo"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithTwoAutoFlow"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithImplicitAndNoExplicit"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithExtraIdBeforeAutoFlowColumn"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithExtraIdBeforeAutoFlowRow"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithExtraIdBeforeAutoColumn"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithExtraIdAfterAutoColumn"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithExtraIdBeforeAutoRow"), "none", "none", "none", "row", "auto", "auto");
    testGridDefinitionsValues(document.getElementById("gridWithExtraIdAfterAutoRow"), "none", "none", "none", "row", "auto", "auto");

    debug("");
    debug("Test getting and setting 'grid' shorthand through JS");
    testGridDefinitionsSetJSValues("20px / 10px", "10px", "20px", "none", "row", "auto", "auto", "10px", "20px", "none", "initial", "initial", "initial");
    testGridDefinitionsSetJSValues("[line] 'a' 20px / 10px", "10px", "[line] 20px", "\"a\"", "row", "auto", "auto", "10px", "[line] 20px", "\"a\"", "initial", "initial", "initial");
    testGridDefinitionsSetJSValues("auto-flow dense 20px / none", "none", "none", "none", "row dense", "auto", "20px", "none", "initial", "initial", "row dense", "initial", "20px");
    testGridDefinitionsSetJSValues("20px / auto-flow 10px", "none", "20px", "none", "column", "10px", "auto", "initial", "20px", "initial", "column", "10px", "initial");
    testGridDefinitionsSetJSValues("none / auto-flow dense 20px", "none", "none", "none", "column dense", "20px", "auto", "initial", "none", "initial", "column dense", "20px", "initial");
    testGridDefinitionsSetJSValues("10px / auto-flow 20px", "none", "10px", "none", "column", "20px", "auto", "initial", "10px", "initial", "column", "20px", "initial");

    debug("");
    debug("Test the initial value");
    var element = document.createElement("div");
    document.body.appendChild(element);
    testGridDefinitionsValues(element, "none", "none", "none", "row", "auto", "auto");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-template-columns')", "'none'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-template-rows')", "'none'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-template-areas')", "'none'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-flow')", "'row'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-columns')", "'auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-auto-rows')", "'auto'");

    debug("");
    debug("Test setting grid-template-columns and grid-template-rows back to 'none' through JS");
    testGridDefinitionsSetJSValues("10px / auto-flow 20px", "none", "10px", "none", "column", "20px", "auto", "initial", "10px", "initial", "column", "20px", "initial");
    testGridDefinitionsSetJSValues("none", "none", "none", "none", "row", "auto", "auto", "none", "none", "none", "initial", "initial", "initial");
    testGridDefinitionsSetJSValues("20px / auto-flow 10px", "none", "20px", "none", "column", "10px", "auto", "initial", "20px", "initial", "column", "10px", "initial");
    testGridDefinitionsSetJSValues("none", "none", "none", "none", "row", "auto", "auto", "none", "none", "none", "initial", "initial", "initial");

    debug("");
    debug("Test the inherit value does not affect gutter properties (grid-*-gap)");
    document.body.style.gridRowGap = "100px";
    document.body.style.gridColumnGap = "20px";
    var anotherElement = document.createElement("div");
    document.body.appendChild(anotherElement);
    shouldBeEqualToString("getComputedStyle(anotherElement, '').getPropertyValue('grid-column-gap')", "0px");
    shouldBeEqualToString("getComputedStyle(anotherElement, '').getPropertyValue('grid-row-gap')", "0px");
    anotherElement.style.grid = "inherit";
    shouldBeEqualToString("getComputedStyle(anotherElement, '').getPropertyValue('grid-column-gap')", "0px");
    shouldBeEqualToString("getComputedStyle(anotherElement, '').getPropertyValue('grid-row-gap')", "0px");
</script>
</body>
</html>
