4 <link href="resources/grid.css" rel="stylesheet">
7 grid-template: "firstArea secondArea"
15 #oneValueIdentGridArea {
20 grid-area: -1 / span 1;
23 #twoValueIdentGridArea {
24 grid-area: firstArea / secondArea;
28 grid-area: span / 10 / -1;
32 grid-area: -5 / 5 span / span 8 / 9;
35 #fourValueMixedGridArea {
36 grid-area: firstArea / span / nonExistent / "foobar";
39 <script src="../js/resources/js-test-pre.js"></script>
43 <div id="oneValueGridArea"></div>
44 <div id="oneValueIdentGridArea"></div>
45 <div id="twoValueGridArea"></div>
46 <div id="twoValueIdentGridArea"></div>
47 <div id="threeValueGridArea"></div>
48 <div id="fourValueGridArea"></div>
49 <div id="fourValueMixedGridArea"></div>
52 description('This test checks that grid-area is properly parsed and stored internally.');
53 function valueOrDefaultGridPosition(gridPosition)
55 return gridPosition === undefined ? "auto" : gridPosition;
58 function checkColumnRowValues(gridItem, gridRowStart, gridColumnStart, gridRowEnd, gridColumnEnd)
60 this.gridItem = gridItem;
61 shouldBeEqualToString("getComputedStyle(gridItem, '').getPropertyValue('grid-row-start')", gridRowStart);
62 shouldBeEqualToString("getComputedStyle(gridItem, '').getPropertyValue('grid-column-start')", valueOrDefaultGridPosition(gridColumnStart));
63 shouldBeEqualToString("getComputedStyle(gridItem, '').getPropertyValue('grid-row-end')", valueOrDefaultGridPosition(gridRowEnd));
64 shouldBeEqualToString("getComputedStyle(gridItem, '').getPropertyValue('grid-column-end')", valueOrDefaultGridPosition(gridColumnEnd));
67 function testGridAreaCSSParsing(gridItemId, gridRowStart, gridColumnStart, gridRowEnd, gridColumnEnd)
69 checkColumnRowValues(document.getElementById(gridItemId), gridRowStart, gridColumnStart, gridRowEnd, gridColumnEnd);
72 function testGridAreaJSParsing(gridAreaValue)
74 var element = document.createElement("div");
75 document.body.appendChild(element);
76 // Pre-fill it with values to detect that we properly handle and reset unset values.
77 element.style.gridArea = "1 / 2 / 3 / 4";
78 element.style.gridArea = gridAreaValue;
80 // Get the different values.
81 var gridColumnRowValues = gridAreaValue.split("/");
82 var gridRowStart = gridColumnRowValues[1] ? gridColumnRowValues[1].trim() : undefined;
83 var gridColumnEnd = gridColumnRowValues[2] ? gridColumnRowValues[2].trim() : undefined;
84 var gridRowEnd = gridColumnRowValues[3] ? gridColumnRowValues[3].trim() : undefined;
85 checkColumnRowValues(element, gridColumnRowValues[0].trim(), gridRowStart, gridColumnEnd, gridRowEnd);
86 document.body.removeChild(element);
89 function testGridAreaInvalidJSParsing(gridAreaValue)
91 var element = document.createElement("div");
92 document.body.appendChild(element);
93 checkColumnRowValues(element, "auto", "auto", "auto", "auto");
94 document.body.removeChild(element);
97 function testInitialGridArea()
99 var element = document.createElement("div");
100 document.body.appendChild(element);
101 element.style.gridArea = "1 / 2 / 3 / 4";
102 checkColumnRowValues(element, "1", "2", "3", "4");
104 element.style.gridArea = "initial";
105 checkColumnRowValues(element, "auto", "auto", "auto", "auto");
107 document.body.removeChild(element);
110 function testInheritGridArea()
112 var parentElement = document.createElement("div");
113 document.body.appendChild(parentElement);
114 parentElement.style.gridArea = "1 / 2 / 3 / 4";
115 checkColumnRowValues(parentElement, "1", "2", "3", "4");
117 var element = document.createElement("div");
118 parentElement.appendChild(element);
119 element.style.gridArea = "inherit";
120 checkColumnRowValues(element, "1", "2", "3", "4");
122 document.body.removeChild(parentElement);
125 debug("Test getting grid-area set through CSS");
126 testGridAreaCSSParsing("oneValueGridArea", "1");
127 testGridAreaCSSParsing("oneValueIdentGridArea", "thirdArea", "thirdArea", "thirdArea", "thirdArea");
128 testGridAreaCSSParsing("twoValueGridArea", "-1", "span 1");
129 testGridAreaCSSParsing("twoValueIdentGridArea", "firstArea", "secondArea", "firstArea", "secondArea");
130 testGridAreaCSSParsing("threeValueGridArea", "span 1", "10", "-1");
131 testGridAreaCSSParsing("fourValueGridArea", "-5", "span 5", "span 8", "9");
132 testGridAreaCSSParsing("fourValueMixedGridArea", "firstArea", "span 1", "auto", "1 foobar");
135 debug("Test getting and setting grid-area set through JS");
136 testGridAreaJSParsing("-1");
137 testGridAreaJSParsing("-1 / span 5");
138 testGridAreaJSParsing("-1 / 10 / span 3");
141 debug("Test setting grid-area to 'initial' through JS");
142 testInitialGridArea();
145 debug("Test setting grid-area to 'inherit' through JS");
146 testInheritGridArea();
149 debug("Test setting some positions to invalid values through JS");
150 testGridAreaInvalidJSParsing("span / span / span /");
151 testGridAreaInvalidJSParsing("1/ span span / 1 / span");
152 testGridAreaInvalidJSParsing("span / 1 / -1 / 1 -1");
153 testGridAreaInvalidJSParsing("span / 1 / -1 / 1 span -1");