helpers.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.TEXT_NODE = void 0;
  6. exports.checkContainerType = checkContainerType;
  7. exports.getDocument = getDocument;
  8. exports.getWindowFromNode = getWindowFromNode;
  9. exports.jestFakeTimersAreEnabled = jestFakeTimersAreEnabled;
  10. // Constant node.nodeType for text nodes, see:
  11. // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType#Node_type_constants
  12. const TEXT_NODE = 3;
  13. exports.TEXT_NODE = TEXT_NODE;
  14. function jestFakeTimersAreEnabled() {
  15. /* istanbul ignore else */
  16. // eslint-disable-next-line
  17. if (typeof jest !== 'undefined' && jest !== null) {
  18. return (
  19. // legacy timers
  20. setTimeout._isMockFunction === true ||
  21. // modern timers
  22. Object.prototype.hasOwnProperty.call(setTimeout, 'clock')
  23. );
  24. }
  25. // istanbul ignore next
  26. return false;
  27. }
  28. function getDocument() {
  29. /* istanbul ignore if */
  30. if (typeof window === 'undefined') {
  31. throw new Error('Could not find default container');
  32. }
  33. return window.document;
  34. }
  35. function getWindowFromNode(node) {
  36. if (node.defaultView) {
  37. // node is document
  38. return node.defaultView;
  39. } else if (node.ownerDocument && node.ownerDocument.defaultView) {
  40. // node is a DOM node
  41. return node.ownerDocument.defaultView;
  42. } else if (node.window) {
  43. // node is window
  44. return node.window;
  45. } else if (node.ownerDocument && node.ownerDocument.defaultView === null) {
  46. throw new Error(`It looks like the window object is not available for the provided node.`);
  47. } else if (node.then instanceof Function) {
  48. throw new Error(`It looks like you passed a Promise object instead of a DOM node. Did you do something like \`fireEvent.click(screen.findBy...\` when you meant to use a \`getBy\` query \`fireEvent.click(screen.getBy...\`, or await the findBy query \`fireEvent.click(await screen.findBy...\`?`);
  49. } else if (Array.isArray(node)) {
  50. throw new Error(`It looks like you passed an Array instead of a DOM node. Did you do something like \`fireEvent.click(screen.getAllBy...\` when you meant to use a \`getBy\` query \`fireEvent.click(screen.getBy...\`?`);
  51. } else if (typeof node.debug === 'function' && typeof node.logTestingPlaygroundURL === 'function') {
  52. throw new Error(`It looks like you passed a \`screen\` object. Did you do something like \`fireEvent.click(screen, ...\` when you meant to use a query, e.g. \`fireEvent.click(screen.getBy..., \`?`);
  53. } else {
  54. // The user passed something unusual to a calling function
  55. throw new Error(`The given node is not an Element, the node type is: ${typeof node}.`);
  56. }
  57. }
  58. function checkContainerType(container) {
  59. if (!container || !(typeof container.querySelector === 'function') || !(typeof container.querySelectorAll === 'function')) {
  60. throw new TypeError(`Expected container to be an Element, a Document or a DocumentFragment but got ${getTypeName(container)}.`);
  61. }
  62. function getTypeName(object) {
  63. if (typeof object === 'object') {
  64. return object === null ? 'null' : object.constructor.name;
  65. }
  66. return typeof object;
  67. }
  68. }