UNPKG

@salesforce/design-system-react

Version:

Salesforce Lightning Design System for React

125 lines (114 loc) 5.42 kB
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } import React from 'react'; import ReactDOM from 'react-dom'; import assign from 'lodash.assign'; import chai from 'chai'; import IconSettings from '../../icon-settings'; import ButtonStateful from '../../button-stateful'; chai.should(); describe('Button Stateful: ', function () { // Base defaults var requiredPropsNoVariant = { assistiveText: { icon: 'like' }, iconName: 'like', iconSize: 'large' }; var requiredProps = _objectSpread(_objectSpread({}, requiredPropsNoVariant), {}, { variant: 'icon' }); // Setup and takedown var renderButton = function renderButton(instance) { return function renderButtonFunction() { this.dom = document.createElement('div'); document.body.appendChild(this.dom); /* deepscan-disable REACT_ASYNC_RENDER_RETURN_VALUE */ // eslint-disable-next-line react/no-render-return-value this.component = ReactDOM.render( /*#__PURE__*/React.createElement(IconSettings, { iconPath: "/assets/icons" }, instance), this.dom); /* deepscan-enable REACT_ASYNC_RENDER_RETURN_VALUE */ }; }; function removeButton() { ReactDOM.unmountComponentAtNode(this.dom); document.body.removeChild(this.dom); } var getButton = function getButton(dom) { return dom.querySelector('.slds-button'); }; // Tests describe('Default Structure', function () { beforeEach(renderButton( /*#__PURE__*/React.createElement(ButtonStateful, requiredProps))); afterEach(removeButton); it('button exists - is not undefined', function () { var button = getButton(this.dom); button.should.not.be.undefined; }); it('if no active prop, is not active', function () { var button = getButton(this.dom); button.className.should.include('slds-not-selected'); }); }); describe('External active props works', function () { var propsWithActive = assign({ active: true }, requiredProps); beforeEach(renderButton( /*#__PURE__*/React.createElement(ButtonStateful, propsWithActive))); afterEach(removeButton); it('renders active prop', function () { var button = getButton(this.dom); button.className.should.include('slds-is-selected'); }); }); describe('Aria-* is supported', function () { var propsWithAria = assign({ 'aria-pressed': true, 'aria-label': 'abc', 'aria-live': null }, requiredProps); beforeEach(renderButton( /*#__PURE__*/React.createElement(ButtonStateful, propsWithAria))); afterEach(removeButton); it('honors aria override', function () { var button = getButton(this.dom); button.getAttribute('aria-pressed').should.equal('true'); button.getAttribute('aria-label').should.equal('abc'); chai.expect(button.getAttribute('aria-live')).to.be.null; }); }); describe('Aria default for icon button', function () { var propsToUse = assign({ variant: 'icon' }, requiredPropsNoVariant); beforeEach(renderButton( /*#__PURE__*/React.createElement(ButtonStateful, propsToUse))); afterEach(removeButton); it('gives correct aria default for buttons with icon', function () { var button = getButton(this.dom); button.getAttribute('aria-live').should.equal('polite'); }); }); describe('Aria default for icon-filled button', function () { var propsToUse = assign({ variant: 'icon-filled' }, requiredPropsNoVariant); beforeEach(renderButton( /*#__PURE__*/React.createElement(ButtonStateful, propsToUse))); afterEach(removeButton); it('gives correct aria default for buttons with icon-filled', function () { var button = getButton(this.dom); button.getAttribute('aria-live').should.equal('polite'); }); }); describe('Aria default for non-icon button', function () { var propsToUse = assign({ variant: 'base' }, requiredPropsNoVariant); beforeEach(renderButton( /*#__PURE__*/React.createElement(ButtonStateful, propsToUse))); afterEach(removeButton); it('gives correct aria default for non-icon buttons', function () { var button = getButton(this.dom); button.getAttribute('aria-live').should.equal('assertive'); }); }); // TODO: Write more tests for custom renderers }); //# sourceMappingURL=button-stateful.browser-test.js.map