diff options
Diffstat (limited to 'devtools/client/accessibility/test/node/components/accessibility-prefs.test.js')
-rw-r--r-- | devtools/client/accessibility/test/node/components/accessibility-prefs.test.js | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/devtools/client/accessibility/test/node/components/accessibility-prefs.test.js b/devtools/client/accessibility/test/node/components/accessibility-prefs.test.js new file mode 100644 index 0000000000..efd247d789 --- /dev/null +++ b/devtools/client/accessibility/test/node/components/accessibility-prefs.test.js @@ -0,0 +1,107 @@ +/* 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"; + +const { mount } = require("enzyme"); + +const { + createFactory, +} = require("resource://devtools/client/shared/vendor/react.js"); +const Provider = createFactory( + require("resource://devtools/client/shared/vendor/react-redux.js").Provider +); + +const MenuButton = require("resource://devtools/client/shared/components/menu/MenuButton.js"); +const ConnectedAccessibilityPrefsClass = require("resource://devtools/client/accessibility/components/AccessibilityPrefs.js"); +const AccessibilityPrefsClass = + ConnectedAccessibilityPrefsClass.WrappedComponent; +const AccessibilityPrefs = createFactory(ConnectedAccessibilityPrefsClass); +const { + checkMenuItem, + setupStore, +} = require("resource://devtools/client/accessibility/test/node/helpers.js"); + +const { + PREFS, +} = require("resource://devtools/client/accessibility/constants.js"); + +function checkTogglePrefCheckbox(wrapper, pref) { + const prefsInstance = wrapper.find(AccessibilityPrefsClass).instance(); + prefsInstance.togglePref = jest.fn(); + pref instanceof Node ? pref.click() : pref.simulate("click"); + expect(prefsInstance.togglePref.mock.calls.length).toBe(1); +} + +function getMenuItems(wrapper, selector) { + const menuButton = wrapper.find(MenuButton); + // Focusing on the menu button will trigger rendering of the HTMLTooltip with + // the menu list. + menuButton.childAt(0).getDOMNode().focus(); + + return menuButton + .instance() + .tooltip.panel.querySelectorAll(`.menuitem ${selector}`); +} + +function checkPrefsState(wrapper, expected) { + const prefs = getMenuItems(wrapper, ".pref"); + for (let i = 0; i < prefs.length; i++) { + checkMenuItem(prefs[i], { + checked: expected.prefs[i].active, + label: expected.prefs[i].text, + }); + } + checkMenuItem(getMenuItems(wrapper, ".help")[0], { + role: "link", + label: "Documentation…", + }); +} + +describe("AccessibilityPrefs component:", () => { + it("prefs not set by default", () => { + const store = setupStore(); + const wrapper = mount( + Provider({ store }, AccessibilityPrefs({ toolboxDoc: document })) + ); + const accPrefs = wrapper.find(AccessibilityPrefsClass); + const menuButton = accPrefs.childAt(0); + + expect(wrapper.html()).toMatchSnapshot(); + expect(accPrefs.children().length).toBe(1); + expect(menuButton.is(MenuButton)).toBe(true); + + checkPrefsState(wrapper, { + prefs: [{ active: false, text: "Scroll into view" }], + }); + }); + + it("prefs checked", () => { + const store = setupStore({ + preloadedState: { + ui: { + [PREFS.SCROLL_INTO_VIEW]: true, + }, + }, + }); + const wrapper = mount( + Provider({ store }, AccessibilityPrefs({ toolboxDoc: document })) + ); + expect(wrapper.html()).toMatchSnapshot(); + checkPrefsState(wrapper, { + prefs: [{ active: true, text: "Scroll into view" }], + }); + }); + + it("toggle pref", () => { + const store = setupStore(); + const wrapper = mount( + Provider({ store }, AccessibilityPrefs({ toolboxDoc: document })) + ); + + expect(wrapper.html()).toMatchSnapshot(); + for (const pref of getMenuItems(wrapper, ".pref")) { + checkTogglePrefCheckbox(wrapper, pref); + } + }); +}); |