Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* Any copyright is dedicated to the Public Domain.
"use strict";
add_task(async function test_translations_settings_pane_elements() {
const {
cleanup,
elements: { settingsButton },
} = await setupAboutPreferences(LANGUAGE_PAIRS, {
prefs: [["browser.translations.newSettingsUI.enable", true]],
});
assertVisibility({
message: "Expect paneGeneral elements to be visible.",
visible: { settingsButton },
});
const {
backButton,
header,
translationsSettingsDescription,
translateAlwaysHeader,
translateNeverHeader,
translateAlwaysMenuList,
translateNeverMenuList,
translateNeverSiteHeader,
translateNeverSiteDesc,
translateDownloadLanguagesHeader,
translateDownloadLanguagesLearnMore,
} =
await TranslationsSettingsTestUtils.openAboutPreferencesTranslationsSettingsPane(
settingsButton
);
assertVisibility({
message: "Expect paneTranslations elements to be visible.",
visible: {
backButton,
header,
translationsSettingsDescription,
translateAlwaysHeader,
translateNeverHeader,
translateAlwaysMenuList,
translateNeverMenuList,
translateNeverSiteHeader,
translateNeverSiteDesc,
translateDownloadLanguagesHeader,
translateDownloadLanguagesLearnMore,
},
hidden: {
settingsButton,
},
});
const promise = BrowserTestUtils.waitForEvent(
document,
"paneshown",
false,
event => event.detail.category === "paneGeneral"
);
click(backButton);
await promise;
assertVisibility({
message: "Expect paneGeneral elements to be visible.",
visible: {
settingsButton,
},
hidden: {
backButton,
header,
translationsSettingsDescription,
translateAlwaysHeader,
translateNeverHeader,
translateAlwaysMenuList,
translateNeverMenuList,
translateNeverSiteHeader,
translateNeverSiteDesc,
translateDownloadLanguagesHeader,
translateDownloadLanguagesLearnMore,
},
});
await cleanup();
});
add_task(async function test_translations_settings_always_translate() {
const {
cleanup,
elements: { settingsButton },
} = await setupAboutPreferences(LANGUAGE_PAIRS, {
prefs: [["browser.translations.newSettingsUI.enable", true]],
});
const document = gBrowser.selectedBrowser.contentDocument;
assertVisibility({
message: "Expect paneGeneral elements to be visible.",
visible: { settingsButton },
});
const { translateAlwaysMenuList } =
await TranslationsSettingsTestUtils.openAboutPreferencesTranslationsSettingsPane(
settingsButton
);
let alwaysTranslateSection = document.getElementById(
"translations-settings-always-translate-section"
);
await testLanguageList(alwaysTranslateSection, translateAlwaysMenuList);
await cleanup();
});
async function testLanguageList(translateSection, menuList) {
const sectionName =
translateSection.id === "translations-settings-always-translate-section"
? "Always"
: "Never";
is(
translateSection.querySelector(".translations-settings-languages-card"),
null,
`Language list not present in ${sectionName} Translate list`
);
for (let i = 0; i < menuList.children[0].children.length; i++) {
menuList.value = menuList.children[0].children[i].value;
let clickMenu = BrowserTestUtils.waitForEvent(menuList, "command");
menuList.dispatchEvent(new Event("command"));
await clickMenu;
/** Languages are always added on the top, so check the firstChild
* for newly added languages.
* the firstChild.lastChild.innerText is the language display name
* which is compared with the menulist display name that is selected
*/
is(
translateSection.querySelector(".translations-settings-language-list")
.firstChild.lastChild.innerText,
getIntlDisplayName(menuList.children[0].children[i].value),
`Language list has element ${getIntlDisplayName(
menuList.children[0].children[i].value
)}`
);
}
/** The test cases has 4 languages, so check if 4 languages are added to the list */
let langNum = translateSection.querySelector(
".translations-settings-language-list"
).childElementCount;
is(langNum, 4, "Number of languages added is 4");
const languagelist = translateSection.querySelector(
".translations-settings-language-list"
);
for (let i = 0; i < langNum; i++) {
// Delete the first language in the list
let langName = languagelist.children[0].lastChild.innerText;
let langButton = languagelist.children[0].querySelector("moz-button");
let clickButton = BrowserTestUtils.waitForEvent(langButton, "click");
langButton.click();
await clickButton;
if (i < langNum - 1) {
is(
languagelist.childElementCount,
langNum - i - 1,
`${langName} removed from ${sectionName} Translate`
);
} else {
/** Check if the language list card is removed after removing the last language */
is(
translateSection.querySelector(".translations-settings-languages-card"),
null,
`${langName} removed from ${sectionName} Translate`
);
}
}
}
add_task(async function test_translations_settings_never_translate() {
const {
cleanup,
elements: { settingsButton },
} = await setupAboutPreferences(LANGUAGE_PAIRS, {
prefs: [["browser.translations.newSettingsUI.enable", true]],
});
const document = gBrowser.selectedBrowser.contentDocument;
assertVisibility({
message: "Expect paneGeneral elements to be visible.",
visible: { settingsButton },
});
const { translateNeverMenuList } =
await TranslationsSettingsTestUtils.openAboutPreferencesTranslationsSettingsPane(
settingsButton
);
let neverTranslateSection = document.getElementById(
"translations-settings-never-translate-section"
);
await testLanguageList(neverTranslateSection, translateNeverMenuList);
await cleanup();
});
add_task(async function test_translations_settings_download_languages() {
const {
cleanup,
elements: { settingsButton },
} = await setupAboutPreferences(LANGUAGE_PAIRS, {
prefs: [["browser.translations.newSettingsUI.enable", true]],
});
assertVisibility({
message: "Expect paneGeneral elements to be visible.",
visible: { settingsButton },
});
const { translateDownloadLanguagesList } =
await TranslationsSettingsTestUtils.openAboutPreferencesTranslationsSettingsPane(
settingsButton
);
let langList = translateDownloadLanguagesList.querySelector(
".translations-settings-language-list"
);
for (let i = 0; i < langList.children.length; i++) {
is(
langList.children[i]
.querySelector("moz-button")
.classList.contains("translations-settings-download-icon"),
true,
"Download icon is visible"
);
let clickButton = BrowserTestUtils.waitForEvent(
langList.children[i].querySelector("moz-button"),
"click"
);
langList.children[i].querySelector("moz-button").click();
await clickButton;
is(
langList.children[i]
.querySelector("moz-button")
.classList.contains("translations-settings-delete-icon"),
true,
"Delete icon is visible"
);
clickButton = BrowserTestUtils.waitForEvent(
langList.children[i].querySelector("moz-button"),
"click"
);
langList.children[i].querySelector("moz-button").click();
await clickButton;
is(
langList.children[i]
.querySelector("moz-button")
.classList.contains("translations-settings-download-icon"),
true,
"Download icon is visible"
);
}
await cleanup();
});