diff options
Diffstat (limited to 'devtools/client/shared/test/browser_layoutHelpers.js')
-rw-r--r-- | devtools/client/shared/test/browser_layoutHelpers.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/devtools/client/shared/test/browser_layoutHelpers.js b/devtools/client/shared/test/browser_layoutHelpers.js new file mode 100644 index 000000000..3274ad686 --- /dev/null +++ b/devtools/client/shared/test/browser_layoutHelpers.js @@ -0,0 +1,93 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Tests that scrollIntoViewIfNeeded works properly. +const {scrollIntoViewIfNeeded} = require("devtools/client/shared/scroll"); + +const TEST_URI = TEST_URI_ROOT + "browser_layoutHelpers.html"; + +add_task(function* () { + let [host, win] = yield createHost("bottom", TEST_URI); + runTest(win); + host.destroy(); +}); + +function runTest(win) { + let some = win.document.getElementById("some"); + + some.style.top = win.innerHeight + "px"; + some.style.left = win.innerWidth + "px"; + // The tests start with a black 2x2 pixels square below bottom right. + // Do not resize the window during the tests. + + let xPos = Math.floor(win.innerWidth / 2); + // Above the viewport. + win.scroll(xPos, win.innerHeight + 2); + scrollIntoViewIfNeeded(some); + is(win.scrollY, Math.floor(win.innerHeight / 2) + 1, + "Element completely hidden above should appear centered."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // On the top edge. + win.scroll(win.innerWidth / 2, win.innerHeight + 1); + scrollIntoViewIfNeeded(some); + is(win.scrollY, win.innerHeight, + "Element partially visible above should appear above."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // Just below the viewport. + win.scroll(win.innerWidth / 2, 0); + scrollIntoViewIfNeeded(some); + is(win.scrollY, Math.floor(win.innerHeight / 2) + 1, + "Element completely hidden below should appear centered."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // On the bottom edge. + win.scroll(win.innerWidth / 2, 1); + scrollIntoViewIfNeeded(some); + is(win.scrollY, 2, + "Element partially visible below should appear below."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // Above the viewport. + win.scroll(win.innerWidth / 2, win.innerHeight + 2); + scrollIntoViewIfNeeded(some, false); + is(win.scrollY, win.innerHeight, + "Element completely hidden above should appear above " + + "if parameter is false."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // On the top edge. + win.scroll(win.innerWidth / 2, win.innerHeight + 1); + scrollIntoViewIfNeeded(some, false); + is(win.scrollY, win.innerHeight, + "Element partially visible above should appear above " + + "if parameter is false."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // Below the viewport. + win.scroll(win.innerWidth / 2, 0); + scrollIntoViewIfNeeded(some, false); + is(win.scrollY, 2, + "Element completely hidden below should appear below " + + "if parameter is false."); + is(win.scrollX, xPos, + "scrollX position has not changed."); + + // On the bottom edge. + win.scroll(win.innerWidth / 2, 1); + scrollIntoViewIfNeeded(some, false); + is(win.scrollY, 2, + "Element partially visible below should appear below " + + "if parameter is false."); + is(win.scrollX, xPos, + "scrollX position has not changed."); +} |