display-tabbing-order.test.js (3062B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { mount } = require("enzyme"); 8 9 const { 10 createFactory, 11 } = require("resource://devtools/client/shared/vendor/react.mjs"); 12 const Provider = createFactory( 13 require("resource://devtools/client/shared/vendor/react-redux.js").Provider 14 ); 15 const { 16 setupStore, 17 } = require("resource://devtools/client/accessibility/test/node/helpers.js"); 18 const { 19 UPDATE_DISPLAY_TABBING_ORDER, 20 } = require("resource://devtools/client/accessibility/constants.js"); 21 22 const ConnectedDisplayTabbingOrderClass = require("resource://devtools/client/accessibility/components/DisplayTabbingOrder.js"); 23 const DisplayTabbingOrderClass = 24 ConnectedDisplayTabbingOrderClass.WrappedComponent; 25 const DisplayTabbingOrder = createFactory(ConnectedDisplayTabbingOrderClass); 26 27 function testCheckbox(wrapper, expected) { 28 expect(wrapper.html()).toMatchSnapshot(); 29 const displayTabbingOrder = wrapper.find(DisplayTabbingOrderClass); 30 expect(displayTabbingOrder.children().length).toBe(1); 31 32 // Label checks 33 const label = displayTabbingOrder.childAt(0); 34 expect(label.hasClass("accessibility-tabbing-order")).toBe(true); 35 expect(label.hasClass("devtools-checkbox-label")).toBe(true); 36 expect(label.prop("title")).toBe( 37 "Show tabbing order of elements and their tabbing index." 38 ); 39 expect(label.text()).toBe("Show Tabbing Order"); 40 expect(label.children().length).toBe(1); 41 42 // Checkbox checks 43 const checkbox = label.childAt(0); 44 expect(checkbox.prop("checked")).toBe(expected.checked); 45 expect(checkbox.prop("disabled")).toBe(!!expected.disabled); 46 } 47 48 describe("DisplayTabbingOrder component:", () => { 49 it("default render", () => { 50 const store = setupStore(); 51 const wrapper = mount(Provider({ store }, DisplayTabbingOrder())); 52 53 testCheckbox(wrapper, { checked: false }); 54 }); 55 56 it("toggle tabbing order overlay", () => { 57 const store = setupStore(); 58 const wrapper = mount(Provider({ store }, DisplayTabbingOrder())); 59 60 expect(wrapper.html()).toMatchSnapshot(); 61 const displayTabbingOrderInstance = wrapper 62 .find(DisplayTabbingOrderClass) 63 .instance(); 64 displayTabbingOrderInstance.onChange = jest.fn(); 65 displayTabbingOrderInstance.forceUpdate(); 66 const checkbox = wrapper.find("input"); 67 checkbox.simulate("change"); 68 expect(displayTabbingOrderInstance.onChange.mock.calls.length).toBe(1); 69 }); 70 71 it("displaying tabbing order render/update", () => { 72 const store = setupStore({ 73 preloadedState: { 74 ui: { 75 tabbingOrderDisplayed: true, 76 }, 77 }, 78 }); 79 const wrapper = mount(Provider({ store }, DisplayTabbingOrder())); 80 81 testCheckbox(wrapper, { checked: true }); 82 83 store.dispatch({ 84 type: UPDATE_DISPLAY_TABBING_ORDER, 85 tabbingOrderDisplayed: false, 86 }); 87 wrapper.update(); 88 89 testCheckbox(wrapper, { checked: false }); 90 }); 91 });