Index: third_party/WebKit/LayoutTests/external/wpt/css/css-grid-1/support/check-layout-th.js |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/css/css-grid-1/support/check-layout-th.js b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid-1/support/check-layout-th.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3f257d4ac250e5f592bd463fb2a0d6a9f0fb0c8e |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/external/wpt/css/css-grid-1/support/check-layout-th.js |
@@ -0,0 +1,195 @@ |
+(function() { |
+// Test is initiated from body.onload, so explicit done() call is required. |
+setup({ explicit_done: true }); |
+ |
+function checkSubtreeExpectedValues(t, parent, prefix) |
+{ |
+ var checkedLayout = checkExpectedValues(t, parent, prefix); |
+ Array.prototype.forEach.call(parent.childNodes, function(node) { |
+ checkedLayout |= checkSubtreeExpectedValues(t, node, prefix); |
+ }); |
+ return checkedLayout; |
+} |
+ |
+function checkAttribute(output, node, attribute) |
+{ |
+ var result = node.getAttribute && node.getAttribute(attribute); |
+ output.checked |= !!result; |
+ return result; |
+} |
+ |
+function assert_tolerance(actual, expected, message) |
+{ |
+ if (isNaN(expected) || Math.abs(actual - expected) >= 1) { |
+ assert_equals(actual, Number(expected), message); |
+ } |
+} |
+ |
+function checkExpectedValues(t, node, prefix) |
+{ |
+ var output = { checked: false }; |
+ |
+ var expectedWidth = checkAttribute(output, node, "data-expected-width"); |
+ if (expectedWidth) { |
+ assert_tolerance(node.offsetWidth, expectedWidth, prefix + "width"); |
+ } |
+ |
+ var expectedHeight = checkAttribute(output, node, "data-expected-height"); |
+ if (expectedHeight) { |
+ assert_tolerance(node.offsetHeight, expectedHeight, prefix + "height"); |
+ } |
+ |
+ var expectedOffset = checkAttribute(output, node, "data-offset-x"); |
+ if (expectedOffset) { |
+ assert_tolerance(node.offsetLeft, expectedOffset, prefix + "offsetLeft"); |
+ } |
+ |
+ var expectedOffset = checkAttribute(output, node, "data-offset-y"); |
+ if (expectedOffset) { |
+ assert_tolerance(node.offsetTop, expectedOffset, prefix + "offsetTop"); |
+ } |
+ |
+ var expectedWidth = checkAttribute(output, node, "data-expected-client-width"); |
+ if (expectedWidth) { |
+ assert_tolerance(node.clientWidth, expectedWidth, prefix + "clientWidth"); |
+ } |
+ |
+ var expectedHeight = checkAttribute(output, node, "data-expected-client-height"); |
+ if (expectedHeight) { |
+ assert_tolerance(node.clientHeight, expectedHeight, prefix + "clientHeight"); |
+ } |
+ |
+ var expectedWidth = checkAttribute(output, node, "data-expected-scroll-width"); |
+ if (expectedWidth) { |
+ assert_tolerance(node.scrollWidth, expectedWidth, prefix + "scrollWidth"); |
+ } |
+ |
+ var expectedHeight = checkAttribute(output, node, "data-expected-scroll-height"); |
+ if (expectedHeight) { |
+ assert_tolerance(node.scrollHeight, expectedHeight, prefix + "scrollHeight"); |
+ } |
+ |
+ var expectedWidth = checkAttribute(output, node, "data-expected-bounding-client-rect-width"); |
+ if (expectedWidth) { |
+ assert_tolerance(node.getBoundingClientRect().width, expectedWidth, prefix + "getBoundingClientRect().width"); |
+ } |
+ |
+ var expectedOffset = checkAttribute(output, node, "data-total-x"); |
+ if (expectedOffset) { |
+ var totalLeft = node.clientLeft + node.offsetLeft; |
+ assert_tolerance(totalLeft, expectedOffset, prefix + |
+ "clientLeft+offsetLeft (" + node.clientLeft + " + " + node.offsetLeft + ")"); |
+ } |
+ |
+ var expectedOffset = checkAttribute(output, node, "data-total-y"); |
+ if (expectedOffset) { |
+ var totalTop = node.clientTop + node.offsetTop; |
+ assert_tolerance(totalTop, expectedOffset, prefix + |
+ "clientTop+offsetTop (" + node.clientTop + " + " + node.offsetTop + ")"); |
+ } |
+ |
+ var expectedDisplay = checkAttribute(output, node, "data-expected-display"); |
+ if (expectedDisplay) { |
+ var actualDisplay = getComputedStyle(node).display; |
+ assert_equals(actualDisplay, expectedDisplay, prefix + "display"); |
+ } |
+ |
+ var expectedPaddingTop = checkAttribute(output, node, "data-expected-padding-top"); |
+ if (expectedPaddingTop) { |
+ var actualPaddingTop = getComputedStyle(node).paddingTop; |
+ // Trim the unit "px" from the output. |
+ actualPaddingTop = actualPaddingTop.slice(0, -2); |
+ assert_equals(actualPaddingTop, expectedPaddingTop, prefix + "padding-top"); |
+ } |
+ |
+ var expectedPaddingBottom = checkAttribute(output, node, "data-expected-padding-bottom"); |
+ if (expectedPaddingBottom) { |
+ var actualPaddingBottom = getComputedStyle(node).paddingBottom; |
+ // Trim the unit "px" from the output. |
+ actualPaddingBottom = actualPaddingBottom.slice(0, -2); |
+ assert_equals(actualPaddingBottom, expectedPaddingBottom, prefix + "padding-bottom"); |
+ } |
+ |
+ var expectedPaddingLeft = checkAttribute(output, node, "data-expected-padding-left"); |
+ if (expectedPaddingLeft) { |
+ var actualPaddingLeft = getComputedStyle(node).paddingLeft; |
+ // Trim the unit "px" from the output. |
+ actualPaddingLeft = actualPaddingLeft.slice(0, -2); |
+ assert_equals(actualPaddingLeft, expectedPaddingLeft, prefix + "padding-left"); |
+ } |
+ |
+ var expectedPaddingRight = checkAttribute(output, node, "data-expected-padding-right"); |
+ if (expectedPaddingRight) { |
+ var actualPaddingRight = getComputedStyle(node).paddingRight; |
+ // Trim the unit "px" from the output. |
+ actualPaddingRight = actualPaddingRight.slice(0, -2); |
+ assert_equals(actualPaddingRight, expectedPaddingRight, prefix + "padding-right"); |
+ } |
+ |
+ var expectedMarginTop = checkAttribute(output, node, "data-expected-margin-top"); |
+ if (expectedMarginTop) { |
+ var actualMarginTop = getComputedStyle(node).marginTop; |
+ // Trim the unit "px" from the output. |
+ actualMarginTop = actualMarginTop.slice(0, -2); |
+ assert_equals(actualMarginTop, expectedMarginTop, prefix + "margin-top"); |
+ } |
+ |
+ var expectedMarginBottom = checkAttribute(output, node, "data-expected-margin-bottom"); |
+ if (expectedMarginBottom) { |
+ var actualMarginBottom = getComputedStyle(node).marginBottom; |
+ // Trim the unit "px" from the output. |
+ actualMarginBottom = actualMarginBottom.slice(0, -2); |
+ assert_equals(actualMarginBottom, expectedMarginBottom, prefix + "margin-bottom"); |
+ } |
+ |
+ var expectedMarginLeft = checkAttribute(output, node, "data-expected-margin-left"); |
+ if (expectedMarginLeft) { |
+ var actualMarginLeft = getComputedStyle(node).marginLeft; |
+ // Trim the unit "px" from the output. |
+ actualMarginLeft = actualMarginLeft.slice(0, -2); |
+ assert_equals(actualMarginLeft, expectedMarginLeft, prefix + "margin-left"); |
+ } |
+ |
+ var expectedMarginRight = checkAttribute(output, node, "data-expected-margin-right"); |
+ if (expectedMarginRight) { |
+ var actualMarginRight = getComputedStyle(node).marginRight; |
+ // Trim the unit "px" from the output. |
+ actualMarginRight = actualMarginRight.slice(0, -2); |
+ assert_equals(actualMarginRight, expectedMarginRight, prefix + "margin-right"); |
+ } |
+ |
+ return output.checked; |
+} |
+ |
+window.checkLayout = function(selectorList, outputContainer) |
+{ |
+ if (!selectorList) { |
+ console.error("You must provide a CSS selector of nodes to check."); |
+ return; |
+ } |
+ var nodes = document.querySelectorAll(selectorList); |
+ var testNumber = 0; |
+ nodes = Array.prototype.slice.call(nodes); |
+ nodes.reverse(); |
+ var checkedLayout = false; |
+ Array.prototype.forEach.call(nodes, function(node) { |
+ test(function(t) { |
+ var container = node.parentNode.className == 'container' ? node.parentNode : node; |
+ var prefix = "\n" + container.outerHTML + "\n"; |
+ var passed = false; |
+ try { |
+ checkedLayout |= checkExpectedValues(t, node.parentNode, prefix); |
+ checkedLayout |= checkSubtreeExpectedValues(t, node, prefix); |
+ passed = true; |
+ } finally { |
+ checkedLayout |= !passed; |
+ } |
+ }, selectorList + ' ' + String(++testNumber)); |
+ }); |
+ if (!checkedLayout) { |
+ console.error("No valid data-* attributes found in selector list : " + selectorList); |
+ } |
+ done(); |
+}; |
+ |
+})(); |