UNPKG

wix-style-react

Version:
119 lines (96 loc) 5.42 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); var _exportNames = { createRendererWithDriver: true, createRendererWithUniDriver: true }; exports.createRendererWithDriver = createRendererWithDriver; exports.createRendererWithUniDriver = createRendererWithUniDriver; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = require("@testing-library/react"); Object.keys(_react).forEach(function (key) { if (key === "default" || key === "__esModule") return; if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; if (key in exports && exports[key] === _react[key]) return; Object.defineProperty(exports, key, { enumerable: true, get: function get() { return _react[key]; } }); }); var _testUtils = require("react-dom/test-utils"); var _vanilla = require("wix-ui-test-utils/vanilla"); var _excluded = ["dataHook"]; 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) { (0, _defineProperty2["default"])(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; } var getElement = function getElement(_ref) { var rendered = _ref.rendered, dataHook = _ref.dataHook; return dataHook ? rendered.container.querySelector("[data-hook=\"".concat(dataHook, "\"]")) : rendered.container.firstChild; }; function createRendererBase(createDriver) { var defaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return function (jsx) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions; var _defaultOptions$optio = _objectSpread(_objectSpread({}, defaultOptions), options), dataHook = _defaultOptions$optio.dataHook, reactTestingLibraryOptions = (0, _objectWithoutProperties2["default"])(_defaultOptions$optio, _excluded); var rendered = (0, _react.render)(jsx, reactTestingLibraryOptions); var element = getElement({ rendered: rendered, dataHook: dataHook }); return _objectSpread(_objectSpread({}, rendered), {}, { driver: createDriver({ rendered: rendered, element: element, component: jsx }) }); }; } /** * Creates a `render` function that returns the same object as `@testing-library/react`'s render, but * with and extra `driver` property. * * The returned render function arguments: * @param [React.Element] jsx a jsx element to render * @param [object] options - render-options for @testing-library/react. The options may also contain a `dataHook` prop which if provided then the driver would be created with the element which is found by the dataHook. If not provided then it assumes that the rendered root element is the component's root element and it will be used for the driver. */ function createRendererWithDriver(driverFactory) { var defaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var createDriver = function createDriver(_ref2) { var rendered = _ref2.rendered, element = _ref2.element, component = _ref2.component; return driverFactory({ element: element, wrapper: rendered.container, eventTrigger: _testUtils.Simulate, component: component }); }; return createRendererBase(createDriver, defaultOptions); } /** * Creates a `render` function that returns the same object as `@testing-library/react`'s render, but * with and extra `driver` property which is a Unidriver. * * The returned render function arguments: * @param [React.Element] jsx a jsx element to render * @param [object] options - render-options for @testing-library/react. The options may also contain a `dataHook` prop which if provided then the driver would be created with the element which is found by the dataHook. If not provided then it assumes that the rendered root element is the component's root element and it will be used for the driver. */ function createRendererWithUniDriver(driverFactory) { var defaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var createDriver = function createDriver(_ref3) { var element = _ref3.element, component = _ref3.component; return driverFactory((0, _vanilla.reactUniDriver)(element), (0, _vanilla.reactUniDriver)(document.body), (0, _vanilla.reactUniDriver)(document), component); }; return createRendererBase(createDriver, defaultOptions); }