mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 20:05:49 +00:00
d1dfdb8a14
MozReview-Commit-ID: Hhm4YBansg1 --HG-- extra : rebase_source : 3cb49159fa3f5dae12e4eb21f22e747850fdf184
136 lines
5.1 KiB
JavaScript
136 lines
5.1 KiB
JavaScript
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
registerCleanupFunction(teardown);
|
|
|
|
add_task(async function testNarrate() {
|
|
setup();
|
|
|
|
await spawnInNewReaderTab(TEST_ARTICLE, async function() {
|
|
let TEST_VOICE = "urn:moz-tts:fake-indirect:teresa";
|
|
let $ = content.document.querySelector.bind(content.document);
|
|
|
|
await NarrateTestUtils.waitForNarrateToggle(content);
|
|
|
|
let popup = $(NarrateTestUtils.POPUP);
|
|
ok(!NarrateTestUtils.isVisible(popup), "popup is initially hidden");
|
|
|
|
let toggle = $(NarrateTestUtils.TOGGLE);
|
|
toggle.click();
|
|
|
|
ok(NarrateTestUtils.isVisible(popup), "popup toggled");
|
|
|
|
let voiceOptions = $(NarrateTestUtils.VOICE_OPTIONS);
|
|
ok(!NarrateTestUtils.isVisible(voiceOptions),
|
|
"voice options are initially hidden");
|
|
|
|
$(NarrateTestUtils.VOICE_SELECT).click();
|
|
ok(NarrateTestUtils.isVisible(voiceOptions), "voice options pop up");
|
|
|
|
let prefChanged = NarrateTestUtils.waitForPrefChange("narrate.voice");
|
|
ok(NarrateTestUtils.selectVoice(content, TEST_VOICE),
|
|
"test voice selected");
|
|
await prefChanged;
|
|
|
|
ok(!NarrateTestUtils.isVisible(voiceOptions), "voice options hidden again");
|
|
|
|
NarrateTestUtils.isStoppedState(content, ok);
|
|
|
|
let promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphstart");
|
|
$(NarrateTestUtils.START).click();
|
|
let speechinfo = (await promiseEvent).detail;
|
|
is(speechinfo.voice, TEST_VOICE, "correct voice is being used");
|
|
let paragraph = speechinfo.paragraph;
|
|
|
|
NarrateTestUtils.isStartedState(content, ok);
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphstart");
|
|
$(NarrateTestUtils.FORWARD).click();
|
|
speechinfo = (await promiseEvent).detail;
|
|
is(speechinfo.voice, TEST_VOICE, "same voice is used");
|
|
isnot(speechinfo.paragraph, paragraph, "next paragraph is being spoken");
|
|
|
|
NarrateTestUtils.isStartedState(content, ok);
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphstart");
|
|
$(NarrateTestUtils.BACK).click();
|
|
speechinfo = (await promiseEvent).detail;
|
|
is(speechinfo.paragraph, paragraph, "first paragraph being spoken");
|
|
|
|
NarrateTestUtils.isStartedState(content, ok);
|
|
|
|
paragraph = speechinfo.paragraph;
|
|
$(NarrateTestUtils.STOP).click();
|
|
await ContentTaskUtils.waitForCondition(
|
|
() => !$(NarrateTestUtils.STOP), "transitioned to stopped state");
|
|
NarrateTestUtils.isStoppedState(content, ok);
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphstart");
|
|
$(NarrateTestUtils.START).click();
|
|
speechinfo = (await promiseEvent).detail;
|
|
is(speechinfo.paragraph, paragraph, "read same paragraph again");
|
|
|
|
NarrateTestUtils.isStartedState(content, ok);
|
|
|
|
let eventUtils = NarrateTestUtils.getEventUtils(content);
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphstart");
|
|
prefChanged = NarrateTestUtils.waitForPrefChange("narrate.rate");
|
|
$(NarrateTestUtils.RATE).focus();
|
|
eventUtils.sendKey("UP", content);
|
|
let newspeechinfo = (await promiseEvent).detail;
|
|
is(newspeechinfo.paragraph, speechinfo.paragraph, "same paragraph");
|
|
isnot(newspeechinfo.rate, speechinfo.rate, "rate changed");
|
|
await prefChanged;
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphend");
|
|
$(NarrateTestUtils.STOP).click();
|
|
await promiseEvent;
|
|
|
|
await ContentTaskUtils.waitForCondition(
|
|
() => !$(NarrateTestUtils.STOP), "transitioned to stopped state");
|
|
NarrateTestUtils.isStoppedState(content, ok);
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "scroll");
|
|
content.scrollBy(0, 10);
|
|
await promiseEvent;
|
|
ok(!NarrateTestUtils.isVisible(popup), "popup is hidden after scroll");
|
|
|
|
toggle.click();
|
|
ok(NarrateTestUtils.isVisible(popup), "popup is toggled again");
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "paragraphstart");
|
|
$(NarrateTestUtils.START).click();
|
|
await promiseEvent;
|
|
NarrateTestUtils.isStartedState(content, ok);
|
|
|
|
promiseEvent = ContentTaskUtils.waitForEvent(content, "scroll");
|
|
content.scrollBy(0, -10);
|
|
await promiseEvent;
|
|
ok(NarrateTestUtils.isVisible(popup), "popup stays visible after scroll");
|
|
|
|
toggle.click();
|
|
ok(!NarrateTestUtils.isVisible(popup), "popup is dismissed while speaking");
|
|
NarrateTestUtils.isStartedState(content, ok);
|
|
|
|
// Go forward all the way to the end of the article. We should eventually
|
|
// stop.
|
|
do {
|
|
promiseEvent = Promise.race([
|
|
ContentTaskUtils.waitForEvent(content, "paragraphstart"),
|
|
ContentTaskUtils.waitForEvent(content, "paragraphsdone")]);
|
|
$(NarrateTestUtils.FORWARD).click();
|
|
} while ((await promiseEvent).type == "paragraphstart");
|
|
|
|
// This is to make sure we are not actively scrolling when the tab closes.
|
|
content.scroll(0, 0);
|
|
|
|
await ContentTaskUtils.waitForCondition(
|
|
() => !$(NarrateTestUtils.STOP), "transitioned to stopped state");
|
|
NarrateTestUtils.isStoppedState(content, ok);
|
|
});
|
|
});
|