diff options
Diffstat (limited to '')
-rw-r--r-- | browser/components/translations/tests/browser/browser_translations_about_preferences_manage_downloaded_languages.js | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/browser/components/translations/tests/browser/browser_translations_about_preferences_manage_downloaded_languages.js b/browser/components/translations/tests/browser/browser_translations_about_preferences_manage_downloaded_languages.js new file mode 100644 index 0000000000..383f2094a7 --- /dev/null +++ b/browser/components/translations/tests/browser/browser_translations_about_preferences_manage_downloaded_languages.js @@ -0,0 +1,225 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const frenchModels = [ + "lex.50.50.enfr.s2t.bin", + "lex.50.50.fren.s2t.bin", + "model.enfr.intgemm.alphas.bin", + "model.fren.intgemm.alphas.bin", + "vocab.enfr.spm", + "vocab.fren.spm", +]; + +add_task(async function test_about_preferences_manage_languages() { + const { + cleanup, + remoteClients, + elements: { + downloadAllLabel, + downloadAll, + deleteAll, + frenchLabel, + frenchDownload, + frenchDelete, + spanishLabel, + spanishDownload, + spanishDelete, + ukrainianLabel, + ukrainianDownload, + ukrainianDelete, + }, + } = await setupAboutPreferences(LANGUAGE_PAIRS, { + prefs: [["browser.translations.newSettingsUI.enable", false]], + }); + + is( + downloadAllLabel.getAttribute("data-l10n-id"), + "translations-manage-install-description", + "The first row is all of the languages." + ); + is(frenchLabel.textContent, "French", "There is a French row."); + is(spanishLabel.textContent, "Spanish", "There is a Spanish row."); + is(ukrainianLabel.textContent, "Ukrainian", "There is a Ukrainian row."); + + await ensureVisibility({ + message: "Everything starts out as available to download", + visible: { + downloadAll, + frenchDownload, + spanishDownload, + ukrainianDownload, + }, + hidden: { deleteAll, frenchDelete, spanishDelete, ukrainianDelete }, + }); + + click(frenchDownload, "Downloading French"); + + Assert.deepEqual( + await remoteClients.translationModels.resolvePendingDownloads( + frenchModels.length + ), + frenchModels, + "French models were downloaded." + ); + + await ensureVisibility({ + message: "French can now be deleted, and delete all is available.", + visible: { + downloadAll, + deleteAll, + frenchDelete, + spanishDownload, + ukrainianDownload, + }, + hidden: { frenchDownload, spanishDelete, ukrainianDelete }, + }); + + click(frenchDelete, "Deleting French"); + + await ensureVisibility({ + message: "Everything can be downloaded.", + visible: { + downloadAll, + frenchDownload, + spanishDownload, + ukrainianDownload, + }, + hidden: { deleteAll, frenchDelete, spanishDelete, ukrainianDelete }, + }); + + click(downloadAll, "Downloading all languages."); + + const allModels = [ + "lex.50.50.enes.s2t.bin", + "lex.50.50.enfr.s2t.bin", + "lex.50.50.enuk.s2t.bin", + "lex.50.50.esen.s2t.bin", + "lex.50.50.fren.s2t.bin", + "lex.50.50.uken.s2t.bin", + "model.enes.intgemm.alphas.bin", + "model.enfr.intgemm.alphas.bin", + "model.enuk.intgemm.alphas.bin", + "model.esen.intgemm.alphas.bin", + "model.fren.intgemm.alphas.bin", + "model.uken.intgemm.alphas.bin", + "vocab.enes.spm", + "vocab.enfr.spm", + "vocab.enuk.spm", + "vocab.esen.spm", + "vocab.fren.spm", + "vocab.uken.spm", + ]; + Assert.deepEqual( + await remoteClients.translationModels.resolvePendingDownloads( + allModels.length + ), + allModels, + "All models were downloaded." + ); + Assert.deepEqual( + await remoteClients.translationsWasm.resolvePendingDownloads(1), + ["bergamot-translator"], + "Wasm was downloaded." + ); + + await ensureVisibility({ + message: "Everything can be deleted.", + visible: { deleteAll, frenchDelete, spanishDelete, ukrainianDelete }, + hidden: { downloadAll, frenchDownload, spanishDownload, ukrainianDownload }, + }); + + click(deleteAll, "Deleting all languages."); + + await ensureVisibility({ + message: "Everything can be downloaded again", + visible: { + downloadAll, + frenchDownload, + spanishDownload, + ukrainianDownload, + }, + hidden: { deleteAll, frenchDelete, spanishDelete, ukrainianDelete }, + }); + + click(frenchDownload, "Downloading French."); + click(spanishDownload, "Downloading Spanish."); + click(ukrainianDownload, "Downloading Ukrainian."); + + Assert.deepEqual( + await remoteClients.translationModels.resolvePendingDownloads( + allModels.length + ), + allModels, + "All models were downloaded again." + ); + + remoteClients.translationsWasm.assertNoNewDownloads(); + + await ensureVisibility({ + message: "Everything is downloaded again.", + visible: { deleteAll, frenchDelete, spanishDelete, ukrainianDelete }, + hidden: { downloadAll, frenchDownload, spanishDownload, ukrainianDownload }, + }); + + await cleanup(); +}); + +add_task(async function test_about_preferences_download_reject() { + const { + cleanup, + remoteClients, + elements: { document, frenchDownload }, + } = await setupAboutPreferences(LANGUAGE_PAIRS, { + prefs: [["browser.translations.newSettingsUI.enable", false]], + }); + + click(frenchDownload, "Downloading French"); + + is( + maybeGetByL10nId("translations-manage-error-install", document), + null, + "No error messages are present." + ); + + const failureErrors = await captureTranslationsError(() => + remoteClients.translationModels.rejectPendingDownloads(frenchModels.length) + ); + + ok( + !!failureErrors.length, + `The errors for download should have been reported, found ${failureErrors.length} errors` + ); + for (const { error } of failureErrors) { + is( + error?.message, + "Failed to download file.", + "The error reported was a download error." + ); + } + + await waitForCondition( + () => maybeGetByL10nId("translations-manage-error-install", document), + "The error message is now visible." + ); + + click(frenchDownload, "Attempting to download French again", document); + is( + maybeGetByL10nId("translations-manage-error-install", document), + null, + "The error message is hidden again." + ); + + const successErrors = await captureTranslationsError(() => + remoteClients.translationModels.resolvePendingDownloads(frenchModels.length) + ); + + is( + successErrors.length, + 0, + "Expected no errors downloading French the second time" + ); + + await cleanup(); +}); |