summaryrefslogtreecommitdiffstats
path: root/browser/tools/mozscreenshots/tests/browser/browser_boundingbox.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/tools/mozscreenshots/tests/browser/browser_boundingbox.js')
-rw-r--r--browser/tools/mozscreenshots/tests/browser/browser_boundingbox.js173
1 files changed, 173 insertions, 0 deletions
diff --git a/browser/tools/mozscreenshots/tests/browser/browser_boundingbox.js b/browser/tools/mozscreenshots/tests/browser/browser_boundingbox.js
new file mode 100644
index 0000000000..cef3fa7de1
--- /dev/null
+++ b/browser/tools/mozscreenshots/tests/browser/browser_boundingbox.js
@@ -0,0 +1,173 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+"use strict";
+
+/* import-globals-from ../../head.js */
+
+add_task(async function () {
+ const scale = window.docShell.QueryInterface(
+ Ci.nsIBaseWindow
+ ).devicePixelsPerDesktopPixel;
+ let { bounds, rects } = TestRunner._findBoundingBox(["#tabbrowser-tabs"]);
+ let tabBar = document.querySelector("#tabbrowser-tabs");
+ let tabBarRect = tabBar.getBoundingClientRect();
+
+ // Calculate expected values
+ let expectedLeft = scale * (tabBar.screenX - TestRunner.croppingPadding);
+ let expectedTop = scale * (tabBar.screenY - TestRunner.croppingPadding);
+ let expectedRight =
+ scale * (tabBarRect.width + TestRunner.croppingPadding * 2) + expectedLeft;
+ let expectedBottom =
+ scale * (tabBarRect.height + TestRunner.croppingPadding * 2) + expectedTop;
+
+ // Calculate browser region
+ let windowLeft = window.screenX * scale;
+ let windowTop = window.screenY * scale;
+ let windowRight = window.outerWidth * scale + windowLeft;
+ let windowBottom = window.outerHeight * scale + windowTop;
+
+ // Adjust values based on browser window
+ expectedLeft = Math.max(expectedLeft, windowLeft);
+ expectedTop = Math.max(expectedTop, windowTop);
+ expectedRight = Math.min(expectedRight, windowRight);
+ expectedBottom = Math.min(expectedBottom, windowBottom);
+ // Check width calculation on simple example
+ is(
+ bounds.width,
+ expectedRight - expectedLeft,
+ "Checking _findBoundingBox width calculation"
+ );
+ // Check height calculation on simple example
+ is(
+ bounds.height,
+ expectedBottom - expectedTop,
+ "Checking _findBoundingBox height caclulation"
+ );
+ is(
+ bounds.left,
+ rects[0].left,
+ "Checking _findBoundingBox union.left and rect.left is the same for a single selector"
+ );
+ is(
+ bounds.right,
+ rects[0].right,
+ "Checking _findBoundingBox union.right and rect.right is the same for a single selector"
+ );
+ is(
+ bounds.top,
+ rects[0].top,
+ "Checking _findBoundingBox union.top and rect.top is the same for a single selector"
+ );
+ is(
+ bounds.bottom,
+ rects[0].bottom,
+ "Checking _findBoundingBox union.bottom and rect.bottom is the same for a single selector"
+ );
+
+ let result = TestRunner._findBoundingBox(["#forward-button", "#TabsToolbar"]);
+ bounds = result.bounds;
+ rects = result.rects;
+
+ let tabToolbar = document.querySelector("#TabsToolbar");
+ let tabToolbarRect = tabToolbar.getBoundingClientRect();
+ let fButton = document.querySelector("#forward-button");
+ let fButtonRect = fButton.getBoundingClientRect();
+
+ // Calculate expected values
+ expectedLeft =
+ scale *
+ (Math.min(tabToolbar.screenX, fButton.screenX) -
+ TestRunner.croppingPadding);
+ expectedTop =
+ scale *
+ (Math.min(tabToolbar.screenY, fButton.screenY) -
+ TestRunner.croppingPadding);
+ expectedRight =
+ scale *
+ (Math.max(
+ tabToolbarRect.width + tabToolbar.screenX,
+ fButtonRect.width + fButton.screenX
+ ) +
+ TestRunner.croppingPadding);
+ expectedBottom =
+ scale *
+ (Math.max(
+ tabToolbarRect.height + tabToolbar.screenY,
+ fButtonRect.height + fButton.screenY
+ ) +
+ TestRunner.croppingPadding);
+
+ // Adjust values based on browser window
+ expectedLeft = Math.max(expectedLeft, windowLeft);
+ expectedTop = Math.max(expectedTop, windowTop);
+ expectedRight = Math.min(expectedRight, windowRight);
+ expectedBottom = Math.min(expectedBottom, windowBottom);
+
+ // Check width calculation on union
+ is(
+ bounds.width,
+ expectedRight - expectedLeft,
+ "Checking _findBoundingBox union width calculation"
+ );
+ // Check height calculation on union
+ is(
+ bounds.height,
+ expectedBottom - expectedTop,
+ "Checking _findBoundingBox union height calculation"
+ );
+ // Check single selector's left position
+ is(
+ rects[0].left,
+ Math.max(
+ scale * (fButton.screenX - TestRunner.croppingPadding),
+ windowLeft
+ ),
+ "Checking single selector's left position when _findBoundingBox has multiple selectors"
+ );
+ // Check single selector's right position
+ is(
+ rects[0].right,
+ Math.min(
+ scale *
+ (fButtonRect.width + fButton.screenX + TestRunner.croppingPadding),
+ windowRight
+ ),
+ "Checking single selector's right position when _findBoundingBox has multiple selectors"
+ );
+ // Check single selector's top position
+ is(
+ rects[0].top,
+ Math.max(scale * (fButton.screenY - TestRunner.croppingPadding), windowTop),
+ "Checking single selector's top position when _findBoundingBox has multiple selectors"
+ );
+ // Check single selector's bottom position
+ is(
+ rects[0].bottom,
+ Math.min(
+ scale *
+ (fButtonRect.height + fButton.screenY + TestRunner.croppingPadding),
+ windowBottom
+ ),
+ "Checking single selector's bottom position when _findBoundingBox has multiple selectors"
+ );
+
+ // Check that nonexistent selectors throws an exception
+ Assert.throws(
+ () => {
+ TestRunner._findBoundingBox(["#does_not_exist"]);
+ },
+ /No element for '#does_not_exist' found/,
+ "Checking that nonexistent selectors throws an exception"
+ );
+
+ // Check that no selectors throws an exception
+ Assert.throws(
+ () => {
+ TestRunner._findBoundingBox([]);
+ },
+ /No selectors specified/,
+ "Checking that no selectors throws an exception"
+ );
+});