UNPKG

react-native-accessibility-engine

Version:

Make accessibility-related assertions on React Native code using React Test Renderer

80 lines (68 loc) 3.75 kB
"use strict"; var _react = _interopRequireDefault(require("react")); var _reactNative = require("react-native"); var _assets = _interopRequireDefault(require("@tests/assets")); var _engine = require("../engine"); var _pressableAccessibleRequired = _interopRequireDefault(require("../rules/pressable-accessible-required")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const NonAccessibleButton = () => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { accessible: false }, /*#__PURE__*/_react.default.createElement(_reactNative.Image, { source: _assets.default.filledHeart['32px'] })); const Button = () => /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, { accessible: true, accessibilityRole: "button", accessibilityLabel: "Like" }, /*#__PURE__*/_react.default.createElement(_reactNative.Image, { source: _assets.default.filledHeart['32px'] })); it('should contain accessibility errors', () => { expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).not.toBeAccessible(); }); it('should not contain accessibility errors', () => { expect( /*#__PURE__*/_react.default.createElement(Button, null)).toBeAccessible(); }); it('should report error if component is not accessible', () => { expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible()).toThrow(); }); it('should not report error if component is accessible', () => { expect(() => expect( /*#__PURE__*/_react.default.createElement(Button, null)).not.toBeAccessible()).toThrow(); }); it('should always force returnViolations to be true', () => { // returnViolations defaults to true expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible()).not.toThrow(_engine.AccessibilityError); expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible({ returnViolations: false })).not.toThrow(_engine.AccessibilityError); }); it('should allow configurable rules for a single run of jest matcher', () => { expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible({ rules: [] })).not.toThrow(); expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible({ rules: ['pressable-accessible-required'] })).toThrow(_pressableAccessibleRequired.default.help.problem); }); it('should allow custom handling for a single run of jest matcher', () => { const testOverrideReturnFunctionality = () => []; expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible({ customViolationHandler: testOverrideReturnFunctionality })).not.toThrow(); }); it('should allow configurable default rules for the jest matcher', () => { global.__A11Y_RULES__ = []; expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible()).not.toThrow(); global.__A11Y_RULES__ = ['pressable-accessible-required']; expect(() => expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).toBeAccessible()).toThrow(_pressableAccessibleRequired.default.help.problem); }); it('should allow configurable default customViolationHandler for the jest matcher', () => { const mockHandler = jest.fn(); global.__CUSTOM_VIOLATION_HANDLER__ = violations => { mockHandler(); return violations; }; expect( /*#__PURE__*/_react.default.createElement(NonAccessibleButton, null)).not.toBeAccessible(); expect(mockHandler).toHaveBeenCalled(); }); //# sourceMappingURL=toBeAccessible.test.js.map