Bug 1355675 Part 4: Add tests of Element::getTransformTo... methods. draft
authorBrad Werth <bwerth@mozilla.com>
Thu, 25 May 2017 16:01:06 -0700
changeset 586524 5b288c9798265ec2a23f0e28e7f4ce8a46818fe8
parent 586523 33c1cf14d17e5cc4c24fabe914815813530eee70
child 631021 ca96f625a8b537290705e6786e5545e50ccbe70d
push id61442
push userbwerth@mozilla.com
push dateTue, 30 May 2017 16:47:39 +0000
bugs1355675
milestone55.0a1
Bug 1355675 Part 4: Add tests of Element::getTransformTo... methods. MozReview-Commit-ID: JQzJ3AZqNC
dom/tests/mochitest/chrome/chrome.ini
dom/tests/mochitest/chrome/test_getTransformTo.html
--- a/dom/tests/mochitest/chrome/chrome.ini
+++ b/dom/tests/mochitest/chrome/chrome.ini
@@ -58,16 +58,17 @@ skip-if = os == 'linux' && !debug # bug 
 [test_focus_docnav.xul]
 [test_focus_switchbinding.xul]
 [test_focused_link_scroll.xul]
 [test_fullscreen.xul]
 tags = fullscreen
 # disabled on linux for timeouts--bug-867745
 skip-if = os == 'linux'
 [test_geolocation.xul]
+[test_getTransformTo.html]
 [test_indexedSetter.html]
 [test_intlUtils_getDisplayNames.html]
 [test_intlUtils_getLocaleInfo.html]
 [test_moving_nodeList.xul]
 [test_moving_xhr.xul]
 [test_MozDomFullscreen_event.xul]
 tags = fullscreen
 # disabled on OS X for intermittent failures--bug-798848
new file mode 100644
--- /dev/null
+++ b/dom/tests/mochitest/chrome/test_getTransformTo.html
@@ -0,0 +1,117 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Test Element::getTransformToViewport</title>
+<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+<style>
+body {
+  margin: 0px;
+}
+.box {
+  background-color: red;
+  height: 20px;
+  width: 80px;
+}
+.a {
+  margin: 10px;
+}
+.b {
+  margin: 20px;
+}
+.c {
+  transform: translate(11px, -11px);
+}
+.d {
+  transform: skewx(-45deg);
+}
+
+</style>
+<script>
+'use strict';
+
+SimpleTest.waitForExplicitFinish();
+
+function testTransformToParent() {
+  let expectedData = [
+    ["boxA", "1,0,0,0,0,1,0,0,0,0,1,0,10,0,0,1"],
+    ["boxB", "1,0,0,0,0,1,0,0,0,0,1,0,20,0,0,1"],
+    ["boxC", "1,0,0,0,0,1,0,0,0,0,1,0,11,-11,0,1"],
+    ["boxD", "1,0,0,0,-1,1,0,0,0,0,1,0,10,0,0,1"],
+  ];
+
+  // Test transform to parent.
+  for (let i = 0; i < expectedData.length; ++i) {
+    let expected = expectedData[i];
+    let element = document.getElementById(expected[0]);
+
+    let transform = element.getTransformToParent();
+    let transformFloats = transform.toFloat32Array();
+    let transformString = transformFloats.toString();
+    is(transformString, expected[1], "Element " + expected[0] + " has expected transform to parent.");
+  }
+}
+
+function testTransformToAncestorAndViewport() {
+  let expectedData = [
+    ["boxA", "1,0,0,0,0,1,0,0,0,0,1,0,10,10,0,1"],
+    ["boxB", "1,0,0,0,0,1,0,0,0,0,1,0,20,50,0,1"],
+    ["boxC", "1,0,0,0,0,1,0,0,0,0,1,0,11,79,0,1"],
+  ];
+
+  // Test transform to document (an actual ancestor unchanged by embedding within the mochitest framework).
+  for (let i = 0; i < expectedData.length; ++i) {
+    let expected = expectedData[i];
+    let element = document.getElementById(expected[0]);
+
+    let transform = element.getTransformToAncestor(document.documentElement);
+    let transformFloats = transform.toFloat32Array();
+    let transformString = transformFloats.toString();
+    is(transformString, expected[1], "Element " + expected[0] + " has expected transform to ancestor.");
+  }
+
+  // Test transform to a non-ancestor is equivalent to transform to viewport.
+  let nonAncestorElement = document.getElementById("nonAncestor");
+  for (let i = 0; i < expectedData.length; ++i) {
+    let expected = expectedData[i];
+    let element = document.getElementById(expected[0]);
+
+    let transform = element.getTransformToAncestor(nonAncestorElement);
+    let transformFloats = transform.toFloat32Array();
+    let transformString = transformFloats.toString();
+
+    let transformToViewport = element.getTransformToViewport();
+    let transformToViewportFloats = transformToViewport.toFloat32Array();
+    let transformToViewportString = transformToViewportFloats.toString();
+    is(transformString, transformToViewportString, "Element " + expected[0] + " transform to non-ancestor is equivalent to transform to viewport.");
+  }
+}
+
+function runTests() {
+  testTransformToParent();
+  testTransformToAncestorAndViewport();
+
+  SimpleTest.finish();
+}
+</script>
+</head>
+<body onLoad="runTests();">
+
+<div id="boxAParent">
+  <div id="boxA" class="box a">boxA</div>
+</div>
+<div id="boxBParent">
+  <div id="boxB" class="box b">boxB</div>
+</div>
+<div id="boxCParent">
+  <div id="boxC" class="box c">boxC</div>
+</div>
+<div id="boxDParent">
+  <div id="boxD" class="box d">boxD</div>
+</div>
+
+<div id="nonAncestor">This div is not an ancestor of any of the boxes.</div>
+
+</body>
+</html>
\ No newline at end of file