diff options
Diffstat (limited to 'browser/components/translation/test/browser_translation_infobar.js')
-rw-r--r-- | browser/components/translation/test/browser_translation_infobar.js | 216 |
1 files changed, 0 insertions, 216 deletions
diff --git a/browser/components/translation/test/browser_translation_infobar.js b/browser/components/translation/test/browser_translation_infobar.js deleted file mode 100644 index c16b3939c..000000000 --- a/browser/components/translation/test/browser_translation_infobar.js +++ /dev/null @@ -1,216 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -// tests the translation infobar, using a fake 'Translation' implementation. - -var tmp = {}; -Cu.import("resource:///modules/translation/Translation.jsm", tmp); -var {Translation} = tmp; - -const kShowUIPref = "browser.translation.ui.show"; - -function waitForCondition(condition, nextTest, errorMsg) { - var tries = 0; - var interval = setInterval(function() { - if (tries >= 30) { - ok(false, errorMsg); - moveOn(); - } - var conditionPassed; - try { - conditionPassed = condition(); - } catch (e) { - ok(false, e + "\n" + e.stack); - conditionPassed = false; - } - if (conditionPassed) { - moveOn(); - } - tries++; - }, 100); - var moveOn = function() { clearInterval(interval); nextTest(); }; -} - -var TranslationStub = { - translate: function(aFrom, aTo) { - this.state = Translation.STATE_TRANSLATING; - this.translatedFrom = aFrom; - this.translatedTo = aTo; - }, - - _reset: function() { - this.translatedFrom = ""; - this.translatedTo = ""; - }, - - failTranslation: function() { - this.state = Translation.STATE_ERROR; - this._reset(); - }, - - finishTranslation: function() { - this.showTranslatedContent(); - this.state = Translation.STATE_TRANSLATED; - this._reset(); - } -}; - -function showTranslationUI(aDetectedLanguage) { - let browser = gBrowser.selectedBrowser; - Translation.documentStateReceived(browser, {state: Translation.STATE_OFFER, - originalShown: true, - detectedLanguage: aDetectedLanguage}); - let ui = browser.translationUI; - for (let name of ["translate", "_reset", "failTranslation", "finishTranslation"]) - ui[name] = TranslationStub[name]; - return ui.notificationBox.getNotificationWithValue("translation"); -} - -function hasTranslationInfoBar() { - return !!gBrowser.getNotificationBox().getNotificationWithValue("translation"); -} - -function test() { - waitForExplicitFinish(); - - Services.prefs.setBoolPref(kShowUIPref, true); - let tab = gBrowser.addTab(); - gBrowser.selectedTab = tab; - tab.linkedBrowser.addEventListener("load", function onload() { - tab.linkedBrowser.removeEventListener("load", onload, true); - TranslationStub.browser = gBrowser.selectedBrowser; - registerCleanupFunction(function () { - gBrowser.removeTab(tab); - Services.prefs.clearUserPref(kShowUIPref); - }); - run_tests(() => { - finish(); - }); - }, true); - - content.location = "data:text/plain,test page"; -} - -function checkURLBarIcon(aExpectTranslated = false) { - is(!PopupNotifications.getNotification("translate"), aExpectTranslated, - "translate icon " + (aExpectTranslated ? "not " : "") + "shown"); - is(!!PopupNotifications.getNotification("translated"), aExpectTranslated, - "translated icon " + (aExpectTranslated ? "" : "not ") + "shown"); -} - -function run_tests(aFinishCallback) { - info("Show an info bar saying the current page is in French"); - let notif = showTranslationUI("fr"); - is(notif.state, Translation.STATE_OFFER, "the infobar is offering translation"); - is(notif._getAnonElt("detectedLanguage").value, "fr", "The detected language is displayed"); - checkURLBarIcon(); - - info("Click the 'Translate' button"); - notif._getAnonElt("translate").click(); - is(notif.state, Translation.STATE_TRANSLATING, "the infobar is in the translating state"); - ok(!!notif.translation.translatedFrom, "Translation.translate has been called"); - is(notif.translation.translatedFrom, "fr", "from language correct"); - is(notif.translation.translatedTo, Translation.defaultTargetLanguage, "from language correct"); - checkURLBarIcon(); - - info("Make the translation fail and check we are in the error state."); - notif.translation.failTranslation(); - is(notif.state, Translation.STATE_ERROR, "infobar in the error state"); - checkURLBarIcon(); - - info("Click the try again button"); - notif._getAnonElt("tryAgain").click(); - is(notif.state, Translation.STATE_TRANSLATING, "infobar in the translating state"); - ok(!!notif.translation.translatedFrom, "Translation.translate has been called"); - is(notif.translation.translatedFrom, "fr", "from language correct"); - is(notif.translation.translatedTo, Translation.defaultTargetLanguage, "from language correct"); - checkURLBarIcon(); - - info("Make the translation succeed and check we are in the 'translated' state."); - notif.translation.finishTranslation(); - is(notif.state, Translation.STATE_TRANSLATED, "infobar in the translated state"); - checkURLBarIcon(true); - - info("Test 'Show original' / 'Show Translation' buttons."); - // First check 'Show Original' is visible and 'Show Translation' is hidden. - ok(!notif._getAnonElt("showOriginal").hidden, "'Show Original' button visible"); - ok(notif._getAnonElt("showTranslation").hidden, "'Show Translation' button hidden"); - // Click the button. - notif._getAnonElt("showOriginal").click(); - // Check that the url bar icon shows the original content is displayed. - checkURLBarIcon(); - // And the 'Show Translation' button is now visible. - ok(notif._getAnonElt("showOriginal").hidden, "'Show Original' button hidden"); - ok(!notif._getAnonElt("showTranslation").hidden, "'Show Translation' button visible"); - // Click the 'Show Translation' button - notif._getAnonElt("showTranslation").click(); - // Check that the url bar icon shows the page is translated. - checkURLBarIcon(true); - // Check that the 'Show Original' button is visible again. - ok(!notif._getAnonElt("showOriginal").hidden, "'Show Original' button visible"); - ok(notif._getAnonElt("showTranslation").hidden, "'Show Translation' button hidden"); - - info("Check that changing the source language causes a re-translation"); - let from = notif._getAnonElt("fromLanguage"); - from.value = "es"; - from.doCommand(); - is(notif.state, Translation.STATE_TRANSLATING, "infobar in the translating state"); - ok(!!notif.translation.translatedFrom, "Translation.translate has been called"); - is(notif.translation.translatedFrom, "es", "from language correct"); - is(notif.translation.translatedTo, Translation.defaultTargetLanguage, "to language correct"); - // We want to show the 'translated' icon while re-translating, - // because we are still displaying the previous translation. - checkURLBarIcon(true); - notif.translation.finishTranslation(); - checkURLBarIcon(true); - - info("Check that changing the target language causes a re-translation"); - let to = notif._getAnonElt("toLanguage"); - to.value = "pl"; - to.doCommand(); - is(notif.state, Translation.STATE_TRANSLATING, "infobar in the translating state"); - ok(!!notif.translation.translatedFrom, "Translation.translate has been called"); - is(notif.translation.translatedFrom, "es", "from language correct"); - is(notif.translation.translatedTo, "pl", "to language correct"); - checkURLBarIcon(true); - notif.translation.finishTranslation(); - checkURLBarIcon(true); - - // Cleanup. - notif.close(); - - info("Reopen the info bar to check that it's possible to override the detected language."); - notif = showTranslationUI("fr"); - is(notif.state, Translation.STATE_OFFER, "the infobar is offering translation"); - is(notif._getAnonElt("detectedLanguage").value, "fr", "The detected language is displayed"); - // Change the language and click 'Translate' - notif._getAnonElt("detectedLanguage").value = "ja"; - notif._getAnonElt("translate").click(); - is(notif.state, Translation.STATE_TRANSLATING, "the infobar is in the translating state"); - ok(!!notif.translation.translatedFrom, "Translation.translate has been called"); - is(notif.translation.translatedFrom, "ja", "from language correct"); - notif.close(); - - info("Reopen to check the 'Not Now' button closes the notification."); - notif = showTranslationUI("fr"); - is(hasTranslationInfoBar(), true, "there's a 'translate' notification"); - notif._getAnonElt("notNow").click(); - is(hasTranslationInfoBar(), false, "no 'translate' notification after clicking 'not now'"); - - info("Reopen to check the url bar icon closes the notification."); - notif = showTranslationUI("fr"); - is(hasTranslationInfoBar(), true, "there's a 'translate' notification"); - PopupNotifications.getNotification("translate").anchorElement.click(); - is(hasTranslationInfoBar(), false, "no 'translate' notification after clicking the url bar icon"); - - info("Check that clicking the url bar icon reopens the info bar"); - checkURLBarIcon(); - // Clicking the anchor element causes a 'showing' event to be sent - // asynchronously to our callback that will then show the infobar. - PopupNotifications.getNotification("translate").anchorElement.click(); - waitForCondition(hasTranslationInfoBar, () => { - ok(hasTranslationInfoBar(), "there's a 'translate' notification"); - aFinishCallback(); - }, "timeout waiting for the info bar to reappear"); -} |