diff --git a/devtools/client/responsive.html/components/resizable-viewport.js b/devtools/client/responsive.html/components/resizable-viewport.js
index 16d3c79c0477..f76ab7d4b23d 100644
--- a/devtools/client/responsive.html/components/resizable-viewport.js
+++ b/devtools/client/responsive.html/components/resizable-viewport.js
@@ -75,10 +75,10 @@ module.exports = createClass({
}
let { lastClientX, lastClientY, ignoreX, ignoreY } = this.state;
- // we are resizing a centered viewport, so dragging a mouse resizes
- // twice as much - also on opposite side.
+ // the viewport is centered horizontally, so horizontal resize resizes
+ // by twice the distance the mouse was dragged - on left and right side.
let deltaX = 2 * (clientX - lastClientX);
- let deltaY = 2 * (clientY - lastClientY);
+ let deltaY = (clientY - lastClientY);
if (ignoreX) {
deltaX = 0;
diff --git a/devtools/client/responsive.html/test/browser/browser_mouse_resize.js b/devtools/client/responsive.html/test/browser/browser_mouse_resize.js
index e0ed710a25da..6a92135b50a6 100644
--- a/devtools/client/responsive.html/test/browser/browser_mouse_resize.js
+++ b/devtools/client/responsive.html/test/browser/browser_mouse_resize.js
@@ -5,34 +5,55 @@ http://creativecommons.org/publicdomain/zero/1.0/ */
const TEST_URL = "about:logo";
-function dragElementBy(selector, x, y, win) {
+function getElRect(selector, win) {
let el = win.document.querySelector(selector);
- let rect = el.getBoundingClientRect();
+ return el.getBoundingClientRect();
+}
+
+/**
+ * Drag an element identified by 'selector' by [x,y] amount. Returns
+ * the rect of the dragged element as it was before drag.
+ */
+function dragElementBy(selector, x, y, win) {
+ let rect = getElRect(selector, win);
let startPoint = [ rect.left + rect.width / 2, rect.top + rect.height / 2 ];
let endPoint = [ startPoint[0] + x, startPoint[1] + y ];
EventUtils.synthesizeMouseAtPoint(...startPoint, { type: "mousedown" }, win);
EventUtils.synthesizeMouseAtPoint(...endPoint, { type: "mousemove" }, win);
EventUtils.synthesizeMouseAtPoint(...endPoint, { type: "mouseup" }, win);
+
+ return rect;
+}
+
+function* testViewportResize(ui, selector, moveBy,
+ expectedViewportSize, expectedHandleMove) {
+ let win = ui.toolWindow;
+
+ let resized = waitForViewportResizeTo(ui, ...expectedViewportSize);
+ let startRect = dragElementBy(selector, ...moveBy, win);
+ yield resized;
+
+ let endRect = getElRect(selector, win);
+ is(endRect.left - startRect.left, expectedHandleMove[0],
+ `The x move of ${selector} is as expected`);
+ is(endRect.top - startRect.top, expectedHandleMove[1],
+ `The y move of ${selector} is as expected`);
}
addRDMTask(TEST_URL, function* ({ ui, manager }) {
ok(ui, "An instance of the RDM should be attached to the tab.");
yield setViewportSize(ui, manager, 300, 300);
- let win = ui.toolWindow;
// Do horizontal + vertical resize
- let resized = waitForViewportResizeTo(ui, 320, 320);
- dragElementBy(".viewport-resize-handle", 10, 10, win);
- yield resized;
+ yield testViewportResize(ui, ".viewport-resize-handle",
+ [10, 10], [320, 310], [10, 10]);
// Do horizontal resize
- let hResized = waitForViewportResizeTo(ui, 300, 320);
- dragElementBy(".viewport-horizontal-resize-handle", -10, -10, win);
- yield hResized;
+ yield testViewportResize(ui, ".viewport-horizontal-resize-handle",
+ [-10, 10], [300, 310], [-10, 0]);
// Do vertical resize
- let vResized = waitForViewportResizeTo(ui, 300, 300);
- dragElementBy(".viewport-vertical-resize-handle", -10, -10, win);
- yield vResized;
+ yield testViewportResize(ui, ".viewport-vertical-resize-handle",
+ [-10, -10], [300, 300], [0, -10], ui);
});