to-have-errormessage.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.toHaveErrorMessage = toHaveErrorMessage;
  6. var _utils = require("./utils");
  7. // See aria-errormessage spec https://www.w3.org/TR/wai-aria-1.2/#aria-errormessage
  8. function toHaveErrorMessage(htmlElement, checkWith) {
  9. (0, _utils.deprecate)('toHaveErrorMessage', 'Please use toHaveAccessibleErrorMessage.');
  10. (0, _utils.checkHtmlElement)(htmlElement, toHaveErrorMessage, this);
  11. if (!htmlElement.hasAttribute('aria-invalid') || htmlElement.getAttribute('aria-invalid') === 'false') {
  12. const not = this.isNot ? '.not' : '';
  13. return {
  14. pass: false,
  15. message: () => {
  16. return (0, _utils.getMessage)(this, this.utils.matcherHint(`${not}.toHaveErrorMessage`, 'element', ''), `Expected the element to have invalid state indicated by`, 'aria-invalid="true"', 'Received', htmlElement.hasAttribute('aria-invalid') ? `aria-invalid="${htmlElement.getAttribute('aria-invalid')}"` : this.utils.printReceived(''));
  17. }
  18. };
  19. }
  20. const expectsErrorMessage = checkWith !== undefined;
  21. const errormessageIDRaw = htmlElement.getAttribute('aria-errormessage') || '';
  22. const errormessageIDs = errormessageIDRaw.split(/\s+/).filter(Boolean);
  23. let errormessage = '';
  24. if (errormessageIDs.length > 0) {
  25. const document = htmlElement.ownerDocument;
  26. const errormessageEls = errormessageIDs.map(errormessageID => document.getElementById(errormessageID)).filter(Boolean);
  27. errormessage = (0, _utils.normalize)(errormessageEls.map(el => el.textContent).join(' '));
  28. }
  29. return {
  30. pass: expectsErrorMessage ? checkWith instanceof RegExp ? checkWith.test(errormessage) : this.equals(errormessage, checkWith) : Boolean(errormessage),
  31. message: () => {
  32. const to = this.isNot ? 'not to' : 'to';
  33. return (0, _utils.getMessage)(this, this.utils.matcherHint(`${this.isNot ? '.not' : ''}.toHaveErrorMessage`, 'element', ''), `Expected the element ${to} have error message`, this.utils.printExpected(checkWith), 'Received', this.utils.printReceived(errormessage));
  34. }
  35. };
  36. }