Commit 8cd900c7 authored by rego@igalia.com's avatar rego@igalia.com

[CSS Grid Layout] Prevent issues with checkLayout() in grid items

When we use checkLayout() on a grid item, the results (PASS or FAIL
messages) are added as new auto-placed items in the grid. This causes
that the grid is marked as dirty which could hide bugs in the tests.

Modify the related layout tests to use a different container for the
test results. Updated expectations accordingly.

There is one test missing
"grid-item-addition-auto-placement-update.html". Which will be modified
in the patch to fix the bug in RenderGrid::addChild() (see
https://codereview.chromium.org/198703004/).

Review URL: https://codereview.chromium.org/208133003

git-svn-id: svn://svn.chromium.org/blink/trunk@169777 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent dd97f207
This test checks that grid-auto-{row|column} updates properly recomputes the grid items' sizes. This test checks that grid-auto-{row|column} updates properly recomputes the grid items' sizes.
XXXXX XXXXXX XXXXX XXXXXX
XXXXX XXXXXX
XXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
...@@ -9,7 +11,6 @@ PASS ...@@ -9,7 +11,6 @@ PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
...@@ -19,7 +20,6 @@ PASS ...@@ -19,7 +20,6 @@ PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
......
...@@ -24,12 +24,12 @@ function updateAndCheck(gridElementID, defaultSizing, gridItemSize) ...@@ -24,12 +24,12 @@ function updateAndCheck(gridElementID, defaultSizing, gridItemSize)
gridItem.setAttribute("data-expected-width", gridItemSize.width); gridItem.setAttribute("data-expected-width", gridItemSize.width);
gridItem.setAttribute("data-expected-height", gridItemSize.height); gridItem.setAttribute("data-expected-height", gridItemSize.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, document.getElementById("test-output"));
} }
function updateGridAutoRowsColumns() function updateGridAutoRowsColumns()
{ {
checkLayout('.grid'); checkLayout('.grid', document.getElementById("test-output"));
// The constrained example is always sized to the min width so we don't test max width. // The constrained example is always sized to the min width so we don't test max width.
updateAndCheck("constrainedGrid", { 'rows': 'minmax(20em, 15px)', 'columns': '50px' }, { 'width': '50px', 'height': '200px' }); updateAndCheck("constrainedGrid", { 'rows': 'minmax(20em, 15px)', 'columns': '50px' }, { 'width': '50px', 'height': '200px' });
...@@ -84,5 +84,7 @@ window.addEventListener("load", updateGridAutoRowsColumns, false); ...@@ -84,5 +84,7 @@ window.addEventListener("load", updateGridAutoRowsColumns, false);
</div> </div>
</div> </div>
<div id="test-output"></div>
</body> </body>
</html> </html>
This test checks that grid-{rows|columns} dynamic updates properly relayout the grid items. This test checks that grid-{rows|columns} dynamic updates properly relayout the grid items.
XXXXX XXXXXX XXXXX XXXXXX
XXXXX XXXXXX
XXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
......
...@@ -11,7 +11,7 @@ function testLayout(gridElementID, gridTracks, size) ...@@ -11,7 +11,7 @@ function testLayout(gridElementID, gridTracks, size)
var gridItem = gridElement.firstChild.nextSibling; var gridItem = gridElement.firstChild.nextSibling;
gridItem.setAttribute("data-expected-width", size.width); gridItem.setAttribute("data-expected-width", size.width);
gridItem.setAttribute("data-expected-height", size.height); gridItem.setAttribute("data-expected-height", size.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, document.getElementById("test-output"));
} }
function updateRowsColumns() function updateRowsColumns()
...@@ -63,5 +63,8 @@ window.addEventListener("load", updateRowsColumns, false); ...@@ -63,5 +63,8 @@ window.addEventListener("load", updateRowsColumns, false);
<div class="sizedToGridArea">XXXXX XXXXXX</div> <div class="sizedToGridArea">XXXXX XXXXXX</div>
</div> </div>
</div> </div>
<div id="test-output"></div>
</body> </body>
</html> </html>
This test checks that the tracks' auto positions are recomputed after removing a grid item. This test checks that the tracks' auto positions are recomputed after removing a grid item.
XXXXX XXXXX XXXXX
XXXXX XXXXX XXXXX
XXXXX XXXXX XXXXX
XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXX XXXXX
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXX XXXXX
PASS PASS
PASS PASS
PASS PASS
PASS PASS
PASS PASS
XXXXX XXXXX XXXXX
PASS PASS
PASS PASS
PASS PASS
......
...@@ -20,30 +20,31 @@ function testRemoval(gridElementID, autoFlowElementID, size) ...@@ -20,30 +20,31 @@ function testRemoval(gridElementID, autoFlowElementID, size)
autoFlowElement.setAttribute("data-expected-width", size.width); autoFlowElement.setAttribute("data-expected-width", size.width);
autoFlowElement.setAttribute("data-expected-height", size.height); autoFlowElement.setAttribute("data-expected-height", size.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, document.getElementById("test-output"));
} }
function testRemovals() function testRemovals()
{ {
checkLayout("#autoFlowColumnElement"); var testOutput = document.getElementById("test-output");
checkLayout("#autoFlowColumnElement", testOutput);
testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '100', 'height': '100' }); testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '100', 'height': '100' });
testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '100', 'height': '50' }); testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '100', 'height': '50' });
testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '50', 'height': '100' }); testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '50', 'height': '100' });
testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '50', 'height': '50' }); testRemoval("gridAutoFlowColumn", "autoFlowColumnElement", { 'width': '50', 'height': '50' });
checkLayout("#autoFlowRowElement"); checkLayout("#autoFlowRowElement", testOutput);
testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '100', 'height': '100' }); testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '100', 'height': '100' });
testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '100', 'height': '50' }); testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '100', 'height': '50' });
testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '50', 'height': '50' }); testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '50', 'height': '50' });
testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '50', 'height': '50' }); testRemoval("gridAutoFlowRow", "autoFlowRowElement", { 'width': '50', 'height': '50' });
checkLayout("#gridAutoFlowColumnWithAutoItems"); checkLayout("#gridAutoFlowColumnWithAutoItems", testOutput);
testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '100', 'height': '100' }); testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '100', 'height': '100' });
testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '100', 'height': '50' }); testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '100', 'height': '50' });
testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '50', 'height': '100' }); testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '50', 'height': '100' });
testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '50', 'height': '50' }); testRemoval("gridAutoFlowColumnWithAutoItems", "autoFlowRowElementWithAutoItems", { 'width': '50', 'height': '50' });
checkLayout("#gridAutoFlowRowWithAutoAndFixedItems"); checkLayout("#gridAutoFlowRowWithAutoAndFixedItems", testOutput);
testRemoval("gridAutoFlowRowWithAutoAndFixedItems", "autoFlowRowElementWithAutoAndFixedItems", { 'width': '100', 'height': '100' }); testRemoval("gridAutoFlowRowWithAutoAndFixedItems", "autoFlowRowElementWithAutoAndFixedItems", { 'width': '100', 'height': '100' });
testRemoval("gridAutoFlowRowWithAutoAndFixedItems", "autoFlowRowElementWithAutoAndFixedItems", { 'width': '100', 'height': '50' }); testRemoval("gridAutoFlowRowWithAutoAndFixedItems", "autoFlowRowElementWithAutoAndFixedItems", { 'width': '100', 'height': '50' });
testRemoval("gridAutoFlowRowWithAutoAndFixedItems", "autoFlowRowElementWithAutoAndFixedItems", { 'width': '100', 'height': '50' }); testRemoval("gridAutoFlowRowWithAutoAndFixedItems", "autoFlowRowElementWithAutoAndFixedItems", { 'width': '100', 'height': '50' });
...@@ -95,5 +96,7 @@ window.addEventListener("load", testRemovals, false); ...@@ -95,5 +96,7 @@ window.addEventListener("load", testRemovals, false);
</div> </div>
</div> </div>
<div id="test-output"></div>
</body> </body>
</html> </html>
This test checks that the tracks' breadth are recomputed after removing a grid item. This test checks that the tracks' breadth are recomputed after removing a grid item.
XXX XXX XXX XXX XXX XXX
XXX XXX XXX
XXX XXX XXX
XXX XXX XXX
XXX XXX XXX
XXX XXX XXX
XXX XXX XXX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XXX XXX XXX
PASS PASS
PASS PASS
PASS PASS
XXX XXX XXX
PASS PASS
PASS PASS
PASS PASS
XXX XXX XXX
PASS PASS
PASS PASS
PASS PASS
XXX XXX XXX
PASS PASS
PASS PASS
PASS PASS
XXX XXX XXX
PASS PASS
PASS PASS
PASS PASS
XXX XXX XXX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
XX XX XX XX XX XX
PASS PASS
PASS PASS
PASS PASS
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
<script> <script>
function testRemoval(gridElementID, size1, size2, size3) function testRemoval(gridElementID, size1, size2, size3)
{ {
var testOutput = document.getElementById("test-output");
var gridElement = document.getElementById(gridElementID); var gridElement = document.getElementById(gridElementID);
var gridItem1 = gridElement.firstChild.nextSibling; var gridItem1 = gridElement.firstChild.nextSibling;
var gridItem2 = gridItem1.nextSibling.nextSibling; var gridItem2 = gridItem1.nextSibling.nextSibling;
...@@ -53,19 +54,19 @@ function testRemoval(gridElementID, size1, size2, size3) ...@@ -53,19 +54,19 @@ function testRemoval(gridElementID, size1, size2, size3)
gridItem2.setAttribute("data-expected-height", size1.height); gridItem2.setAttribute("data-expected-height", size1.height);
gridItem3.setAttribute("data-expected-width", size1.width); gridItem3.setAttribute("data-expected-width", size1.width);
gridItem3.setAttribute("data-expected-height", size1.height); gridItem3.setAttribute("data-expected-height", size1.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, testOutput);
gridElement.removeChild(gridItem1); gridElement.removeChild(gridItem1);
gridItem2.setAttribute("data-expected-width", size2.width); gridItem2.setAttribute("data-expected-width", size2.width);
gridItem2.setAttribute("data-expected-height", size2.height); gridItem2.setAttribute("data-expected-height", size2.height);
gridItem3.setAttribute("data-expected-width", size2.width); gridItem3.setAttribute("data-expected-width", size2.width);
gridItem3.setAttribute("data-expected-height", size2.height); gridItem3.setAttribute("data-expected-height", size2.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, testOutput);
gridElement.removeChild(gridItem2); gridElement.removeChild(gridItem2);
gridItem3.setAttribute("data-expected-width", size3.width); gridItem3.setAttribute("data-expected-width", size3.width);
gridItem3.setAttribute("data-expected-height", size3.height); gridItem3.setAttribute("data-expected-height", size3.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, testOutput);
} }
function testRemovals() function testRemovals()
...@@ -279,5 +280,7 @@ window.addEventListener("load", testRemovals, false); ...@@ -279,5 +280,7 @@ window.addEventListener("load", testRemovals, false);
</div> </div>
</div> </div>
<div id="test-output"></div>
</body> </body>
</html> </html>
...@@ -26,7 +26,7 @@ function testLayout(gridElementID, gridTracks, size) ...@@ -26,7 +26,7 @@ function testLayout(gridElementID, gridTracks, size)
var gridItem = gridElement.firstChild.nextSibling; var gridItem = gridElement.firstChild.nextSibling;
gridItem.setAttribute("data-expected-width", size.width); gridItem.setAttribute("data-expected-width", size.width);
gridItem.setAttribute("data-expected-height", size.height); gridItem.setAttribute("data-expected-height", size.height);
checkLayout("#" + gridElementID) checkLayout("#" + gridElementID, document.getElementById("test-output"))
} }
function runTests() function runTests()
...@@ -56,5 +56,7 @@ window.addEventListener("load", runTests, false); ...@@ -56,5 +56,7 @@ window.addEventListener("load", runTests, false);
<div id="maxHeightPercent"></div> <div id="maxHeightPercent"></div>
</div> </div>
<div id="test-output"></div>
</body> </body>
</html> </html>
This test checks that we properly recompute our grid tracks' sizes when a grid item changes its grid-row or grid-column. This test checks that we properly recompute our grid tracks' sizes when a grid item changes its grid-row or grid-column.
XXXX XXXX XXXX XXXX XXXX XXXX
XXXX XXXX XXXX
XXXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
...@@ -22,7 +24,6 @@ PASS ...@@ -22,7 +24,6 @@ PASS
PASS PASS
PASS PASS
PASS PASS
XXXX XXXX XXXX
PASS PASS
PASS PASS
PASS PASS
...@@ -44,7 +45,6 @@ PASS ...@@ -44,7 +45,6 @@ PASS
PASS PASS
PASS PASS
PASS PASS
XXXXXX XXXXXX
PASS PASS
PASS PASS
PASS PASS
......
...@@ -16,7 +16,7 @@ function testPosition(gridElementID, position, size) ...@@ -16,7 +16,7 @@ function testPosition(gridElementID, position, size)
gridItem.style.gridRow = position.row; gridItem.style.gridRow = position.row;
gridItem.setAttribute("data-expected-width", size.width); gridItem.setAttribute("data-expected-width", size.width);
gridItem.setAttribute("data-expected-height", size.height); gridItem.setAttribute("data-expected-height", size.height);
checkLayout("#" + gridElementID); checkLayout("#" + gridElementID, document.getElementById("test-output"));
} }
function updateImplicitGridColumn() function updateImplicitGridColumn()
...@@ -121,5 +121,7 @@ window.addEventListener("load", updateImplicitGridColumn, false); ...@@ -121,5 +121,7 @@ window.addEventListener("load", updateImplicitGridColumn, false);
<div class="grid gridFixedContent" id="unconstrainedGrid"><div class="sizedToGridArea">XXXXXX XXXXXX</div></div> <div class="grid gridFixedContent" id="unconstrainedGrid"><div class="sizedToGridArea">XXXXXX XXXXXX</div></div>
</div> </div>
<div id="test-output"></div>
</body> </body>
</html> </html>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment