gecko/mobile/chrome/tests/browser_navigation.js

323 lines
12 KiB
JavaScript

var testURL_01 = chromeRoot + "browser_blank_01.html";
var testURL_02 = chromeRoot + "browser_blank_02.html";
var testURL_03 = chromeRoot + "browser_english_title.html";
var testURL_04 = chromeRoot + "browser_no_title.html";
var pngURL = "data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5BAEAAAEALAAAAAALAAsAAAIUhA+hkcuO4lmNVindo7qyrIXiGBYAOw==";
// A queue to order the tests and a handle for each test
var gTests = [];
var gCurrentTest = null;
var back = document.getElementById("tool-back");
var forward = document.getElementById("tool-forward");
function pageLoaded(url) {
return function() {
let tab = gCurrentTest._currentTab;
return !tab.isLoading() && tab.browser.currentURI.spec == url;
}
}
//------------------------------------------------------------------------------
// Entry point (must be named "test")
function test() {
// The "runNextTest" approach is async, so we need to call "waitForExplicitFinish()"
// We call "finish()" when the tests are finished
waitForExplicitFinish();
// Start the tests
runNextTest();
}
//------------------------------------------------------------------------------
// 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 {
// Cleanup. All tests are completed at this point
try {
// Add any cleanup code here
}
finally {
// We must finialize the tests
finish();
}
}
}
//------------------------------------------------------------------------------
// Case: Loading a page into the URLBar with VK_RETURN
gTests.push({
desc: "Loading a page into the URLBar with VK_RETURN",
_currentTab: null,
run: function() {
gCurrentTest._currentTab = BrowserUI.newTab(testURL_01);
// Wait for the tab to load, then do the test
waitFor(gCurrentTest.onPageReady, pageLoaded(testURL_01));
},
onPageReady: function() {
// Test the mode
let urlIcons = document.getElementById("urlbar-icons");
is(urlIcons.getAttribute("mode"), "view", "URL Mode is set to 'view'");
// Test back button state
is(back.disabled, !gCurrentTest._currentTab.browser.canGoBack, "Back button check");
// Test forward button state
is(forward.disabled, !gCurrentTest._currentTab.browser.canGoForward, "Forward button check");
// Focus the url edit
let urlbarEdit = document.getElementById("urlbar-edit");
// Wait for the awesomebar to load, then do the test
window.addEventListener("NavigationPanelShown", gCurrentTest.onFocusReady, false);
EventUtils.synthesizeMouse(urlbarEdit, urlbarEdit.width / 2, urlbarEdit.height / 2, {});
},
onFocusReady: function() {
window.removeEventListener("NavigationPanelShown", gCurrentTest.onFocusReady, false);
// Test mode
let urlIcons = document.getElementById("urlbar-icons");
is(urlIcons.getAttribute("mode"), "edit", "URL Mode is set to 'edit'");
// Test back button state
is(back.disabled, !gCurrentTest._currentTab.browser.canGoBack, "Back button check");
// Test forward button state
is(forward.disabled, !gCurrentTest._currentTab.browser.canGoForward, "Forward button check");
// Check button states (url edit is focused)
let search = document.getElementById("tool-search");
let searchStyle = window.getComputedStyle(search, null);
is(searchStyle.visibility, "visible", "SEARCH is visible");
let stop = document.getElementById("tool-stop");
let stopStyle = window.getComputedStyle(stop, null);
is(stopStyle.visibility, "collapse", "STOP is hidden");
let reload = document.getElementById("tool-reload");
let reloadStyle = window.getComputedStyle(reload, null);
is(reloadStyle.visibility, "collapse", "RELOAD is hidden");
// Send the string and press return
EventUtils.synthesizeString(testURL_02, window);
EventUtils.synthesizeKey("VK_RETURN", {}, window);
// Wait for the tab to load, then do the test
waitFor(gCurrentTest.onPageFinish, pageLoaded(testURL_02));
},
onPageFinish: function() {
let urlIcons = document.getElementById("urlbar-icons");
is(urlIcons.getAttribute("mode"), "view", "URL Mode is set to 'view'");
// Check button states (url edit is not focused)
let search = document.getElementById("tool-search");
let searchStyle = window.getComputedStyle(search, null);
is(searchStyle.visibility, "collapse", "SEARCH is hidden");
let stop = document.getElementById("tool-stop");
let stopStyle = window.getComputedStyle(stop, null);
is(stopStyle.visibility, "collapse", "STOP is hidden");
let reload = document.getElementById("tool-reload");
let reloadStyle = window.getComputedStyle(reload, null);
is(reloadStyle.visibility, "visible", "RELOAD is visible");
let uri = gCurrentTest._currentTab.browser.currentURI.spec;
is(uri, testURL_02, "URL Matches newly created Tab");
// Go back in session
gCurrentTest._currentTab.browser.goBack();
// Wait for the tab to load, then do the test
waitFor(gCurrentTest.onPageBack, pageLoaded(testURL_01));
},
onPageBack: function() {
// Test back button state
is(back.disabled, !gCurrentTest._currentTab.browser.canGoBack, "Back button check");
// Test forward button state
is(forward.disabled, !gCurrentTest._currentTab.browser.canGoForward, "Forward button check");
Browser.closeTab(gCurrentTest._currentTab);
runNextTest();
}
});
//------------------------------------------------------------------------------
// Bug 570706 - --browser-chrome Mochitests on Fennec [post navigation]
// Check for text in the url bar for no title, with title and title change after pageload
gTests.push({
desc: "Check for text in the url bar for no title, with title and title change after pageload",
_currentTab: null,
run: function() {
gCurrentTest._currentTab = BrowserUI.newTab(testURL_03);
// Wait for the tab to load, then do the test
messageManager.addMessageListener("pageshow", function() {
if (gCurrentTest._currentTab.browser.currentURI.spec == testURL_03) {
messageManager.removeMessageListener("pageshow", arguments.callee);
gCurrentTest.onPageReady();
}});
},
onPageReady: function() {
let urlbarEdit = document.getElementById("urlbar-edit");
is(urlbarEdit.value, "English Title Page", "The title must be displayed in urlbar");
Browser.closeTab(gCurrentTest._currentTab);
gCurrentTest._currentTab = BrowserUI.newTab(testURL_04);
messageManager.addMessageListener("pageshow", function() {
if (gCurrentTest._currentTab.browser.currentURI.spec == testURL_04) {
messageManager.removeMessageListener("pageshow", arguments.callee);
gCurrentTest.onPageReady2();
}});
},
onPageReady2: function(){
let urlbarEdit = document.getElementById("urlbar-edit");
is(urlbarEdit.value, testURL_04, "The url for no title must be displayed in urlbar");
Browser.closeTab(gCurrentTest._currentTab);
// Check whether title appears after a pageload
gCurrentTest._currentTab = BrowserUI.newTab(testURL_01);
messageManager.addMessageListener("pageshow", function() {
if (gCurrentTest._currentTab.browser.currentURI.spec == testURL_01) {
messageManager.removeMessageListener("pageshow", arguments.callee);
gCurrentTest.onPageReady3();
}});
},
onPageReady3: function(){
let urlbarEdit = document.getElementById("urlbar-edit");
is(urlbarEdit.value, "Browser Blank Page 01", "The title of the first page must be displayed");
// Wait for the awesomebar to load, then do the test
window.addEventListener("NavigationPanelShown", gCurrentTest.onFocusReady, false);
EventUtils.synthesizeMouse(urlbarEdit, urlbarEdit.width / 2, urlbarEdit.height / 2, {});
},
onFocusReady: function() {
window.removeEventListener("NavigationPanelShown", gCurrentTest.onFocusReady, false);
EventUtils.synthesizeString(testURL_02, window);
EventUtils.synthesizeKey("VK_RETURN", {}, window)
messageManager.addMessageListener("pageshow", function() {
if (gCurrentTest._currentTab.browser.currentURI.spec == testURL_02) {
messageManager.removeMessageListener("pageshow", arguments.callee);
gCurrentTest.onPageFinish();
}});
},
onPageFinish: function() {
let urlbarEdit = document.getElementById("urlbar-edit");
is(urlbarEdit.value, "Browser Blank Page 02", "The title of the second page must be displayed");
Browser.closeTab(gCurrentTest._currentTab);
runNextTest();
}
});
// Case: Check for appearance of the favicon
gTests.push({
desc: "Check for appearance of the favicon",
_currentTab: null,
run: function() {
gCurrentTest._currentTab = BrowserUI.newTab(testURL_04);
messageManager.addMessageListener("pageshow", function() {
if (gCurrentTest._currentTab.browser.currentURI.spec == testURL_04) {
messageManager.removeMessageListener("pageshow", arguments.callee);
gCurrentTest.onPageReady();
}});
},
onPageReady: function() {
let favicon = document.getElementById("urlbar-favicon");
is(favicon.src, "", "The default favicon must be loaded");
Browser.closeTab(gCurrentTest._currentTab);
gCurrentTest._currentTab = BrowserUI.newTab(testURL_03);
messageManager.addMessageListener("pageshow", function() {
if (gCurrentTest._currentTab.browser.currentURI.spec == testURL_03) {
messageManager.removeMessageListener("pageshow", arguments.callee);
gCurrentTest.onPageFinish();
}});
},
onPageFinish: function(){
let favicon = document.getElementById("urlbar-favicon");
is(favicon.src, pngURL, "The page favicon must be loaded");
Browser.closeTab(gCurrentTest._currentTab);
runNextTest();
}
});
// Bug 600707 - Back and forward buttons are updated when navigating within a page
//
// These tests use setTimeout instead of waitFor or addEventListener, because
// in-page navigation does not fire any loading events or progress
// notifications, and happens more or less instantly.
gTests.push({
desc: "Navigating within a page via URI fragments",
_currentTab: null,
run: function() {
gCurrentTest._currentTab = BrowserUI.newTab(testURL_01);
waitFor(gCurrentTest.onPageReady, pageLoaded(testURL_01));
},
onPageReady: function() {
ok(back.disabled, "Can't go back");
ok(forward.disabled, "Can't go forward");
messageManager.addMessageListener("WebProgress:LocationChange", gCurrentTest.onFragmentLoaded);
Browser.loadURI(testURL_01 + "#fragment");
},
onFragmentLoaded: function() {
messageManager.removeMessageListener("WebProgress:LocationChange", arguments.callee);
ok(!back.disabled, "Can go back");
ok(forward.disabled, "Can't go forward");
messageManager.addMessageListener("WebProgress:LocationChange", gCurrentTest.onBack);
CommandUpdater.doCommand("cmd_back");
},
onBack: function() {
messageManager.removeMessageListener("WebProgress:LocationChange", arguments.callee);
ok(back.disabled, "Can't go back");
ok(!forward.disabled, "Can go forward");
messageManager.addMessageListener("WebProgress:LocationChange", gCurrentTest.onForward);
CommandUpdater.doCommand("cmd_forward");
},
onForward: function() {
messageManager.removeMessageListener("WebProgress:LocationChange", arguments.callee);
ok(!back.disabled, "Can go back");
ok(forward.disabled, "Can't go forward");
gCurrentTest.finish();
},
finish: function() {
Browser.closeTab(gCurrentTest._currentTab);
runNextTest();
}
});