@pie-lib/test-utils 1.1.1-next.0 → 1.1.1-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +0 -14
- package/lib/index.js.map +1 -1
- package/lib/keyboard.js +0 -10
- package/lib/keyboard.js.map +1 -1
- package/lib/web-components.js +0 -14
- package/lib/web-components.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/index.test.js +2 -4
- package/src/__tests__/keyboard.test.js +1 -1
- package/src/index.js +1 -1
package/lib/index.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/es.symbol.js");
|
|
4
|
-
require("core-js/modules/es.array.filter.js");
|
|
5
|
-
require("core-js/modules/es.array.iterator.js");
|
|
6
|
-
require("core-js/modules/es.object.define-properties.js");
|
|
7
|
-
require("core-js/modules/es.object.define-property.js");
|
|
8
|
-
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
9
|
-
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
10
|
-
require("core-js/modules/es.object.keys.js");
|
|
11
|
-
require("core-js/modules/es.string.iterator.js");
|
|
12
|
-
require("core-js/modules/es.weak-map.js");
|
|
13
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
14
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
15
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
16
5
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -115,9 +104,6 @@ Object.defineProperty(exports, "waitForRemoval", {
|
|
|
115
104
|
return _react2.waitForElementToBeRemoved;
|
|
116
105
|
}
|
|
117
106
|
});
|
|
118
|
-
require("core-js/modules/es.array.for-each.js");
|
|
119
|
-
require("core-js/modules/es.object.to-string.js");
|
|
120
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
121
107
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
122
108
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
123
109
|
var React = _interopRequireWildcard(require("react"));
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_react2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_styles","_userEvent","_jestDom","_keyboard","_webComponents","_excluded","_excluded2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","set","_t","getOwnPropertyDescriptor","ownKeys","getOwnPropertySymbols","filter","push","apply","_objectSpread","arguments","length","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defaultTheme","createTheme","renderWithTheme","ui","options","undefined","_options$theme","theme","renderOptions","_objectWithoutProperties2","Wrapper","_ref","children","createElement","ThemeProvider","propTypes","PropTypes","node","render","wrapper","renderWithProviders","_options$theme2","_options$providers","providers","_ref2","wrapped","Provider","createTestTheme","themeOptions"],"sources":["../src/index.js"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { render } from '@testing-library/react';\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_react2","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_styles","_userEvent","_jestDom","_keyboard","_webComponents","_excluded","_excluded2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","set","_t","getOwnPropertyDescriptor","ownKeys","getOwnPropertySymbols","filter","push","apply","_objectSpread","arguments","length","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defaultTheme","createTheme","renderWithTheme","ui","options","undefined","_options$theme","theme","renderOptions","_objectWithoutProperties2","Wrapper","_ref","children","createElement","ThemeProvider","propTypes","PropTypes","node","render","wrapper","renderWithProviders","_options$theme2","_options$providers","providers","_ref2","wrapped","Provider","createTestTheme","themeOptions"],"sources":["../src/index.js"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { render } from '@testing-library/react';\nimport { createTheme, ThemeProvider } from '@mui/material/styles';\n\n/**\n * Default MUI theme for testing\n */\nconst defaultTheme = createTheme();\n\n/**\n * Render a component with MUI ThemeProvider\n *\n * @param {React.ReactElement} ui - The component to render\n * @param {Object} options - Render options\n * @param {Object} options.theme - Custom MUI theme (optional)\n * @param {Object} options.renderOptions - Additional options passed to RTL render\n * @returns {Object} RTL render result\n *\n * @example\n * const { getByRole } = renderWithTheme(<Button>Click me</Button>);\n * expect(getByRole('button')).toBeInTheDocument();\n */\nexport function renderWithTheme(ui, options = {}) {\n const { theme = defaultTheme, ...renderOptions } = options;\n\n function Wrapper({ children }) {\n return <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n }\n Wrapper.propTypes = {\n children: PropTypes.node,\n };\n\n return render(ui, { wrapper: Wrapper, ...renderOptions });\n}\n\n/**\n * Render a component with multiple providers (Theme, etc.)\n * Useful when you need to wrap components with various context providers\n *\n * @param {React.ReactElement} ui - The component to render\n * @param {Object} options - Render options\n * @param {Object} options.theme - Custom MUI theme (optional)\n * @param {Array<React.ComponentType>} options.providers - Additional providers to wrap\n * @param {Object} options.renderOptions - Additional options passed to RTL render\n * @returns {Object} RTL render result\n *\n * @example\n * const { getByText } = renderWithProviders(\n * <MyComponent />,\n * { providers: [ReduxProvider, RouterProvider] }\n * );\n */\nexport function renderWithProviders(ui, options = {}) {\n const { theme = defaultTheme, providers = [], ...renderOptions } = options;\n\n function Wrapper({ children }) {\n let wrapped = <ThemeProvider theme={theme}>{children}</ThemeProvider>;\n\n // Wrap with additional providers (from innermost to outermost)\n providers.forEach((Provider) => {\n wrapped = <Provider>{wrapped}</Provider>;\n });\n\n return wrapped;\n }\n Wrapper.propTypes = {\n children: PropTypes.node,\n };\n\n return render(ui, { wrapper: Wrapper, ...renderOptions });\n}\n\n/**\n * Create a custom theme for testing\n * Useful for testing components with specific theme configurations\n *\n * @param {Object} themeOptions - MUI theme options\n * @returns {Object} MUI theme\n *\n * @example\n * const darkTheme = createTestTheme({ palette: { mode: 'dark' } });\n * renderWithTheme(<Component />, { theme: darkTheme });\n */\nexport function createTestTheme(themeOptions = {}) {\n return createTheme(themeOptions);\n}\n\n/**\n * Wait for an element to be removed from the DOM\n * Wrapper around waitForElementToBeRemoved for convenience\n *\n * @example\n * await waitForRemoval(() => screen.queryByText('Loading...'));\n */\nexport { waitForElementToBeRemoved as waitForRemoval } from '@testing-library/react';\n\n/**\n * Re-export all of @testing-library/react for convenience\n * This allows consumers to import everything from one place\n */\nexport * from '@testing-library/react';\n\n/**\n * Re-export userEvent as a named export for convenience\n */\nexport { default as userEvent } from '@testing-library/user-event';\n\n/**\n * Re-export jest-dom matchers (they're automatically added in jest.setup.js,\n * but we export them here for TypeScript support)\n */\nexport * from '@testing-library/jest-dom';\n\n/**\n * Keyboard helpers for testing keyboard interactions\n * Especially useful for components checking event.keyCode\n */\nexport {\n Keys,\n pressKey,\n typeAndSubmit,\n clearAndType,\n navigateWithKeys,\n} from './keyboard';\n\n/**\n * Web component testing utilities\n * For testing light DOM custom elements (no Shadow DOM)\n */\nexport {\n waitForCustomElement,\n renderWebComponent,\n dispatchCustomEvent,\n waitForEvent,\n isCustomElementDefined,\n createCustomElement,\n} from './web-components';\n\n"],"mappings":"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","ignoreList":[]}
|
package/lib/keyboard.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/es.symbol.js");
|
|
4
|
-
require("core-js/modules/es.array.filter.js");
|
|
5
|
-
require("core-js/modules/es.array.for-each.js");
|
|
6
|
-
require("core-js/modules/es.object.define-properties.js");
|
|
7
|
-
require("core-js/modules/es.object.define-property.js");
|
|
8
|
-
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
9
|
-
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
10
|
-
require("core-js/modules/es.object.keys.js");
|
|
11
|
-
require("core-js/modules/es.object.to-string.js");
|
|
12
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
13
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
4
|
Object.defineProperty(exports, "__esModule", {
|
|
15
5
|
value: true
|
package/lib/keyboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.js","names":["_userEvent","_interopRequireDefault","require","_react","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","Keys","exports","ENTER","ESCAPE","SPACE","ARROW_LEFT","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","TAB","BACKSPACE","DELETE","HOME","END","PAGE_UP","PAGE_DOWN","pressKey","element","keyCode","type","undefined","options","event","KeyboardEvent","which","bubbles","cancelable","fireEvent","typeAndSubmit","_x","_x2","_typeAndSubmit","_asyncToGenerator2","_regenerator","mark","_callee","text","user","wrap","_context","prev","next","userEvent","setup","stop","clearAndType","_x3","_x4","_clearAndType","_callee2","_context2","clear","navigateWithKeys","steps","direction","key","count","Math","abs","i"],"sources":["../src/keyboard.js"],"sourcesContent":["import userEvent from '@testing-library/user-event';\nimport { fireEvent } from '@testing-library/react';\n\n/**\n * Common keyboard key codes\n * Useful for legacy components that check event.keyCode\n *\n * @example\n * pressKey(input, Keys.ENTER);\n * pressKey(input, Keys.ESCAPE);\n */\nexport const Keys = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n ARROW_LEFT: 37,\n ARROW_UP: 38,\n ARROW_RIGHT: 39,\n ARROW_DOWN: 40,\n TAB: 9,\n BACKSPACE: 8,\n DELETE: 46,\n HOME: 36,\n END: 35,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n};\n\n/**\n * Simulate keyboard event with keyCode\n * Useful for legacy components checking event.keyCode\n *\n * userEvent.type() with special keys like {Enter} doesn't work well with\n * components that check event.keyCode. Use this helper instead.\n *\n * @param {HTMLElement} element - Target element\n * @param {number} keyCode - Key code (use Keys.ENTER, Keys.ESCAPE, etc.)\n * @param {string} type - Event type (keydown, keyup, keypress)\n * @param {Object} options - Additional event properties\n *\n * @example\n * // Press Enter on an input\n * const input = screen.getByRole('textbox');\n * pressKey(input, Keys.ENTER);\n *\n * @example\n * // Press Escape with keyup event\n * pressKey(dialog, Keys.ESCAPE, 'keyup');\n *\n * @example\n * // Press with additional properties\n * pressKey(input, Keys.ENTER, 'keydown', { ctrlKey: true });\n */\nexport function pressKey(element, keyCode, type = 'keydown', options = {}) {\n const event = new KeyboardEvent(type, {\n keyCode,\n which: keyCode,\n bubbles: true,\n cancelable: true,\n ...options,\n });\n\n fireEvent(element, event);\n}\n\n/**\n * Type text and then press Enter\n * Common pattern for form submissions\n *\n * @param {HTMLElement} element - Input element\n * @param {string} text - Text to type\n *\n * @example\n * const input = screen.getByRole('textbox');\n * await typeAndSubmit(input, 'hello world');\n * expect(onSubmit).toHaveBeenCalledWith('hello world');\n */\nexport async function typeAndSubmit(element, text) {\n const user = userEvent.setup();\n await user.type(element, text);\n pressKey(element, Keys.ENTER);\n}\n\n/**\n * Clear input and type new text\n * Common pattern for updating form fields\n *\n * @param {HTMLElement} element - Input element\n * @param {string} text - New text to type\n *\n * @example\n * const input = screen.getByRole('textbox');\n * await clearAndType(input, 'new value');\n */\nexport async function clearAndType(element, text) {\n const user = userEvent.setup();\n await user.clear(element);\n await user.type(element, text);\n}\n\n/**\n * Simulate keyboard navigation\n * Press arrow keys to navigate through a list\n *\n * @param {HTMLElement} element - List or container element\n * @param {number} steps - Number of steps to navigate (positive = down/right, negative = up/left)\n * @param {string} direction - 'vertical' or 'horizontal'\n *\n * @example\n * // Navigate down 3 items in a list\n * navigateWithKeys(listbox, 3, 'vertical');\n *\n * @example\n * // Navigate left 2 items\n * navigateWithKeys(tabs, -2, 'horizontal');\n */\nexport function navigateWithKeys(element, steps, direction = 'vertical') {\n const key = direction === 'vertical'\n ? (steps > 0 ? Keys.ARROW_DOWN : Keys.ARROW_UP)\n : (steps > 0 ? Keys.ARROW_RIGHT : Keys.ARROW_LEFT);\n\n const count = Math.abs(steps);\n for (let i = 0; i < count; i++) {\n pressKey(element, key);\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"keyboard.js","names":["_userEvent","_interopRequireDefault","require","_react","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","Keys","exports","ENTER","ESCAPE","SPACE","ARROW_LEFT","ARROW_UP","ARROW_RIGHT","ARROW_DOWN","TAB","BACKSPACE","DELETE","HOME","END","PAGE_UP","PAGE_DOWN","pressKey","element","keyCode","type","undefined","options","event","KeyboardEvent","which","bubbles","cancelable","fireEvent","typeAndSubmit","_x","_x2","_typeAndSubmit","_asyncToGenerator2","_regenerator","mark","_callee","text","user","wrap","_context","prev","next","userEvent","setup","stop","clearAndType","_x3","_x4","_clearAndType","_callee2","_context2","clear","navigateWithKeys","steps","direction","key","count","Math","abs","i"],"sources":["../src/keyboard.js"],"sourcesContent":["import userEvent from '@testing-library/user-event';\nimport { fireEvent } from '@testing-library/react';\n\n/**\n * Common keyboard key codes\n * Useful for legacy components that check event.keyCode\n *\n * @example\n * pressKey(input, Keys.ENTER);\n * pressKey(input, Keys.ESCAPE);\n */\nexport const Keys = {\n ENTER: 13,\n ESCAPE: 27,\n SPACE: 32,\n ARROW_LEFT: 37,\n ARROW_UP: 38,\n ARROW_RIGHT: 39,\n ARROW_DOWN: 40,\n TAB: 9,\n BACKSPACE: 8,\n DELETE: 46,\n HOME: 36,\n END: 35,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n};\n\n/**\n * Simulate keyboard event with keyCode\n * Useful for legacy components checking event.keyCode\n *\n * userEvent.type() with special keys like {Enter} doesn't work well with\n * components that check event.keyCode. Use this helper instead.\n *\n * @param {HTMLElement} element - Target element\n * @param {number} keyCode - Key code (use Keys.ENTER, Keys.ESCAPE, etc.)\n * @param {string} type - Event type (keydown, keyup, keypress)\n * @param {Object} options - Additional event properties\n *\n * @example\n * // Press Enter on an input\n * const input = screen.getByRole('textbox');\n * pressKey(input, Keys.ENTER);\n *\n * @example\n * // Press Escape with keyup event\n * pressKey(dialog, Keys.ESCAPE, 'keyup');\n *\n * @example\n * // Press with additional properties\n * pressKey(input, Keys.ENTER, 'keydown', { ctrlKey: true });\n */\nexport function pressKey(element, keyCode, type = 'keydown', options = {}) {\n const event = new KeyboardEvent(type, {\n keyCode,\n which: keyCode,\n bubbles: true,\n cancelable: true,\n ...options,\n });\n\n fireEvent(element, event);\n}\n\n/**\n * Type text and then press Enter\n * Common pattern for form submissions\n *\n * @param {HTMLElement} element - Input element\n * @param {string} text - Text to type\n *\n * @example\n * const input = screen.getByRole('textbox');\n * await typeAndSubmit(input, 'hello world');\n * expect(onSubmit).toHaveBeenCalledWith('hello world');\n */\nexport async function typeAndSubmit(element, text) {\n const user = userEvent.setup();\n await user.type(element, text);\n pressKey(element, Keys.ENTER);\n}\n\n/**\n * Clear input and type new text\n * Common pattern for updating form fields\n *\n * @param {HTMLElement} element - Input element\n * @param {string} text - New text to type\n *\n * @example\n * const input = screen.getByRole('textbox');\n * await clearAndType(input, 'new value');\n */\nexport async function clearAndType(element, text) {\n const user = userEvent.setup();\n await user.clear(element);\n await user.type(element, text);\n}\n\n/**\n * Simulate keyboard navigation\n * Press arrow keys to navigate through a list\n *\n * @param {HTMLElement} element - List or container element\n * @param {number} steps - Number of steps to navigate (positive = down/right, negative = up/left)\n * @param {string} direction - 'vertical' or 'horizontal'\n *\n * @example\n * // Navigate down 3 items in a list\n * navigateWithKeys(listbox, 3, 'vertical');\n *\n * @example\n * // Navigate left 2 items\n * navigateWithKeys(tabs, -2, 'horizontal');\n */\nexport function navigateWithKeys(element, steps, direction = 'vertical') {\n const key = direction === 'vertical'\n ? (steps > 0 ? Keys.ARROW_DOWN : Keys.ARROW_UP)\n : (steps > 0 ? Keys.ARROW_RIGHT : Keys.ARROW_LEFT);\n\n const count = Math.abs(steps);\n for (let i = 0; i < count; i++) {\n pressKey(element, key);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/web-components.js
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
require("core-js/modules/es.symbol.js");
|
|
4
|
-
require("core-js/modules/es.array.filter.js");
|
|
5
|
-
require("core-js/modules/es.object.define-properties.js");
|
|
6
|
-
require("core-js/modules/es.object.define-property.js");
|
|
7
|
-
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
8
|
-
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
9
|
-
require("core-js/modules/es.object.keys.js");
|
|
10
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
11
4
|
Object.defineProperty(exports, "__esModule", {
|
|
12
5
|
value: true
|
|
@@ -18,13 +11,6 @@ exports.renderWebComponent = renderWebComponent;
|
|
|
18
11
|
exports.waitForCustomElement = waitForCustomElement;
|
|
19
12
|
exports.waitForEvent = waitForEvent;
|
|
20
13
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
21
|
-
require("core-js/modules/es.array.concat.js");
|
|
22
|
-
require("core-js/modules/es.array.for-each.js");
|
|
23
|
-
require("core-js/modules/es.object.entries.js");
|
|
24
|
-
require("core-js/modules/es.object.to-string.js");
|
|
25
|
-
require("core-js/modules/es.promise.js");
|
|
26
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
27
|
-
require("core-js/modules/web.timers.js");
|
|
28
14
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
29
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
30
16
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-components.js","names":["waitForCustomElement","_x","_waitForCustomElement","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","tagName","timeout","_args","wrap","_context","prev","next","length","undefined","customElements","get","abrupt","Promise","resolve","reject","timer","setTimeout","Error","concat","whenDefined","then","clearTimeout","stop","renderWebComponent","_x2","_renderWebComponent","_callee2","attributes","properties","container","element","_args2","_context2","document","body","createElement","Object","entries","forEach","_ref3","_ref4","_slicedToArray2","key","value","setAttribute","_ref5","_ref6","appendChild","dispatchCustomEvent","eventName","detail","options","event","CustomEvent","_objectSpread","bubbles","composed","dispatchEvent","waitForEvent","removeEventListener","handler","addEventListener","isCustomElementDefined","createCustomElement","props","_ref","_ref2"],"sources":["../src/web-components.js"],"sourcesContent":["// Note: These helpers are for light DOM web components (no Shadow DOM)\n// Standard React Testing Library queries work directly on these components\n\n/**\n * Wait for a custom element to be defined\n * Custom elements are registered asynchronously\n *\n * @param {string} tagName - Custom element tag name (e.g., 'my-component')\n * @param {number} timeout - Timeout in milliseconds\n * @returns {Promise<void>}\n *\n * @example\n * await waitForCustomElement('pie-chart');\n * const chart = document.createElement('pie-chart');\n *\n * @example\n * await waitForCustomElement('my-component', 5000);\n */\nexport async function waitForCustomElement(tagName, timeout = 3000) {\n if (customElements.get(tagName)) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(\n new Error(\n `Custom element '${tagName}' not defined within ${timeout}ms. ` +\n 'Make sure the element is registered with customElements.define().'\n )\n );\n }, timeout);\n\n customElements.whenDefined(tagName).then(() => {\n clearTimeout(timer);\n resolve();\n });\n });\n}\n\n/**\n * Render a web component and wait for it to be ready\n * Handles the full lifecycle: wait for definition, create, append, wait for render\n *\n * @param {string} tagName - Custom element tag name\n * @param {Object} attributes - Attributes to set on the element\n * @param {Object} properties - Properties to set on the element\n * @param {HTMLElement} container - Container to append to (defaults to document.body)\n * @returns {Promise<HTMLElement>} The custom element\n *\n * @example\n * const chart = await renderWebComponent('pie-chart', {\n * type: 'bar',\n * 'data-testid': 'my-chart'\n * });\n *\n * @example\n * const button = await renderWebComponent('custom-button',\n * { 'aria-label': 'Submit' },\n * { onClick: jest.fn() }\n * );\n */\nexport async function renderWebComponent(\n tagName,\n attributes = {},\n properties = {},\n container = document.body\n) {\n await waitForCustomElement(tagName);\n\n const element = document.createElement(tagName);\n\n // Set attributes (strings)\n Object.entries(attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n\n // Set properties (objects, functions, etc.)\n Object.entries(properties).forEach(([key, value]) => {\n element[key] = value;\n });\n\n container.appendChild(element);\n\n // Wait for component to render (custom elements may be async)\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n return element;\n}\n\n/**\n * Dispatch a custom event on an element\n * Web components often use custom events for communication\n *\n * @param {HTMLElement} element - Element to dispatch event from\n * @param {string} eventName - Event name (e.g., 'change', 'custom-event')\n * @param {*} detail - Event detail data\n * @param {Object} options - Event options (bubbles, composed, etc.)\n *\n * @example\n * dispatchCustomEvent(chart, 'data-changed', { value: [1, 2, 3] });\n *\n * @example\n * dispatchCustomEvent(button, 'custom-click', null, { bubbles: false });\n */\nexport function dispatchCustomEvent(\n element,\n eventName,\n detail = null,\n options = {}\n) {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n composed: true, // Allow event to cross shadow DOM boundary\n ...options,\n });\n\n element.dispatchEvent(event);\n return event;\n}\n\n/**\n * Listen for a custom event and return a promise that resolves when fired\n * Useful for testing event emissions\n *\n * @param {HTMLElement} element - Element to listen to\n * @param {string} eventName - Event name to wait for\n * @param {number} timeout - Timeout in milliseconds\n * @returns {Promise<CustomEvent>} Promise that resolves with the event\n *\n * @example\n * const promise = waitForEvent(chart, 'data-loaded');\n * chart.loadData();\n * const event = await promise;\n * expect(event.detail).toEqual({ loaded: true });\n *\n * @example\n * await waitForEvent(component, 'ready', 5000);\n */\nexport function waitForEvent(element, eventName, timeout = 3000) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n element.removeEventListener(eventName, handler);\n reject(\n new Error(`Event '${eventName}' not fired within ${timeout}ms`)\n );\n }, timeout);\n\n const handler = (event) => {\n clearTimeout(timer);\n element.removeEventListener(eventName, handler);\n resolve(event);\n };\n\n element.addEventListener(eventName, handler);\n });\n}\n\n/**\n * Check if a custom element is defined\n * Useful for verifying element registration\n *\n * @param {string} tagName - Custom element tag name\n * @returns {boolean} True if element is defined\n *\n * @example\n * if (isCustomElementDefined('pie-chart')) {\n * // Element is ready to use\n * }\n */\nexport function isCustomElementDefined(tagName) {\n return typeof customElements !== 'undefined' && customElements.get(tagName) !== undefined;\n}\n\n/**\n * Helper to create and configure a custom element\n * For light DOM web components that render React\n *\n * @param {string} tagName - Custom element tag name\n * @param {Object} props - Props to pass to the element\n * @returns {HTMLElement} The custom element\n *\n * @example\n * const chart = createCustomElement('pie-chart', {\n * data: [1, 2, 3],\n * type: 'bar'\n * });\n * document.body.appendChild(chart);\n */\nexport function createCustomElement(tagName, props = {}) {\n const element = document.createElement(tagName);\n\n // Set properties directly on the element\n Object.entries(props).forEach(([key, value]) => {\n element[key] = value;\n });\n\n return element;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA,SAesBA,oBAAoBA,CAAAC,EAAA;EAAA,OAAAC,qBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAsB1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA,SAAAF,sBAAA;EAAAA,qBAAA,OAAAG,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAtBO,SAAAC,QAAoCC,OAAO;IAAA,IAAAC,OAAA;MAAAC,KAAA,GAAAP,SAAA;IAAA,OAAAE,YAAA,YAAAM,IAAA,WAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAEL,OAAO,GAAAC,KAAA,CAAAK,MAAA,QAAAL,KAAA,QAAAM,SAAA,GAAAN,KAAA,MAAG,IAAI;UAAA,KAC5DO,cAAc,CAACC,GAAG,CAACV,OAAO,CAAC;YAAAI,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,OAAAF,QAAA,CAAAO,MAAA;QAAA;UAAA,OAAAP,QAAA,CAAAO,MAAA,WAIxB,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;YACtC,IAAMC,KAAK,GAAGC,UAAU,CAAC,YAAM;cAC7BF,MAAM,CACJ,IAAIG,KAAK,CACP,mBAAAC,MAAA,CAAmBlB,OAAO,2BAAAkB,MAAA,CAAwBjB,OAAO,YACzD,mEACF,CACF,CAAC;YACH,CAAC,EAAEA,OAAO,CAAC;YAEXQ,cAAc,CAACU,WAAW,CAACnB,OAAO,CAAC,CAACoB,IAAI,CAAC,YAAM;cAC7CC,YAAY,CAACN,KAAK,CAAC;cACnBF,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;UACJ,CAAC,CAAC;QAAA;QAAA;UAAA,OAAAT,QAAA,CAAAkB,IAAA;MAAA;IAAA,GAAAvB,OAAA;EAAA,CACH;EAAA,OAAAN,qBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAAA,SAwBqB4B,kBAAkBA,CAAAC,GAAA;EAAA,OAAAC,mBAAA,CAAA/B,KAAA,OAAAC,SAAA;AAAA;AA4BxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAdA,SAAA8B,oBAAA;EAAAA,mBAAA,OAAA7B,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CA5BO,SAAA4B,SACL1B,OAAO;IAAA,IAAA2B,UAAA;MAAAC,UAAA;MAAAC,SAAA;MAAAC,OAAA;MAAAC,MAAA,GAAApC,SAAA;IAAA,OAAAE,YAAA,YAAAM,IAAA,WAAA6B,SAAA;MAAA,kBAAAA,SAAA,CAAA3B,IAAA,GAAA2B,SAAA,CAAA1B,IAAA;QAAA;UACPqB,UAAU,GAAAI,MAAA,CAAAxB,MAAA,QAAAwB,MAAA,QAAAvB,SAAA,GAAAuB,MAAA,MAAG,CAAC,CAAC;UACfH,UAAU,GAAAG,MAAA,CAAAxB,MAAA,QAAAwB,MAAA,QAAAvB,SAAA,GAAAuB,MAAA,MAAG,CAAC,CAAC;UACfF,SAAS,GAAAE,MAAA,CAAAxB,MAAA,QAAAwB,MAAA,QAAAvB,SAAA,GAAAuB,MAAA,MAAGE,QAAQ,CAACC,IAAI;UAAAF,SAAA,CAAA1B,IAAA;UAAA,OAEnBf,oBAAoB,CAACS,OAAO,CAAC;QAAA;UAE7B8B,OAAO,GAAGG,QAAQ,CAACE,aAAa,CAACnC,OAAO,CAAC,EAE/C;UACAoC,MAAM,CAACC,OAAO,CAACV,UAAU,CAAC,CAACW,OAAO,CAAC,UAAAC,KAAA,EAAkB;YAAA,IAAAC,KAAA,OAAAC,eAAA,aAAAF,KAAA;cAAhBG,GAAG,GAAAF,KAAA;cAAEG,KAAK,GAAAH,KAAA;YAC7CV,OAAO,CAACc,YAAY,CAACF,GAAG,EAAEC,KAAK,CAAC;UAClC,CAAC,CAAC;;UAEF;UACAP,MAAM,CAACC,OAAO,CAACT,UAAU,CAAC,CAACU,OAAO,CAAC,UAAAO,KAAA,EAAkB;YAAA,IAAAC,KAAA,OAAAL,eAAA,aAAAI,KAAA;cAAhBH,GAAG,GAAAI,KAAA;cAAEH,KAAK,GAAAG,KAAA;YAC7ChB,OAAO,CAACY,GAAG,CAAC,GAAGC,KAAK;UACtB,CAAC,CAAC;UAEFd,SAAS,CAACkB,WAAW,CAACjB,OAAO,CAAC;;UAE9B;UAAAE,SAAA,CAAA1B,IAAA;UAAA,OACM,IAAIM,OAAO,CAAC,UAACC,OAAO;YAAA,OAAKG,UAAU,CAACH,OAAO,EAAE,CAAC,CAAC;UAAA,EAAC;QAAA;UAAA,OAAAmB,SAAA,CAAArB,MAAA,WAE/CmB,OAAO;QAAA;QAAA;UAAA,OAAAE,SAAA,CAAAV,IAAA;MAAA;IAAA,GAAAI,QAAA;EAAA,CACf;EAAA,OAAAD,mBAAA,CAAA/B,KAAA,OAAAC,SAAA;AAAA;AAiBM,SAASqD,mBAAmBA,CACjClB,OAAO,EACPmB,SAAS,EAGT;EAAA,IAFAC,MAAM,GAAAvD,SAAA,CAAAY,MAAA,QAAAZ,SAAA,QAAAa,SAAA,GAAAb,SAAA,MAAG,IAAI;EAAA,IACbwD,OAAO,GAAAxD,SAAA,CAAAY,MAAA,QAAAZ,SAAA,QAAAa,SAAA,GAAAb,SAAA,MAAG,CAAC,CAAC;EAEZ,IAAMyD,KAAK,GAAG,IAAIC,WAAW,CAACJ,SAAS,EAAAK,aAAA;IACrCJ,MAAM,EAANA,MAAM;IACNK,OAAO,EAAE,IAAI;IACbC,QAAQ,EAAE;EAAI,GACXL,OAAO,CACX,CAAC;EAEFrB,OAAO,CAAC2B,aAAa,CAACL,KAAK,CAAC;EAC5B,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASM,YAAYA,CAAC5B,OAAO,EAAEmB,SAAS,EAAkB;EAAA,IAAhBhD,OAAO,GAAAN,SAAA,CAAAY,MAAA,QAAAZ,SAAA,QAAAa,SAAA,GAAAb,SAAA,MAAG,IAAI;EAC7D,OAAO,IAAIiB,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;IACtC,IAAMC,KAAK,GAAGC,UAAU,CAAC,YAAM;MAC7Bc,OAAO,CAAC6B,mBAAmB,CAACV,SAAS,EAAEW,QAAO,CAAC;MAC/C9C,MAAM,CACJ,IAAIG,KAAK,WAAAC,MAAA,CAAW+B,SAAS,yBAAA/B,MAAA,CAAsBjB,OAAO,OAAI,CAChE,CAAC;IACH,CAAC,EAAEA,OAAO,CAAC;IAEX,IAAM2D,QAAO,GAAG,SAAVA,OAAOA,CAAIR,KAAK,EAAK;MACzB/B,YAAY,CAACN,KAAK,CAAC;MACnBe,OAAO,CAAC6B,mBAAmB,CAACV,SAAS,EAAEW,QAAO,CAAC;MAC/C/C,OAAO,CAACuC,KAAK,CAAC;IAChB,CAAC;IAEDtB,OAAO,CAAC+B,gBAAgB,CAACZ,SAAS,EAAEW,QAAO,CAAC;EAC9C,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,sBAAsBA,CAAC9D,OAAO,EAAE;EAC9C,OAAO,OAAOS,cAAc,KAAK,WAAW,IAAIA,cAAc,CAACC,GAAG,CAACV,OAAO,CAAC,KAAKQ,SAAS;AAC3F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASuD,mBAAmBA,CAAC/D,OAAO,EAAc;EAAA,IAAZgE,KAAK,GAAArE,SAAA,CAAAY,MAAA,QAAAZ,SAAA,QAAAa,SAAA,GAAAb,SAAA,MAAG,CAAC,CAAC;EACrD,IAAMmC,OAAO,GAAGG,QAAQ,CAACE,aAAa,CAACnC,OAAO,CAAC;;EAE/C;EACAoC,MAAM,CAACC,OAAO,CAAC2B,KAAK,CAAC,CAAC1B,OAAO,CAAC,UAAA2B,IAAA,EAAkB;IAAA,IAAAC,KAAA,OAAAzB,eAAA,aAAAwB,IAAA;MAAhBvB,GAAG,GAAAwB,KAAA;MAAEvB,KAAK,GAAAuB,KAAA;IACxCpC,OAAO,CAACY,GAAG,CAAC,GAAGC,KAAK;EACtB,CAAC,CAAC;EAEF,OAAOb,OAAO;AAChB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"web-components.js","names":["waitForCustomElement","_x","_waitForCustomElement","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","tagName","timeout","_args","wrap","_context","prev","next","length","undefined","customElements","get","abrupt","Promise","resolve","reject","timer","setTimeout","Error","concat","whenDefined","then","clearTimeout","stop","renderWebComponent","_x2","_renderWebComponent","_callee2","attributes","properties","container","element","_args2","_context2","document","body","createElement","Object","entries","forEach","_ref3","_ref4","_slicedToArray2","key","value","setAttribute","_ref5","_ref6","appendChild","dispatchCustomEvent","eventName","detail","options","event","CustomEvent","_objectSpread","bubbles","composed","dispatchEvent","waitForEvent","removeEventListener","handler","addEventListener","isCustomElementDefined","createCustomElement","props","_ref","_ref2"],"sources":["../src/web-components.js"],"sourcesContent":["// Note: These helpers are for light DOM web components (no Shadow DOM)\n// Standard React Testing Library queries work directly on these components\n\n/**\n * Wait for a custom element to be defined\n * Custom elements are registered asynchronously\n *\n * @param {string} tagName - Custom element tag name (e.g., 'my-component')\n * @param {number} timeout - Timeout in milliseconds\n * @returns {Promise<void>}\n *\n * @example\n * await waitForCustomElement('pie-chart');\n * const chart = document.createElement('pie-chart');\n *\n * @example\n * await waitForCustomElement('my-component', 5000);\n */\nexport async function waitForCustomElement(tagName, timeout = 3000) {\n if (customElements.get(tagName)) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n reject(\n new Error(\n `Custom element '${tagName}' not defined within ${timeout}ms. ` +\n 'Make sure the element is registered with customElements.define().'\n )\n );\n }, timeout);\n\n customElements.whenDefined(tagName).then(() => {\n clearTimeout(timer);\n resolve();\n });\n });\n}\n\n/**\n * Render a web component and wait for it to be ready\n * Handles the full lifecycle: wait for definition, create, append, wait for render\n *\n * @param {string} tagName - Custom element tag name\n * @param {Object} attributes - Attributes to set on the element\n * @param {Object} properties - Properties to set on the element\n * @param {HTMLElement} container - Container to append to (defaults to document.body)\n * @returns {Promise<HTMLElement>} The custom element\n *\n * @example\n * const chart = await renderWebComponent('pie-chart', {\n * type: 'bar',\n * 'data-testid': 'my-chart'\n * });\n *\n * @example\n * const button = await renderWebComponent('custom-button',\n * { 'aria-label': 'Submit' },\n * { onClick: jest.fn() }\n * );\n */\nexport async function renderWebComponent(\n tagName,\n attributes = {},\n properties = {},\n container = document.body\n) {\n await waitForCustomElement(tagName);\n\n const element = document.createElement(tagName);\n\n // Set attributes (strings)\n Object.entries(attributes).forEach(([key, value]) => {\n element.setAttribute(key, value);\n });\n\n // Set properties (objects, functions, etc.)\n Object.entries(properties).forEach(([key, value]) => {\n element[key] = value;\n });\n\n container.appendChild(element);\n\n // Wait for component to render (custom elements may be async)\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n return element;\n}\n\n/**\n * Dispatch a custom event on an element\n * Web components often use custom events for communication\n *\n * @param {HTMLElement} element - Element to dispatch event from\n * @param {string} eventName - Event name (e.g., 'change', 'custom-event')\n * @param {*} detail - Event detail data\n * @param {Object} options - Event options (bubbles, composed, etc.)\n *\n * @example\n * dispatchCustomEvent(chart, 'data-changed', { value: [1, 2, 3] });\n *\n * @example\n * dispatchCustomEvent(button, 'custom-click', null, { bubbles: false });\n */\nexport function dispatchCustomEvent(\n element,\n eventName,\n detail = null,\n options = {}\n) {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n composed: true, // Allow event to cross shadow DOM boundary\n ...options,\n });\n\n element.dispatchEvent(event);\n return event;\n}\n\n/**\n * Listen for a custom event and return a promise that resolves when fired\n * Useful for testing event emissions\n *\n * @param {HTMLElement} element - Element to listen to\n * @param {string} eventName - Event name to wait for\n * @param {number} timeout - Timeout in milliseconds\n * @returns {Promise<CustomEvent>} Promise that resolves with the event\n *\n * @example\n * const promise = waitForEvent(chart, 'data-loaded');\n * chart.loadData();\n * const event = await promise;\n * expect(event.detail).toEqual({ loaded: true });\n *\n * @example\n * await waitForEvent(component, 'ready', 5000);\n */\nexport function waitForEvent(element, eventName, timeout = 3000) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n element.removeEventListener(eventName, handler);\n reject(\n new Error(`Event '${eventName}' not fired within ${timeout}ms`)\n );\n }, timeout);\n\n const handler = (event) => {\n clearTimeout(timer);\n element.removeEventListener(eventName, handler);\n resolve(event);\n };\n\n element.addEventListener(eventName, handler);\n });\n}\n\n/**\n * Check if a custom element is defined\n * Useful for verifying element registration\n *\n * @param {string} tagName - Custom element tag name\n * @returns {boolean} True if element is defined\n *\n * @example\n * if (isCustomElementDefined('pie-chart')) {\n * // Element is ready to use\n * }\n */\nexport function isCustomElementDefined(tagName) {\n return typeof customElements !== 'undefined' && customElements.get(tagName) !== undefined;\n}\n\n/**\n * Helper to create and configure a custom element\n * For light DOM web components that render React\n *\n * @param {string} tagName - Custom element tag name\n * @param {Object} props - Props to pass to the element\n * @returns {HTMLElement} The custom element\n *\n * @example\n * const chart = createCustomElement('pie-chart', {\n * data: [1, 2, 3],\n * type: 'bar'\n * });\n * document.body.appendChild(chart);\n */\nexport function createCustomElement(tagName, props = {}) {\n const element = document.createElement(tagName);\n\n // Set properties directly on the element\n Object.entries(props).forEach(([key, value]) => {\n element[key] = value;\n });\n\n return element;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-lib/test-utils",
|
|
3
|
-
"version": "1.1.1-next.
|
|
3
|
+
"version": "1.1.1-next.1",
|
|
4
4
|
"description": "Testing utilities for pie-lib packages with React Testing Library and MUI support",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
@@ -21,6 +21,6 @@
|
|
|
21
21
|
"@testing-library/jest-dom": "^5.16.5",
|
|
22
22
|
"@testing-library/user-event": "^14.5.2"
|
|
23
23
|
},
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "87d7d9ee63abeb5eff95f888cc2b80683c81ea13",
|
|
25
25
|
"scripts": {}
|
|
26
26
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { createTestTheme, renderWithProviders, renderWithTheme, screen } from '../index';
|
|
3
3
|
import { Button } from '@mui/material';
|
|
4
4
|
|
|
5
5
|
describe('@pie-lib/test-utils', () => {
|
|
@@ -42,9 +42,7 @@ describe('@pie-lib/test-utils', () => {
|
|
|
42
42
|
});
|
|
43
43
|
|
|
44
44
|
it('renders with additional providers', () => {
|
|
45
|
-
const TestProvider = ({ children }) =>
|
|
46
|
-
<div data-testid="test-provider">{children}</div>
|
|
47
|
-
);
|
|
45
|
+
const TestProvider = ({ children }) => <div data-testid="test-provider">{children}</div>;
|
|
48
46
|
|
|
49
47
|
renderWithProviders(<Button>Multi Provider</Button>, {
|
|
50
48
|
providers: [TestProvider],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { render, screen } from '@testing-library/react';
|
|
3
|
-
import {
|
|
3
|
+
import { clearAndType, Keys, navigateWithKeys, pressKey, typeAndSubmit } from '../keyboard';
|
|
4
4
|
|
|
5
5
|
describe('Keyboard helpers', () => {
|
|
6
6
|
describe('Keys constant', () => {
|
package/src/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { render } from '@testing-library/react';
|
|
4
|
-
import {
|
|
4
|
+
import { createTheme, ThemeProvider } from '@mui/material/styles';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Default MUI theme for testing
|