<!DOCTYPE html>
<html>
<head>
<link href="resources/grid.css" rel="stylesheet">
<style>
.grid {
    grid-template-areas: "firstArea secondArea"
                                 "thirdArea thirdArea";
}

.gridItemWithPositiveInteger {
    grid-column-start: 10;
    grid-row-start: 15;
}
.gridItemWithNegativeInteger {
    grid-column-start: -10;
    grid-row-start: -15;
}
.gridItemWithBeforeSpan {
    grid-column-start: span 2;
    grid-row-start: span 8;
}
.gridItemWithAfterSpan {
    grid-column-start: 2 span;
    grid-row-start: 8 span;
}
.gridItemWithOnlySpan {
    grid-column-start: span;
    grid-row-start: span;
}
.gridItemWithAuto {
    grid-column-start: auto;
    grid-row-start: auto;
}
.gridItemWithCustomIdent {
    grid-column-start: first;
    grid-row-start: last;
}
.gridItemWithNumberCustomIdent {
    grid-column-start: first 2;
    grid-row-start: 3 last;
}
.gridItemWithSpanCustomIdent {
    grid-column-start: first span;
    grid-row-start: span last;
}
.gridItemWithSpanNumberCustomIdent {
    grid-column-start: 2 first span;
    grid-row-start: last 3 span;
}
.gridItemWithArea {
    grid-column-start: firstArea;
    grid-row-start: thirdArea;
}
</style>
<script src="resources/grid-item-column-row-parsing-utils.js"></script>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div class="grid">
    <!-- The first has no properties set on it. -->
    <div id="gridElement"></div>
    <div class="gridItemWithPositiveInteger" id="gridItemWithPositiveInteger"></div>
    <div class="gridItemWithNegativeInteger" id="gridItemWithNegativeInteger"></div>
    <div class="gridItemWithBeforeSpan" id="gridItemWithBeforeSpan"></div>
    <div class="gridItemWithAfterSpan" id="gridItemWithAfterSpan"></div>
    <div class="gridItemWithOnlySpan" id="gridItemWithOnlySpan"></div>
    <div class="gridItemWithAuto" id="gridItemWithAutoElement"></div>
    <div class="gridItemWithCustomIdent" id="gridItemWithCustomIdent"></div>
    <div class="gridItemWithNumberCustomIdent" id="gridItemWithNumberCustomIdent"></div>
    <div class="gridItemWithSpanCustomIdent" id="gridItemWithSpanCustomIdentElement"></div>
    <div class="gridItemWithSpanNumberCustomIdent" id="gridItemWithSpanNumberCustomIdentElement"></div>
    <div class="gridItemWithArea" id="gridItemWithArea"></div>
</div>
<script>
    description('Test that setting and getting grid-column-start and grid-row-start works as expected');

    debug("Test getting grid-column-start and grid-row-start set through CSS");
    var gridElement = document.getElementById("gridElement");
    shouldBe("getComputedStyle(gridElement, '').getPropertyValue('grid-column-start')", "'auto'");
    shouldBe("getComputedStyle(gridElement, '').getPropertyValue('grid-column')", "'auto / auto'");
    shouldBe("getComputedStyle(gridElement, '').getPropertyValue('grid-row-start')", "'auto'");
    shouldBe("getComputedStyle(gridElement, '').getPropertyValue('grid-row')", "'auto / auto'");

    testColumnRowCSSParsing("gridItemWithPositiveInteger", "10 / auto", "15 / auto");
    testColumnRowCSSParsing("gridItemWithNegativeInteger", "-10 / auto", "-15 / auto");
    testColumnRowCSSParsing("gridItemWithBeforeSpan", "span 2 / auto", "span 8 / auto");
    testColumnRowCSSParsing("gridItemWithAfterSpan", "span 2 / auto", "span 8 / auto");
    testColumnRowCSSParsing("gridItemWithOnlySpan", "auto / auto", "auto / auto");
    testColumnRowCSSParsing("gridItemWithAutoElement", "auto / auto", "auto / auto");
    testColumnRowCSSParsing("gridItemWithCustomIdent", "first / auto", "last / auto");
    testColumnRowCSSParsing("gridItemWithNumberCustomIdent", "2 first / auto", "3 last / auto");
    testColumnRowCSSParsing("gridItemWithSpanCustomIdentElement", "span 1 first / auto", "span 1 last / auto");
    testColumnRowCSSParsing("gridItemWithSpanNumberCustomIdentElement", "span 2 first / auto", "span 3 last / auto");
    testColumnRowCSSParsing("gridItemWithArea", "firstArea / auto", "thirdArea / auto");

    debug("");
    debug("Test the initial value");
    var element = document.createElement("div");
    document.body.appendChild(element);
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-column-start')", "'auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-column')", "'auto / auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-row-start')", "'auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-row')", "'auto / auto'");

    debug("");
    debug("Test getting and setting grid-column-start and grid-row-start through JS");
    testColumnStartRowStartJSParsing("18", "66");
    testColumnStartRowStartJSParsing("-55", "-40");
    testColumnStartRowStartJSParsing("nav", "last", "nav", "last");
    testColumnStartRowStartJSParsing("span 3", "span 20");
    testColumnStartRowStartJSParsing("span nav", "span last", "span 1 nav", "span 1 last");
    testColumnStartRowStartJSParsing("auto", "auto");
    testColumnStartRowStartJSParsing("thirdArea", "secondArea");
    testColumnStartRowStartJSParsing("nonExistentArea", "secondArea");
    testColumnStartRowStartJSParsing("secondArea", "nonExistentArea");

    debug("");
    debug("Test setting grid-start and grid-before to 'inherit' through JS");
    testStartBeforeInheritJSParsing("inherit", "18");
    testStartBeforeInheritJSParsing("2", "inherit");
    testStartBeforeInheritJSParsing("inherit", "inherit");

    debug("");
    debug("Test setting grid-start and grid-before to 'initial' through JS");
    testStartBeforeInitialJSParsing();

    debug("");
    debug("Test setting grid-column-start and grid-row-start back to 'auto' through JS");
    element.style.gridColumnStart = "18";
    element.style.gridRowStart = "66";
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-column-start')", "'18'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-column')", "'18 / auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-row-start')", "'66'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-row')", "'66 / auto'");
    element.style.gridColumnStart = "auto";
    element.style.gridRowStart = "auto";
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-column-start')", "'auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-column')", "'auto / auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-row-start')", "'auto'");
    shouldBe("getComputedStyle(element, '').getPropertyValue('grid-row')", "'auto / auto'");
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
