summaryrefslogtreecommitdiffstats
path: root/toolkit/components/narrate/test/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/narrate/test/head.js')
-rw-r--r--toolkit/components/narrate/test/head.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/toolkit/components/narrate/test/head.js b/toolkit/components/narrate/test/head.js
new file mode 100644
index 0000000000..79fa77385e
--- /dev/null
+++ b/toolkit/components/narrate/test/head.js
@@ -0,0 +1,86 @@
+/* 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/. */
+
+/* exported teardown, setup, toggleExtension,
+ spawnInNewReaderTab, TEST_ARTICLE, TEST_ITALIAN_ARTICLE */
+
+"use strict";
+
+const TEST_ARTICLE =
+ "http://example.com/browser/toolkit/components/narrate/test/moby_dick.html";
+
+const TEST_ITALIAN_ARTICLE =
+ "http://example.com/browser/toolkit/components/narrate/test/inferno.html";
+
+ChromeUtils.defineESModuleGetters(this, {
+ AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
+});
+
+const TEST_PREFS = {
+ "reader.parse-on-load.enabled": true,
+ "media.webspeech.synth.enabled": true,
+ "media.webspeech.synth.test": true,
+ "narrate.enabled": true,
+ "narrate.test": true,
+ "narrate.voice": null,
+ "narrate.filter-voices": false,
+};
+
+function setup(voiceUri = "automatic", filterVoices = false) {
+ let prefs = Object.assign({}, TEST_PREFS, {
+ "narrate.filter-voices": filterVoices,
+ "narrate.voice": JSON.stringify({ en: voiceUri }),
+ });
+
+ // Set required test prefs.
+ Object.entries(prefs).forEach(([name, value]) => {
+ switch (typeof value) {
+ case "boolean":
+ setBoolPref(name, value);
+ break;
+ case "string":
+ setCharPref(name, value);
+ break;
+ }
+ });
+}
+
+function teardown() {
+ // Reset test prefs.
+ Object.entries(TEST_PREFS).forEach(pref => {
+ clearUserPref(pref[0]);
+ });
+}
+
+function spawnInNewReaderTab(url, func) {
+ return BrowserTestUtils.withNewTab(
+ { gBrowser, url: `about:reader?url=${encodeURIComponent(url)}` },
+ async function (browser) {
+ // This imports the test utils for all tests, so we'll declare it as
+ // a global here which will make it ESLint happy.
+ /* global NarrateTestUtils */
+ SpecialPowers.addTaskImport(
+ "NarrateTestUtils",
+ "chrome://mochitests/content/browser/" +
+ "toolkit/components/narrate/test/NarrateTestUtils.sys.mjs"
+ );
+ await SpecialPowers.spawn(browser, [], async function () {
+ await NarrateTestUtils.getReaderReadyPromise(content);
+ });
+ await SpecialPowers.spawn(browser, [], func);
+ }
+ );
+}
+
+function setBoolPref(name, value) {
+ Services.prefs.setBoolPref(name, value);
+}
+
+function setCharPref(name, value) {
+ Services.prefs.setCharPref(name, value);
+}
+
+function clearUserPref(name) {
+ Services.prefs.clearUserPref(name);
+}