Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  LangPackMatcherTestUtils.sys.mjs   Sprache: unbekannt

 
/* 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/. */

import { LangPackMatcher } from "resource://gre/modules/LangPackMatcher.sys.mjs";

/**
 * LangPackMatcher.sys.mjs calls out to to the addons store, which involves network requests.
 * Other tests create a fake addons server, and install mock XPIs. At the time of this
 * writing that infrastructure is not available for mochitests.
 *
 * Instead, this test mocks out APIs that have a side-effect, so the addons of the browser
 * are never modified.
 *
 * The calls to get the app's locale and system's locale are also mocked so that the
 * different language mismatch scenarios can be run through.
 *
 * The locales are BCP 47 identifiers:
 *
 * @param {{
 *   sandbox: SinonSandbox,
 *   systemLocale: string,
 *   appLocale, string,
 * }}
 */
export function getAddonAndLocalAPIsMocker(testScope, sandbox) {
  const { info } = testScope;
  return function mockAddonAndLocaleAPIs({ systemLocale, appLocale }) {
    info("Mocking LangPackMatcher.sys.mjs APIs");

    let resolveLangPacks;
    const langPackPromise = new Promise(resolve => {
      resolveLangPacks = availableLangpacks => {
        info(
          `Resolving which langpacks are available for download: ${JSON.stringify(
            availableLangpacks
          )}`
        );
        resolve(
          availableLangpacks.map(locale => ({
            guid: `langpack-${locale}@firefox.mozilla.org`,
            type: "language",
            hash: locale,
            target_locale: locale,
            current_compatible_version: {
              files: [
                {
                  platform: "all",
                  url: `http://example.com/${locale}.langpack.xpi`,
                },
              ],
            },
          }))
        );
      };
    });

    let resolveInstaller;
    const installerPromise = new Promise(resolve => {
      resolveInstaller = () => {
        info("LangPack install finished.");
        resolve();
      };
    });

    const { mockable } = LangPackMatcher;
    if (appLocale) {
      const availableLocales = [appLocale];
      if (appLocale !== "en-US") {
        // Ensure the fallback behavior is accurately simulated for Firefox.
        availableLocales.push("en-US");
      }
      sandbox
        .stub(mockable, "getAvailableLocalesIncludingFallback")
        .returns(availableLocales);
      sandbox.stub(mockable, "getDefaultLocale").returns(appLocale);
      sandbox.stub(mockable, "getAppLocaleAsBCP47").returns(appLocale);
      sandbox.stub(mockable, "getLastFallbackLocale").returns("en-US");
    }
    if (systemLocale) {
      sandbox.stub(mockable, "getSystemLocale").returns(systemLocale);
    }

    sandbox.stub(mockable, "getAvailableLangpacks").callsFake(() => {
      info("Requesting which langpacks are available for download");
      return langPackPromise;
    });

    sandbox.stub(mockable, "installLangPack").callsFake(langPack => {
      info(`LangPack install started, but pending: ${langPack.target_locale}`);
      return installerPromise;
    });

    sandbox.stub(mockable, "setRequestedAppLocales").callsFake(locales => {
      info(
        `Changing the browser's requested locales to: ${JSON.stringify(
          locales
        )}`
      );
    });

    return {
      /**
       * Resolves the addons API call with available langpacks. Call with a list
       * of BCP 47 identifiers.
       *
       * @type {(availableLangpacks: string[]) => {}}
       */
      resolveLangPacks,

      /**
       * Resolves the pending call to install a langpack.
       *
       * @type {() => {}}
       */
      resolveInstaller,

      /**
       * The mocked APIs.
       */
      mockable,
    };
  };
}

[ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge