gecko/mobile/chrome/tests/browser_sidebars.js

218 lines
6.7 KiB
JavaScript

let testURL_01 = chromeRoot + "browser_blank_01.html";
let newTabs = [];
let gCurrentTest = null;
let gTests = [];
//------------------------------------------------------------------------------
// Iterating tests by shifting test out one by one as runNextTest is called.
function runNextTest() {
// Run the next test until all tests completed
if (gTests.length > 0) {
gCurrentTest = gTests.shift();
info(gCurrentTest.desc);
gCurrentTest.run();
}
else {
// Close the awesome panel just in case
BrowserUI.activePanel = null;
finish();
}
}
function waitForNavigationPanel(aCallback, aWaitForHide) {
let evt = aWaitForHide ? "NavigationPanelHidden" : "NavigationPanelShown";
info("waitFor " + evt + "(" + Components.stack.caller + ")");
window.addEventListener(evt, function(aEvent) {
info("receive " + evt);
window.removeEventListener(aEvent.type, arguments.callee, false);
Util.executeSoon(aCallback);
}, false);
}
//------------------------------------------------------------------------------
// Entry point (must be named "test")
function test() {
// This test is async
waitForExplicitFinish();
//Add new tab
newTabs.push(Browser.addTab(testURL_01, true));
let tabs = document.getElementById("tabs");
ok(tabs._columnsCount == 1, "Tabs layout should be on one column");
runNextTest();
}
function checkSidebars(aLeftVisible, aRightVisible) {
let [leftVisibility, rightVisibility, leftWidth, rightWidth] = Browser.computeSidebarVisibility();
let left = Math.abs(leftVisibility - aLeftVisible),
right = Math.abs(rightVisibility - aRightVisible);
ok(left < 0.2, (leftWidth * aLeftVisible) + "px of the left sidebar should be visible (got " + left + ")");
ok(right < 0.2, (rightWidth * aRightVisible) + "px of the right sidebar should be visible (got " + right + ")");
}
function checkOnResize(aCallback) {
let [leftVisibility, rightVisibility, leftWidth, rightWidth] = Browser.computeSidebarVisibility();
let oldLeftWidth = leftWidth;
Elements.browsers.addEventListener("SizeChanged", function() {
Elements.browsers.removeEventListener("SizeChanged", arguments.callee, false);
setTimeout(function() { Util.executeSoon(function() {
checkSidebars(leftVisibility, rightVisibility);
Elements.browsers.addEventListener("SizeChanged", function() {
Elements.browsers.removeEventListener("SizeChanged", arguments.callee, false);
setTimeout(function() {
checkSidebars(leftVisibility, rightVisibility);
let [, , newLeftWidth, newRightWidth] = Browser.computeSidebarVisibility();
is(oldLeftWidth, newLeftWidth, "Size should be the same than the size before resizing");
aCallback();
}, 0);
}, false);
window.resizeTo(800, 480);
}); }, 0)}
, false);
window.resizeTo(480, 800);
}
gTests.push({
desc: "Testing horizontal positionning of the sidebars for one column",
run: function() {
checkSidebars(0, 0);
checkOnResize(gCurrentTest.checkLeftVisible);
},
checkLeftVisible: function() {
Browser.controlsScrollboxScroller.scrollTo(0, 0);
checkSidebars(1, 0);
checkOnResize(gCurrentTest.checkRightVisible);
},
checkRightVisible: function() {
let [,, leftWidth, rightWidth] = Browser.computeSidebarVisibility();
Browser.controlsScrollboxScroller.scrollTo(leftWidth + rightWidth, 0);
checkSidebars(0, 1);
checkOnResize(runNextTest);
}
});
gTests.push({
desc: "Testing horizontal positionning of the sidebars for multiple columns",
run: function() {
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
newTabs.push(Browser.addTab(testURL_01, true));
let tabs = document.getElementById("tabs");
ok(tabs._columnsCount > 1, "Tabs layout should be on multiple columns");
checkSidebars(0, 0);
checkOnResize(gCurrentTest.checkLeftVisible);
},
checkLeftVisible: function() {
Browser.controlsScrollboxScroller.scrollTo(0, 0);
checkSidebars(1, 0);
checkOnResize(gCurrentTest.checkRightVisible);
},
checkRightVisible: function() {
let [,, leftWidth, rightWidth] = Browser.computeSidebarVisibility();
Browser.controlsScrollboxScroller.scrollTo(leftWidth + rightWidth, 0);
checkSidebars(0, 1);
checkOnResize(gCurrentTest.onFinish);
},
onFinish: function() {
Browser.hideSidebars();
runNextTest();
}
});
gTests.push({
desc: "Testing horizontal positionning of the sidebars for multiple columns with awesome screen open",
run: function() {
let tabs = document.getElementById("tabs");
ok(tabs._columnsCount > 1, "Tabs layout should be on multiple columns");
checkSidebars(0, 0);
waitForNavigationPanel(function() {
checkOnResize(gCurrentTest.checkLeftVisible);
});
AllPagesList.doCommand();
},
checkLeftVisible: function() {
Browser.controlsScrollboxScroller.scrollTo(0, 0);
checkSidebars(1, 0);
checkOnResize(gCurrentTest.checkRightVisible);
},
checkRightVisible: function() {
let [,, leftWidth, rightWidth] = Browser.computeSidebarVisibility();
Browser.controlsScrollboxScroller.scrollTo(leftWidth + rightWidth, 0);
checkSidebars(0, 1);
checkOnResize(gCurrentTest.onFinish);
},
onFinish: function() {
Browser.hideSidebars();
BrowserUI.activePanel = null;
runNextTest();
}
});
gTests.push({
desc: "Testing horizontal positionning of the sidebars for multiple columns with an undo tab",
run: function() {
let tabs = document.getElementById("tabs");
ok(tabs._columnsCount > 1, "Tabs layout should be on multiple columns");
Elements.tabs.addEventListener("TabRemove", function() {
Elements.tabs.removeEventListener("TabRemove", arguments.callee, false);
setTimeout(gCurrentTest.onTabClose, 0);
}, false);
let lastTab = newTabs.pop().chromeTab;
lastTab._onClose();
},
onTabClose: function() {
checkSidebars(0, 0);
checkOnResize(gCurrentTest.checkLeftVisible);
},
checkLeftVisible: function() {
Browser.controlsScrollboxScroller.scrollTo(0, 0);
checkSidebars(1, 0);
checkOnResize(gCurrentTest.checkRightVisible);
},
checkRightVisible: function() {
let [,, leftWidth, rightWidth] = Browser.computeSidebarVisibility();
Browser.controlsScrollboxScroller.scrollTo(leftWidth + rightWidth, 0);
checkSidebars(0, 1);
checkOnResize(gCurrentTest.onFinish);
},
onFinish: function() {
Browser.hideSidebars();
runNextTest();
}
});