mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
283 lines
11 KiB
JavaScript
283 lines
11 KiB
JavaScript
|
/* Any copyright is dedicated to the Public Domain.
|
||
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
||
|
*/
|
||
|
|
||
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
||
|
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||
|
|
||
|
const RELATIVE_DIR = "browser/mobile/chrome/tests/";
|
||
|
const TESTROOT = "http://example.com/" + RELATIVE_DIR;
|
||
|
const PREF_GET_LOCALES = "extensions.getLocales.get.url";
|
||
|
|
||
|
var gAvailable = [];
|
||
|
|
||
|
var restartObserver = {
|
||
|
observe: function(aSubject, aTopic, aData) {
|
||
|
// cancel restart requests
|
||
|
aSubject.QueryInterface(Ci.nsISupportsPRBool);
|
||
|
aSubject.data = true;
|
||
|
},
|
||
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver])
|
||
|
}
|
||
|
|
||
|
function test() {
|
||
|
Services.obs.addObserver(restartObserver, "quit-application-requested", false);
|
||
|
waitForExplicitFinish();
|
||
|
Services.prefs.setCharPref(PREF_GET_LOCALES, TESTROOT + "locales_list.sjs?numvalid=2");
|
||
|
|
||
|
let chromeReg = Components.classes["@mozilla.org/chrome/chrome-registry;1"].getService(Components.interfaces.nsIXULChromeRegistry);
|
||
|
chromeReg.QueryInterface(Ci.nsIToolkitChromeRegistry);
|
||
|
let availableLocales = chromeReg.getLocalesForPackage("browser");
|
||
|
while (availableLocales.hasMore())
|
||
|
gAvailable.push( availableLocales.getNext() );
|
||
|
|
||
|
|
||
|
// in order to test restart notifications being shown, we much open the settings panel once
|
||
|
let settingsButton = document.getElementById("tool-panel-open");
|
||
|
settingsButton.click();
|
||
|
waitForAndContinue(runNextTest, function() {
|
||
|
return !document.getElementById("panel-container").hidden;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function end_test() {
|
||
|
BrowserUI.hidePanel();
|
||
|
Services.prefs.clearUserPref(PREF_GET_LOCALES);
|
||
|
Services.obs.removeObserver(restartObserver, "quit-application-requested");
|
||
|
}
|
||
|
|
||
|
registerCleanupFunction(end_test);
|
||
|
|
||
|
function CheckListLoad(aList, aLength) {
|
||
|
return function() {
|
||
|
return aList.childNodes.length == aLength;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function CheckDeck(aDeck, aPanel) {
|
||
|
return function() {
|
||
|
return aDeck.selectedPanel == aPanel;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function LocaleTest(aName, aOptions) {
|
||
|
var install = null;
|
||
|
return {
|
||
|
desc: aName,
|
||
|
win: null,
|
||
|
run: function lt_run() {
|
||
|
this.loadedWindow = this.loadedWindow.bind(this);
|
||
|
this.windowClosed = this.windowClosed.bind(this);
|
||
|
this.win = Services.ww.openWindow(aOptions.opener, "chrome://browser/content/localePicker.xul", "_browser", "chrome,dialog=no,all", null);
|
||
|
this.win.addEventListener("load", this.loadedWindow, false);
|
||
|
},
|
||
|
|
||
|
loadedWindow: function lt_loadedWindow() {
|
||
|
this.win.removeEventListener("load", this.loadedWindow, false);
|
||
|
if (aOptions.opener)
|
||
|
setTimeout(this.delayedLoadPicker.bind(this), 0);
|
||
|
else
|
||
|
setTimeout(this.delayedLoadMain.bind(this), 0);
|
||
|
},
|
||
|
|
||
|
delayedLoadMain: function lt_delayedLoadMain() {
|
||
|
let deck = this.win.document.getElementById("language-deck");
|
||
|
let mainPage = this.win.document.getElementById("main-page");
|
||
|
is(deck.selectedPanel, mainPage, "Deck is showing the main page");
|
||
|
|
||
|
if (aOptions.loadLocalesList) {
|
||
|
// load the locales list
|
||
|
let changeButton = this.win.document.getElementById("change-language");
|
||
|
changeButton.click();
|
||
|
this.delayedLoadPicker();
|
||
|
} else {
|
||
|
// click the "Continue in English" button
|
||
|
let continueButton = this.win.document.getElementById("continue-in-button");
|
||
|
ok(/english/i.test(continueButton.textContent), "Continue button says English");
|
||
|
this.win.addEventListener("unload", this.windowClosed, false);
|
||
|
continueButton.click();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
delayedLoadPicker: function lt_delayedLoadPicker() {
|
||
|
let deck = this.win.document.getElementById("language-deck");
|
||
|
let pickerPage = this.win.document.getElementById("picker-page");
|
||
|
is(deck.selectedPanel, pickerPage, "Deck is showing the picker page");
|
||
|
|
||
|
let list = this.win.document.getElementById("language-list");
|
||
|
// wait till the list shows the number of locales bundled with this build + the 2 from the downloaded list
|
||
|
waitForAndContinue(this.listLoaded.bind(this), CheckListLoad(list, gAvailable.length + 2));
|
||
|
},
|
||
|
|
||
|
listLoaded: function() {
|
||
|
let continueButton = this.win.document.getElementById("continue-button");
|
||
|
let cancelButton = this.win.document.getElementById("cancel-button");
|
||
|
ok(/continue/i.test(continueButton.textContent), "Continue button has correct text");
|
||
|
ok(/cancel/i.test(cancelButton.textContent), "Cancel button has correct text");
|
||
|
|
||
|
let list = this.win.document.getElementById("language-list");
|
||
|
is(list.childNodes.length, gAvailable.length + 2, "List has correct number of children");
|
||
|
|
||
|
let nextSelected = null;
|
||
|
let selectedItem = null;
|
||
|
for(var i = 0; i < list.childNodes.length; i++) {
|
||
|
let child = list.childNodes[i];
|
||
|
if (/english/i.test(child.textContent)) {
|
||
|
ok(child.hasAttribute("selected"), "English is initially selected");
|
||
|
selectedItem = child;
|
||
|
} else {
|
||
|
ok(!child.hasAttribute("selected"), "Language is not selected");
|
||
|
if (aOptions.selectAddon && child.textContent == aOptions.selectAddon.name)
|
||
|
nextSelected = child;
|
||
|
}
|
||
|
}
|
||
|
this.testInstallingItem(nextSelected);
|
||
|
},
|
||
|
|
||
|
testInstallingItem: function lt_testInstallingItem(aSelect) {
|
||
|
let continueButton = this.win.document.getElementById("continue-button");
|
||
|
let cancelButton = this.win.document.getElementById("cancel-button");
|
||
|
|
||
|
if (aSelect) {
|
||
|
aSelect.click();
|
||
|
is(continueButton.textContent, aOptions.selectAddon.continueButton, "Continue button says " + aOptions.selectAddon.continueButton);
|
||
|
is(cancelButton.textContent, aOptions.selectAddon.cancelButton, "Cancel button says " + aOptions.selectAddon.cancelButton);
|
||
|
let title = this.win.document.getElementById("picker-title");
|
||
|
is(title.textContent, aOptions.selectAddon.title, "Title says " + aOptions.selectAddon.title);
|
||
|
continueButton.click();
|
||
|
|
||
|
let deck = this.win.document.getElementById("language-deck");
|
||
|
let installerPage = this.win.document.getElementById("installer-page");
|
||
|
is(deck.selectedPanel, installerPage, "Deck is showing the installer page");
|
||
|
|
||
|
let installingPage = this.win.document.getElementById("installer-page-installing");
|
||
|
is(installerPage.selectedPanel, installingPage, "Installer is showing installing page");
|
||
|
let installMsg = this.win.document.getElementById("installing-message");
|
||
|
is(installMsg.textContent, aOptions.selectAddon.installMessage, "Installer is showing correct message");
|
||
|
|
||
|
if (aOptions.selectAddon.willFail) {
|
||
|
let failedPage = this.win.document.getElementById("installer-page-error");
|
||
|
waitForAndContinue(this.installFailed.bind(this), CheckDeck(installerPage, failedPage));
|
||
|
} else {
|
||
|
let install = aSelect.locale;
|
||
|
this.win.addEventListener("unload", this.windowClosed, false);
|
||
|
}
|
||
|
} else {
|
||
|
this.cancelList();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
installFailed: function lt_installFailed() {
|
||
|
let continueButton = this.win.document.getElementById("install-continue");
|
||
|
is(continueButton.textContent, aOptions.selectAddon.installFailed, "Install failed button has correct label");
|
||
|
continueButton.click();
|
||
|
|
||
|
let deck = this.win.document.getElementById("language-deck");
|
||
|
let pickerPage = this.win.document.getElementById("picker-page");
|
||
|
is(deck.selectedPanel, pickerPage, "Deck is showing the picker page");
|
||
|
this.cancelList();
|
||
|
},
|
||
|
|
||
|
cancelList: function lt_cancelList() {
|
||
|
this.win.addEventListener("unload", this.windowClosed, false);
|
||
|
|
||
|
let cancelButton = this.win.document.getElementById("cancel-button");
|
||
|
cancelButton.click();
|
||
|
if (!aOptions.opener) {
|
||
|
// canceling out of the list, should revert back to english ui
|
||
|
let deck = this.win.document.getElementById("language-deck");
|
||
|
let mainPage = this.win.document.getElementById("main-page");
|
||
|
is(deck.selectedPanel, mainPage, "Deck is showing the main page again");
|
||
|
let continueButton = this.win.document.getElementById("continue-in-button");
|
||
|
ok(/english/i.test(continueButton.textContent), "Cancelling returned the UI to English");
|
||
|
continueButton.click();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
windowClosed: function lt_windowClosed(aEvent) {
|
||
|
this.checkMainUI(aOptions.selectAddon);
|
||
|
|
||
|
Services.prefs.clearUserPref("intl.locale.matchOS");
|
||
|
Services.prefs.clearUserPref("general.useragent.locale");
|
||
|
window.PreferencesView.hideRestart();
|
||
|
|
||
|
if (install)
|
||
|
install.uninstall();
|
||
|
|
||
|
runNextTest();
|
||
|
},
|
||
|
|
||
|
checkMainUI: function(aAddon) {
|
||
|
let systemPref = "";
|
||
|
let userAgentPref = "";
|
||
|
try {
|
||
|
systemPref = Services.prefs.getBoolPref("intl.locale.matchOS");
|
||
|
userAgentPref = Services.prefs.getCharPref("general.useragent.locale")
|
||
|
} catch(ex) { }
|
||
|
|
||
|
let notification = document.getElementById("prefs-messages").getNotificationWithValue("restart-app");
|
||
|
let showRestart = aAddon ? !aAddon.willFail : false;
|
||
|
is(!!notification, showRestart, "Restart message is " + (showRestart ? "" : "not ") + "shown");
|
||
|
|
||
|
// check that locale pref has been updated
|
||
|
let localeName = aAddon ? aAddon.locale : "en-US";
|
||
|
is(systemPref, false, "Match system locale is false");
|
||
|
is(userAgentPref, localeName, "User agent locale is " + localeName);
|
||
|
let buttonLabel = aAddon ? aAddon.localeName : "English (US)";
|
||
|
is(document.getElementById("prefs-uilanguage-button").getAttribute("label"), buttonLabel, "Locale button says " + buttonLabel);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let invalidInstall = {
|
||
|
name: "Test Locale 0",
|
||
|
installMessage: "INSTALLINGTest Locale 0",
|
||
|
continueButton: "CONTINUE",
|
||
|
cancelButton: "CANCEL",
|
||
|
title: "CHOOSELANGUAGE",
|
||
|
installFailed: "CONTINUE",
|
||
|
locale: "en-US",
|
||
|
localeName: "English (US)",
|
||
|
willFail: true
|
||
|
};
|
||
|
let validInstall = {
|
||
|
name: "Test Locale 1",
|
||
|
installMessage: "INSTALLINGTest Locale 1",
|
||
|
continueButton: "CONTINUE",
|
||
|
cancelButton: "CANCEL",
|
||
|
title: "CHOOSELANGUAGE",
|
||
|
locale: "test1",
|
||
|
localeName: "test1",
|
||
|
willFail: false
|
||
|
}
|
||
|
|
||
|
gTests.push(new LocaleTest("Load locale picker with no opener and continue",
|
||
|
{ opener: null,
|
||
|
loadLocalesList: false,
|
||
|
selectAddon: null
|
||
|
}));
|
||
|
|
||
|
gTests.push(new LocaleTest("Load locale picker with no opener and try to install an invalid language",
|
||
|
{ opener: null,
|
||
|
loadLocalesList: true,
|
||
|
selectAddon: invalidInstall
|
||
|
}));
|
||
|
|
||
|
gTests.push(new LocaleTest("Load locale picker with no opener and try to install a valid language",
|
||
|
{ opener: null,
|
||
|
loadLocalesList: true,
|
||
|
selectAddon: validInstall
|
||
|
}));
|
||
|
|
||
|
gTests.push(new LocaleTest("Load locale picker with opener and try to install an invalid language",
|
||
|
{ opener: this.window,
|
||
|
loadLocalesList: true,
|
||
|
selectAddon: invalidInstall
|
||
|
}));
|
||
|
|
||
|
gTests.push(new LocaleTest("Load locale picker with opener and try to install a valid language",
|
||
|
{ opener: this.window,
|
||
|
loadLocalesList: true,
|
||
|
selectAddon: validInstall
|
||
|
}));
|