summaryrefslogtreecommitdiffstats
path: root/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js')
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js
new file mode 100644
index 0000000000..80206dd945
--- /dev/null
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js
@@ -0,0 +1,96 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const URL_BASE = `${getFirefoxViewURL()}#`;
+
+function assertCorrectPage(document, name, event) {
+ is(
+ document.location.hash,
+ `#${name}`,
+ `Navigation button for ${name} navigates to ${URL_BASE + name} on ${event}.`
+ );
+ is(
+ document.querySelector("named-deck").selectedViewName,
+ name,
+ "The correct deck child is selected"
+ );
+}
+
+add_task(async function test_side_component_navigation_by_click() {
+ await withFirefoxView({}, async browser => {
+ await SimpleTest.promiseFocus(browser);
+
+ const { document } = browser.contentWindow;
+ let win = browser.ownerGlobal;
+ const categoryButtons = document.querySelectorAll("fxview-category-button");
+
+ for (let element of categoryButtons) {
+ const name = element.name;
+ let buttonClicked = BrowserTestUtils.waitForEvent(
+ element.buttonEl,
+ "click",
+ win
+ );
+
+ info(`Clicking navigation button for ${name}`);
+ EventUtils.synthesizeMouseAtCenter(element.buttonEl, {}, content);
+ await buttonClicked;
+
+ assertCorrectPage(document, name, "click");
+ }
+ });
+});
+
+add_task(async function test_side_component_navigation_by_keyboard() {
+ await withFirefoxView({}, async browser => {
+ await SimpleTest.promiseFocus(browser);
+
+ const { document } = browser.contentWindow;
+ let win = browser.ownerGlobal;
+ const categoryButtons = document.querySelectorAll("fxview-category-button");
+ const firstButton = categoryButtons[0];
+
+ firstButton.focus();
+ is(
+ document.activeElement,
+ firstButton,
+ "The first category button has focus"
+ );
+
+ for (let element of Array.from(categoryButtons).slice(1)) {
+ const name = element.name;
+ let buttonFocused = BrowserTestUtils.waitForEvent(element, "focus", win);
+
+ info(`Focus is on ${document.activeElement.name}`);
+ info(`Arrow down on navigation to ${name}`);
+ EventUtils.synthesizeKey("KEY_ArrowDown", {}, win);
+ await buttonFocused;
+
+ assertCorrectPage(document, name, "key press");
+ }
+ });
+});
+
+add_task(async function test_direct_navigation_to_correct_category() {
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ const categoryButtons = document.querySelectorAll("fxview-category-button");
+ const namedDeck = document.querySelector("named-deck");
+
+ for (let element of categoryButtons) {
+ const name = element.name;
+
+ info(`Navigating to ${URL_BASE + name}`);
+ document.location.assign(URL_BASE + name);
+ await BrowserTestUtils.waitForCondition(() => {
+ return namedDeck.selectedViewName === name;
+ }, "Wait for navigation to complete");
+
+ is(
+ namedDeck.selectedViewName,
+ name,
+ `The correct deck child for category ${name} is selected`
+ );
+ }
+ });
+});