@najemi-software/vitest-dom 0.24.0 → 0.25.0

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.
Files changed (78) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/esm/matchers/to-be-checked.d.ts +23 -0
  3. package/esm/matchers/to-be-checked.js +23 -0
  4. package/esm/matchers/to-be-checked.js.map +1 -1
  5. package/esm/matchers/to-be-disabled.d.ts +38 -0
  6. package/esm/matchers/to-be-disabled.js +38 -0
  7. package/esm/matchers/to-be-disabled.js.map +1 -1
  8. package/esm/matchers/to-be-empty-dom-element.d.ts +13 -0
  9. package/esm/matchers/to-be-empty-dom-element.js +13 -0
  10. package/esm/matchers/to-be-empty-dom-element.js.map +1 -1
  11. package/esm/matchers/to-be-empty.d.ts +15 -1
  12. package/esm/matchers/to-be-empty.js +15 -1
  13. package/esm/matchers/to-be-empty.js.map +1 -1
  14. package/esm/matchers/to-be-in-the-document.d.ts +11 -0
  15. package/esm/matchers/to-be-in-the-document.js +11 -0
  16. package/esm/matchers/to-be-in-the-document.js.map +1 -1
  17. package/esm/matchers/to-be-in-the-dom.d.ts +12 -1
  18. package/esm/matchers/to-be-in-the-dom.js +12 -1
  19. package/esm/matchers/to-be-in-the-dom.js.map +1 -1
  20. package/esm/matchers/to-be-invalid.d.ts +36 -0
  21. package/esm/matchers/to-be-invalid.js +36 -0
  22. package/esm/matchers/to-be-invalid.js.map +1 -1
  23. package/esm/matchers/to-be-partially-checked.d.ts +37 -0
  24. package/esm/matchers/to-be-partially-checked.js +37 -0
  25. package/esm/matchers/to-be-partially-checked.js.map +1 -1
  26. package/esm/matchers/to-be-required.d.ts +17 -0
  27. package/esm/matchers/to-be-required.js +17 -0
  28. package/esm/matchers/to-be-required.js.map +1 -1
  29. package/esm/matchers/to-be-visible.d.ts +26 -0
  30. package/esm/matchers/to-be-visible.js +26 -0
  31. package/esm/matchers/to-be-visible.js.map +1 -1
  32. package/esm/matchers/to-contain-element.d.ts +17 -0
  33. package/esm/matchers/to-contain-element.js +17 -0
  34. package/esm/matchers/to-contain-element.js.map +1 -1
  35. package/esm/matchers/to-contain-html.d.ts +10 -0
  36. package/esm/matchers/to-contain-html.js +10 -0
  37. package/esm/matchers/to-contain-html.js.map +1 -1
  38. package/esm/matchers/to-have-accessible-description.d.ts +25 -0
  39. package/esm/matchers/to-have-accessible-description.js +25 -0
  40. package/esm/matchers/to-have-accessible-description.js.map +1 -1
  41. package/esm/matchers/to-have-accessible-errormessage.d.ts +38 -0
  42. package/esm/matchers/to-have-accessible-errormessage.js +38 -0
  43. package/esm/matchers/to-have-accessible-errormessage.js.map +1 -1
  44. package/esm/matchers/to-have-accessible-name.d.ts +30 -0
  45. package/esm/matchers/to-have-accessible-name.js +30 -0
  46. package/esm/matchers/to-have-accessible-name.js.map +1 -1
  47. package/esm/matchers/to-have-attribute.d.ts +22 -0
  48. package/esm/matchers/to-have-attribute.js +22 -0
  49. package/esm/matchers/to-have-attribute.js.map +1 -1
  50. package/esm/matchers/to-have-class.d.ts +25 -0
  51. package/esm/matchers/to-have-class.js +25 -0
  52. package/esm/matchers/to-have-class.js.map +1 -1
  53. package/esm/matchers/to-have-description.d.ts +48 -1
  54. package/esm/matchers/to-have-description.js +48 -1
  55. package/esm/matchers/to-have-description.js.map +1 -1
  56. package/esm/matchers/to-have-display-value.d.ts +41 -0
  57. package/esm/matchers/to-have-display-value.js +41 -0
  58. package/esm/matchers/to-have-display-value.js.map +1 -1
  59. package/esm/matchers/to-have-errormessage.d.ts +40 -0
  60. package/esm/matchers/to-have-errormessage.js +40 -0
  61. package/esm/matchers/to-have-errormessage.js.map +1 -1
  62. package/esm/matchers/to-have-focus.d.ts +16 -0
  63. package/esm/matchers/to-have-focus.js +16 -0
  64. package/esm/matchers/to-have-focus.js.map +1 -1
  65. package/esm/matchers/to-have-form-values.d.ts +20 -0
  66. package/esm/matchers/to-have-form-values.js +20 -0
  67. package/esm/matchers/to-have-form-values.js.map +1 -1
  68. package/esm/matchers/to-have-style.d.ts +22 -0
  69. package/esm/matchers/to-have-style.js +22 -0
  70. package/esm/matchers/to-have-style.js.map +1 -1
  71. package/esm/matchers/to-have-text-content.d.ts +23 -0
  72. package/esm/matchers/to-have-text-content.js +23 -0
  73. package/esm/matchers/to-have-text-content.js.map +1 -1
  74. package/esm/matchers/to-have-value.d.ts +19 -0
  75. package/esm/matchers/to-have-value.js +19 -0
  76. package/esm/matchers/to-have-value.js.map +1 -1
  77. package/esm/matchers.d.ts +0 -624
  78. package/package.json +1 -1
@@ -1,6 +1,53 @@
1
1
  import { checkHtmlElement, getMessage, normalize, deprecate } from "./utils.js";
2
2
  // See algoritm: https://www.w3.org/TR/accname-1.1/#mapping_additional_nd_description
3
- /** @deprecated */
3
+ /**
4
+ * @deprecated
5
+ * since v5.14.1
6
+ * @description
7
+ * Check the accessible description for an element.
8
+ * This allows you to check whether the given element has a description or not.
9
+ *
10
+ * An element gets its description via the
11
+ * [`aria-describedby` attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-describedby_attribute).
12
+ * Set this to the `id` of one or more other elements. These elements may be nested
13
+ * inside, be outside, or a sibling of the passed in element.
14
+ *
15
+ * Whitespace is normalized. Using multiple ids will
16
+ * [join the referenced elements’ text content separated by a space](https://www.w3.org/TR/accname-1.1/#mapping_additional_nd_description).
17
+ *
18
+ * When a `string` argument is passed through, it will perform a whole
19
+ * case-sensitive match to the description text.
20
+ *
21
+ * To perform a case-insensitive match, you can use a `RegExp` with the `/i`
22
+ * modifier.
23
+ *
24
+ * To perform a partial match, you can pass a `RegExp` or use
25
+ * `expect.stringContaining("partial string")`.
26
+ *
27
+ * @example
28
+ * <button aria-label="Close" aria-describedby="description-close">
29
+ * X
30
+ * </button>
31
+ * <div id="description-close">
32
+ * Closing will discard any changes
33
+ * </div>
34
+ *
35
+ * <button>Delete</button>
36
+ *
37
+ * const closeButton = getByRole('button', {name: 'Close'})
38
+ *
39
+ * expect(closeButton).toHaveDescription('Closing will discard any changes')
40
+ * expect(closeButton).toHaveDescription(/will discard/) // to partially match
41
+ * expect(closeButton).toHaveDescription(expect.stringContaining('will discard')) // to partially match
42
+ * expect(closeButton).toHaveDescription(/^closing/i) // to use case-insensitive match
43
+ * expect(closeButton).not.toHaveDescription('Other description')
44
+ *
45
+ * const deleteButton = getByRole('button', {name: 'Delete'})
46
+ * expect(deleteButton).not.toHaveDescription()
47
+ * expect(deleteButton).toHaveDescription('') // Missing or empty description always becomes a blank string
48
+ * @see
49
+ * [testing-library/jest-dom#tohavedescription](https://github.com/testing-library/jest-dom#tohavedescription)
50
+ */
4
51
  export function toHaveDescription(htmlElement, checkWith) {
5
52
  deprecate("toHaveDescription", "Please use toHaveAccessibleDescription.");
6
53
  checkHtmlElement(htmlElement, toHaveDescription, this);
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-description.js","sourceRoot":"","sources":["../../src/matchers/to-have-description.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhF,qFAAqF;AACrF,kBAAkB;AAClB,MAAM,UAAU,iBAAiB,CAE7B,WAAoB,EACpB,SAA4D;IAE5D,SAAS,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;IAE1E,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEvD,MAAM,kBAAkB,GAAG,SAAS,KAAK,SAAS,CAAC;IAEnD,MAAM,gBAAgB,GAAG,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC;QAC3C,MAAM,cAAc,GAAG,cAAc;aAChC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,EAAE,EAAqB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QACpD,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACH,IAAI,EAAE,kBAAkB;YACpB,CAAC,CAAC,SAAS,YAAY,MAAM;gBACzB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,UAAU,CACb,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,SAAS,EAAE,EAAE,CAAC,EACtF,wBAAwB,EAAE,mBAAmB,EAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,EACnC,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CACxC,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"to-have-description.js","sourceRoot":"","sources":["../../src/matchers/to-have-description.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhF,qFAAqF;AACrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,UAAU,iBAAiB,CAE7B,WAAoB,EACpB,SAA4D;IAE5D,SAAS,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;IAE1E,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEvD,MAAM,kBAAkB,GAAG,SAAS,KAAK,SAAS,CAAC;IAEnD,MAAM,gBAAgB,GAAG,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC;QAC3C,MAAM,cAAc,GAAG,cAAc;aAChC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;aAC9D,MAAM,CAAC,CAAC,EAAE,EAAqB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QACpD,WAAW,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACH,IAAI,EAAE,kBAAkB;YACpB,CAAC,CAAC,SAAS,YAAY,MAAM;gBACzB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,UAAU,CACb,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,SAAS,EAAE,EAAE,CAAC,EACtF,wBAAwB,EAAE,mBAAmB,EAC7C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,EACnC,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,CACxC,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,2 +1,43 @@
1
1
  import type { MatcherResult, MatcherState } from "./types.js";
2
+ /**
3
+ * @description
4
+ * This allows you to check whether the given form element has the specified displayed value (the one the
5
+ * end user will see). It accepts <input>, <select> and <textarea> elements with the exception of <input type="checkbox">
6
+ * and <input type="radio">, which can be meaningfully matched only using toBeChecked or toHaveFormValues.
7
+ * @example
8
+ * <label for="input-example">First name</label>
9
+ * <input type="text" id="input-example" value="Luca" />
10
+ *
11
+ * <label for="textarea-example">Description</label>
12
+ * <textarea id="textarea-example">An example description here.</textarea>
13
+ *
14
+ * <label for="single-select-example">Fruit</label>
15
+ * <select id="single-select-example">
16
+ * <option value="">Select a fruit...</option>
17
+ * <option value="banana">Banana</option>
18
+ * <option value="ananas">Ananas</option>
19
+ * <option value="avocado">Avocado</option>
20
+ * </select>
21
+ *
22
+ * <label for="mutiple-select-example">Fruits</label>
23
+ * <select id="multiple-select-example" multiple>
24
+ * <option value="">Select a fruit...</option>
25
+ * <option value="banana" selected>Banana</option>
26
+ * <option value="ananas">Ananas</option>
27
+ * <option value="avocado" selected>Avocado</option>
28
+ * </select>
29
+ *
30
+ * const input = screen.getByLabelText('First name')
31
+ * const textarea = screen.getByLabelText('Description')
32
+ * const selectSingle = screen.getByLabelText('Fruit')
33
+ * const selectMultiple = screen.getByLabelText('Fruits')
34
+ *
35
+ * expect(input).toHaveDisplayValue('Luca')
36
+ * expect(textarea).toHaveDisplayValue('An example description here.')
37
+ * expect(selectSingle).toHaveDisplayValue('Select a fruit...')
38
+ * expect(selectMultiple).toHaveDisplayValue(['Banana', 'Avocado'])
39
+ *
40
+ * @see
41
+ * [testing-library/jest-dom#tohavedisplayvalue](https://github.com/testing-library/jest-dom#tohavedisplayvalue)
42
+ */
2
43
  export declare function toHaveDisplayValue(this: MatcherState, htmlElement: Element, expectedValue: string | RegExp | Array<string | RegExp>): MatcherResult;
@@ -1,4 +1,45 @@
1
1
  import { checkHtmlElement, getMessage } from "./utils.js";
2
+ /**
3
+ * @description
4
+ * This allows you to check whether the given form element has the specified displayed value (the one the
5
+ * end user will see). It accepts <input>, <select> and <textarea> elements with the exception of <input type="checkbox">
6
+ * and <input type="radio">, which can be meaningfully matched only using toBeChecked or toHaveFormValues.
7
+ * @example
8
+ * <label for="input-example">First name</label>
9
+ * <input type="text" id="input-example" value="Luca" />
10
+ *
11
+ * <label for="textarea-example">Description</label>
12
+ * <textarea id="textarea-example">An example description here.</textarea>
13
+ *
14
+ * <label for="single-select-example">Fruit</label>
15
+ * <select id="single-select-example">
16
+ * <option value="">Select a fruit...</option>
17
+ * <option value="banana">Banana</option>
18
+ * <option value="ananas">Ananas</option>
19
+ * <option value="avocado">Avocado</option>
20
+ * </select>
21
+ *
22
+ * <label for="mutiple-select-example">Fruits</label>
23
+ * <select id="multiple-select-example" multiple>
24
+ * <option value="">Select a fruit...</option>
25
+ * <option value="banana" selected>Banana</option>
26
+ * <option value="ananas">Ananas</option>
27
+ * <option value="avocado" selected>Avocado</option>
28
+ * </select>
29
+ *
30
+ * const input = screen.getByLabelText('First name')
31
+ * const textarea = screen.getByLabelText('Description')
32
+ * const selectSingle = screen.getByLabelText('Fruit')
33
+ * const selectMultiple = screen.getByLabelText('Fruits')
34
+ *
35
+ * expect(input).toHaveDisplayValue('Luca')
36
+ * expect(textarea).toHaveDisplayValue('An example description here.')
37
+ * expect(selectSingle).toHaveDisplayValue('Select a fruit...')
38
+ * expect(selectMultiple).toHaveDisplayValue(['Banana', 'Avocado'])
39
+ *
40
+ * @see
41
+ * [testing-library/jest-dom#tohavedisplayvalue](https://github.com/testing-library/jest-dom#tohavedisplayvalue)
42
+ */
2
43
  export function toHaveDisplayValue(htmlElement, expectedValue) {
3
44
  checkHtmlElement(htmlElement, toHaveDisplayValue, this);
4
45
  const tagName = htmlElement.tagName.toLowerCase();
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-display-value.js","sourceRoot":"","sources":["../../src/matchers/to-have-display-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAE9B,WAAoB,EACpB,aAAuD;IAEvD,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACX,qHAAqH,CACxH,CAAC;IACN,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAE,WAAgC,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CACX,gEAAiE,WAAgC,CAAC,IAAI,uCAAuC,CAChJ,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,yBAAyB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,QAAQ,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC3F,CACJ,CAAC,MAAM,CAAC;IAET,MAAM,oBAAoB,GAAG,yBAAyB,KAAK,MAAM,CAAC,MAAM,CAAC;IACzE,MAAM,4BAA4B,GAAG,yBAAyB,KAAK,cAAc,CAAC,MAAM,CAAC;IAEzF,OAAO;QACH,IAAI,EAAE,oBAAoB,IAAI,4BAA4B;QAC1D,OAAO,EAAE,GAAG,EAAE,CACV,UAAU,CACN,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,CAAC,EACvF,oBAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,uBAAuB,EACnE,aAAa,EACb,UAAU,EACV,MAAM,CACT;KACR,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,WAAoB;IACpD,OAAO,OAAO,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,WAAiC,CAAC,OAAO,CAAC;aACjD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;aACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAE,WAAsD,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAuD;IAC9E,OAAO,aAAa,YAAY,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"to-have-display-value.js","sourceRoot":"","sources":["../../src/matchers/to-have-display-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,UAAU,kBAAkB,CAE9B,WAAoB,EACpB,aAAuD;IAEvD,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACX,qHAAqH,CACxH,CAAC;IACN,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAE,WAAgC,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CACX,gEAAiE,WAAgC,CAAC,IAAI,uCAAuC,CAChJ,CAAC;IACN,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACxD,MAAM,yBAAyB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,QAAQ,YAAY,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC3F,CACJ,CAAC,MAAM,CAAC;IAET,MAAM,oBAAoB,GAAG,yBAAyB,KAAK,MAAM,CAAC,MAAM,CAAC;IACzE,MAAM,4BAA4B,GAAG,yBAAyB,KAAK,cAAc,CAAC,MAAM,CAAC;IAEzF,OAAO;QACH,IAAI,EAAE,oBAAoB,IAAI,4BAA4B;QAC1D,OAAO,EAAE,GAAG,EAAE,CACV,UAAU,CACN,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,CAAC,EACvF,oBAAoB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,uBAAuB,EACnE,aAAa,EACb,UAAU,EACV,MAAM,CACT;KACR,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,WAAoB;IACpD,OAAO,OAAO,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAE,WAAiC,CAAC,OAAO,CAAC;aACjD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;aACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAE,WAAsD,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,iBAAiB,CAAC,aAAuD;IAC9E,OAAO,aAAa,YAAY,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;AAC5E,CAAC"}
@@ -1,3 +1,43 @@
1
1
  import type { expect } from "vitest";
2
2
  import type { MatcherResult, MatcherState } from "./types.js";
3
+ /**
4
+ * @description
5
+ *
6
+ * Check whether the given element has an [ARIA error message](https://www.w3.org/TR/wai-aria/#aria-errormessage) or not.
7
+ *
8
+ * Use the `aria-errormessage` attribute to reference another element that contains
9
+ * custom error message text. Multiple ids is **NOT** allowed. Authors MUST use
10
+ * `aria-invalid` in conjunction with `aria-errormessage`. Learn more from the
11
+ * [`aria-errormessage` spec](https://www.w3.org/TR/wai-aria/#aria-errormessage).
12
+ *
13
+ * Whitespace is normalized.
14
+ *
15
+ * When a `string` argument is passed through, it will perform a whole
16
+ * case-sensitive match to the error message text.
17
+ *
18
+ * To perform a case-insensitive match, you can use a `RegExp` with the `/i`
19
+ * modifier.
20
+ *
21
+ * To perform a partial match, you can pass a `RegExp` or use
22
+ * expect.stringContaining("partial string")`.
23
+ *
24
+ * @example
25
+ * <label for="startTime"> Please enter a start time for the meeting: </label>
26
+ * <input id="startTime" type="text" aria-errormessage="msgID" aria-invalid="true" value="11:30 PM" />
27
+ * <span id="msgID" aria-live="assertive" style="visibility:visible">
28
+ * Invalid time: the time must be between 9:00 AM and 5:00 PM"
29
+ * </span>
30
+ *
31
+ *
32
+ * const timeInput = getByLabel('startTime')
33
+ *
34
+ * expect(timeInput).toHaveErrorMessage(
35
+ * 'Invalid time: the time must be between 9:00 AM and 5:00 PM',
36
+ * )
37
+ * expect(timeInput).toHaveErrorMessage(/invalid time/i) // to partially match
38
+ * expect(timeInput).toHaveErrorMessage(expect.stringContaining('Invalid time')) // to partially match
39
+ * expect(timeInput).not.toHaveErrorMessage('Pikachu!')
40
+ * @see
41
+ * [testing-library/jest-dom#tohaveerrormessage](https://github.com/testing-library/jest-dom#tohaveerrormessage)
42
+ */
3
43
  export declare function toHaveErrorMessage(this: MatcherState, htmlElement: Element, checkWith?: string | RegExp | typeof expect.stringContaining): MatcherResult;
@@ -1,5 +1,45 @@
1
1
  import { checkHtmlElement, getMessage, normalize } from "./utils.js";
2
2
  // See aria-errormessage spec https://www.w3.org/TR/wai-aria-1.2/#aria-errormessage
3
+ /**
4
+ * @description
5
+ *
6
+ * Check whether the given element has an [ARIA error message](https://www.w3.org/TR/wai-aria/#aria-errormessage) or not.
7
+ *
8
+ * Use the `aria-errormessage` attribute to reference another element that contains
9
+ * custom error message text. Multiple ids is **NOT** allowed. Authors MUST use
10
+ * `aria-invalid` in conjunction with `aria-errormessage`. Learn more from the
11
+ * [`aria-errormessage` spec](https://www.w3.org/TR/wai-aria/#aria-errormessage).
12
+ *
13
+ * Whitespace is normalized.
14
+ *
15
+ * When a `string` argument is passed through, it will perform a whole
16
+ * case-sensitive match to the error message text.
17
+ *
18
+ * To perform a case-insensitive match, you can use a `RegExp` with the `/i`
19
+ * modifier.
20
+ *
21
+ * To perform a partial match, you can pass a `RegExp` or use
22
+ * expect.stringContaining("partial string")`.
23
+ *
24
+ * @example
25
+ * <label for="startTime"> Please enter a start time for the meeting: </label>
26
+ * <input id="startTime" type="text" aria-errormessage="msgID" aria-invalid="true" value="11:30 PM" />
27
+ * <span id="msgID" aria-live="assertive" style="visibility:visible">
28
+ * Invalid time: the time must be between 9:00 AM and 5:00 PM"
29
+ * </span>
30
+ *
31
+ *
32
+ * const timeInput = getByLabel('startTime')
33
+ *
34
+ * expect(timeInput).toHaveErrorMessage(
35
+ * 'Invalid time: the time must be between 9:00 AM and 5:00 PM',
36
+ * )
37
+ * expect(timeInput).toHaveErrorMessage(/invalid time/i) // to partially match
38
+ * expect(timeInput).toHaveErrorMessage(expect.stringContaining('Invalid time')) // to partially match
39
+ * expect(timeInput).not.toHaveErrorMessage('Pikachu!')
40
+ * @see
41
+ * [testing-library/jest-dom#tohaveerrormessage](https://github.com/testing-library/jest-dom#tohaveerrormessage)
42
+ */
3
43
  export function toHaveErrorMessage(htmlElement, checkWith) {
4
44
  checkHtmlElement(htmlElement, toHaveErrorMessage, this);
5
45
  if (!htmlElement.hasAttribute("aria-invalid") || htmlElement.getAttribute("aria-invalid") === "false") {
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-errormessage.js","sourceRoot":"","sources":["../../src/matchers/to-have-errormessage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAErE,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAE9B,WAAoB,EACpB,SAA4D;IAE5D,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAExD,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,OAAO,EAAE,CAAC;QACpG,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAErC,OAAO;YACH,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,EAAE;gBACV,OAAO,UAAU,CACb,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,qBAAqB,EAAE,SAAS,EAAE,EAAE,CAAC,EAClE,yDAAyD,EACzD,qBAAqB,EACrB,UAAU,EACV,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC;oBACpC,CAAC,CAAC,iBAAiB,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG;oBAC9D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CACrC,CAAC;YACN,CAAC;SACJ,CAAC;IACN,CAAC;IAED,MAAM,mBAAmB,GAAG,SAAS,KAAK,SAAS,CAAC;IAEpD,MAAM,iBAAiB,GAAG,WAAW,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;IAC9E,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvE,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC;QAE3C,MAAM,eAAe,GAAG,eAAe;aAClC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;aAChE,MAAM,CAAC,CAAC,EAAE,EAAqB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAEpD,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,OAAO;QACH,IAAI,EAAE,mBAAmB;YACrB,CAAC,CAAC,SAAS,YAAY,MAAM;gBACzB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC;YAC1C,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QAC3B,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,UAAU,CACb,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,SAAS,EAAE,EAAE,CAAC,EACvF,wBAAwB,EAAE,qBAAqB,EAC/C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,EACnC,UAAU,EACV,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CACzC,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"to-have-errormessage.js","sourceRoot":"","sources":["../../src/matchers/to-have-errormessage.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,18 @@
1
1
  import type { MatcherResult, MatcherState } from "./types.js";
2
+ /**
3
+ * @description
4
+ * Assert whether an element has focus or not.
5
+ * @example
6
+ * <div>
7
+ * <input type="text" data-testid="element-to-focus" />
8
+ * </div>
9
+ *
10
+ * const input = getByTestId('element-to-focus')
11
+ * input.focus()
12
+ * expect(input).toHaveFocus()
13
+ * input.blur()
14
+ * expect(input).not.toHaveFocus()
15
+ * @see
16
+ * [testing-library/jest-dom#tohavefocus](https://github.com/testing-library/jest-dom#tohavefocus)
17
+ */
2
18
  export declare function toHaveFocus(this: MatcherState, element: Element): MatcherResult;
@@ -1,4 +1,20 @@
1
1
  import { checkHtmlElement } from "./utils.js";
2
+ /**
3
+ * @description
4
+ * Assert whether an element has focus or not.
5
+ * @example
6
+ * <div>
7
+ * <input type="text" data-testid="element-to-focus" />
8
+ * </div>
9
+ *
10
+ * const input = getByTestId('element-to-focus')
11
+ * input.focus()
12
+ * expect(input).toHaveFocus()
13
+ * input.blur()
14
+ * expect(input).not.toHaveFocus()
15
+ * @see
16
+ * [testing-library/jest-dom#tohavefocus](https://github.com/testing-library/jest-dom#tohavefocus)
17
+ */
2
18
  export function toHaveFocus(element) {
3
19
  checkHtmlElement(element, toHaveFocus, this);
4
20
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-focus.js","sourceRoot":"","sources":["../../src/matchers/to-have-focus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,UAAU,WAAW,CAAqB,OAAgB;IAC5D,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO;QACH,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,KAAK,OAAO;QACrD,OAAO,EAAE,GAAG,EAAE;YACV,OAAO;gBACH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC;gBAChF,EAAE;gBACF,GAAG,CAAC,IAAI,CAAC,KAAK;oBACV,CAAC,CAAC,CAAC,8BAA8B,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5E,CAAC,CAAC;wBACI,8BAA8B;wBAC9B,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;wBACxC,8BAA8B;wBAC9B,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;qBACvE,CAAC;aACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"to-have-focus.js","sourceRoot":"","sources":["../../src/matchers/to-have-focus.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CAAqB,OAAgB;IAC5D,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAE7C,OAAO;QACH,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,aAAa,KAAK,OAAO;QACrD,OAAO,EAAE,GAAG,EAAE;YACV,OAAO;gBACH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,CAAC;gBAChF,EAAE;gBACF,GAAG,CAAC,IAAI,CAAC,KAAK;oBACV,CAAC,CAAC,CAAC,8BAA8B,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5E,CAAC,CAAC;wBACI,8BAA8B;wBAC9B,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;wBACxC,8BAA8B;wBAC9B,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;qBACvE,CAAC;aACX,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,2 +1,22 @@
1
1
  import type { MatcherResult, MatcherState } from "./types.js";
2
+ /**
3
+ * @description
4
+ * Check if a form or fieldset contains form controls for each given name, and having the specified value.
5
+ *
6
+ * Can only be invoked on a form or fieldset element.
7
+ * @example
8
+ * <form data-testid="login-form">
9
+ * <input type="text" name="username" value="jane.doe" />
10
+ * <input type="password" name="password" value="123" />
11
+ * <input type="checkbox" name="rememberMe" checked />
12
+ * <button type="submit">Sign in</button>
13
+ * </form>
14
+ *
15
+ * expect(getByTestId('login-form')).toHaveFormValues({
16
+ * username: 'jane.doe',
17
+ * rememberMe: true,
18
+ * })
19
+ * @see
20
+ * [testing-library/jest-dom#tohaveformvalues](https://github.com/testing-library/jest-dom#tohaveformvalues)
21
+ */
2
22
  export declare function toHaveFormValues(this: MatcherState, formElement: Element, expectedValues: Record<string, unknown>): MatcherResult;
@@ -40,6 +40,26 @@ function getAllFormValues(container) {
40
40
  [getPureName(name)]: getFormValue(container, name),
41
41
  }), {});
42
42
  }
43
+ /**
44
+ * @description
45
+ * Check if a form or fieldset contains form controls for each given name, and having the specified value.
46
+ *
47
+ * Can only be invoked on a form or fieldset element.
48
+ * @example
49
+ * <form data-testid="login-form">
50
+ * <input type="text" name="username" value="jane.doe" />
51
+ * <input type="password" name="password" value="123" />
52
+ * <input type="checkbox" name="rememberMe" checked />
53
+ * <button type="submit">Sign in</button>
54
+ * </form>
55
+ *
56
+ * expect(getByTestId('login-form')).toHaveFormValues({
57
+ * username: 'jane.doe',
58
+ * rememberMe: true,
59
+ * })
60
+ * @see
61
+ * [testing-library/jest-dom#tohaveformvalues](https://github.com/testing-library/jest-dom#tohaveformvalues)
62
+ */
43
63
  export function toHaveFormValues(formElement, expectedValues) {
44
64
  checkHtmlElement(formElement, toHaveFormValues, this);
45
65
  if (!formElement.elements) {
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-form-values.js","sourceRoot":"","sources":["../../src/matchers/to-have-form-values.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"to-have-form-values.js","sourceRoot":"","sources":["../../src/matchers/to-have-form-values.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,24 @@
1
1
  import type { MatcherResult, MatcherState } from "./types.js";
2
+ /**
3
+ * @description
4
+ * Check if an element has specific css properties with specific values applied.
5
+ *
6
+ * Only matches if the element has *all* the expected properties applied, not just some of them.
7
+ * @example
8
+ * <button
9
+ * data-test-id="submit-button"
10
+ * style="background-color: green; display: none"
11
+ * >
12
+ * submit
13
+ * </button>
14
+ *
15
+ * const button = getByTestId('submit-button')
16
+ * expect(button).toHaveStyle('background-color: green')
17
+ * expect(button).toHaveStyle({
18
+ * 'background-color': 'green',
19
+ * display: 'none'
20
+ * })
21
+ * @see
22
+ * [testing-library/jest-dom#tohavestyle](https://github.com/testing-library/jest-dom#tohavestyle)
23
+ */
2
24
  export declare function toHaveStyle(this: MatcherState, htmlElement: Element, css: string | Record<string, unknown>): MatcherResult;
@@ -46,6 +46,28 @@ function expectedDiff(diffFn, expected, computedStyles) {
46
46
  // Remove the "+ Received" annotation because this is a one-way diff
47
47
  return (diffOutput ?? "").replace(`${chalk.red("+ Received")}\n`, "");
48
48
  }
49
+ /**
50
+ * @description
51
+ * Check if an element has specific css properties with specific values applied.
52
+ *
53
+ * Only matches if the element has *all* the expected properties applied, not just some of them.
54
+ * @example
55
+ * <button
56
+ * data-test-id="submit-button"
57
+ * style="background-color: green; display: none"
58
+ * >
59
+ * submit
60
+ * </button>
61
+ *
62
+ * const button = getByTestId('submit-button')
63
+ * expect(button).toHaveStyle('background-color: green')
64
+ * expect(button).toHaveStyle({
65
+ * 'background-color': 'green',
66
+ * display: 'none'
67
+ * })
68
+ * @see
69
+ * [testing-library/jest-dom#tohavestyle](https://github.com/testing-library/jest-dom#tohavestyle)
70
+ */
49
71
  export function toHaveStyle(htmlElement, css) {
50
72
  checkHtmlElement(htmlElement, toHaveStyle, this);
51
73
  const parsedCSS = typeof css === "object" ? css : parseCSS(css, toHaveStyle, this);
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-style.js","sourceRoot":"","sources":["../../src/matchers/to-have-style.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"to-have-style.js","sourceRoot":"","sources":["../../src/matchers/to-have-style.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,27 @@
1
1
  import type { MatcherResult, MatcherState } from "./types.js";
2
+ /**
3
+ * @description
4
+ * Check whether the given element has a text content or not.
5
+ *
6
+ * When a string argument is passed through, it will perform a partial case-sensitive match to the element
7
+ * content.
8
+ *
9
+ * To perform a case-insensitive match, you can use a RegExp with the `/i` modifier.
10
+ *
11
+ * If you want to match the whole content, you can use a RegExp to do it.
12
+ * @example
13
+ * <span data-testid="text-content">Text Content</span>
14
+ *
15
+ * const element = getByTestId('text-content')
16
+ * expect(element).toHaveTextContent('Content')
17
+ * // to match the whole content
18
+ * expect(element).toHaveTextContent(/^Text Content$/)
19
+ * // to use case-insentive match
20
+ * expect(element).toHaveTextContent(/content$/i)
21
+ * expect(element).not.toHaveTextContent('content')
22
+ * @see
23
+ * [testing-library/jest-dom#tohavetextcontent](https://github.com/testing-library/jest-dom#tohavetextcontent)
24
+ */
2
25
  export declare function toHaveTextContent(this: MatcherState, node: Element, checkWith: string | RegExp, options?: {
3
26
  normalizeWhitespace: boolean;
4
27
  }): MatcherResult;
@@ -1,4 +1,27 @@
1
1
  import { getMessage, checkNode, matches, normalize } from "./utils.js";
2
+ /**
3
+ * @description
4
+ * Check whether the given element has a text content or not.
5
+ *
6
+ * When a string argument is passed through, it will perform a partial case-sensitive match to the element
7
+ * content.
8
+ *
9
+ * To perform a case-insensitive match, you can use a RegExp with the `/i` modifier.
10
+ *
11
+ * If you want to match the whole content, you can use a RegExp to do it.
12
+ * @example
13
+ * <span data-testid="text-content">Text Content</span>
14
+ *
15
+ * const element = getByTestId('text-content')
16
+ * expect(element).toHaveTextContent('Content')
17
+ * // to match the whole content
18
+ * expect(element).toHaveTextContent(/^Text Content$/)
19
+ * // to use case-insentive match
20
+ * expect(element).toHaveTextContent(/content$/i)
21
+ * expect(element).not.toHaveTextContent('content')
22
+ * @see
23
+ * [testing-library/jest-dom#tohavetextcontent](https://github.com/testing-library/jest-dom#tohavetextcontent)
24
+ */
2
25
  export function toHaveTextContent(node, checkWith, options = { normalizeWhitespace: true }) {
3
26
  checkNode(node, toHaveTextContent, this);
4
27
  const textContent = options.normalizeWhitespace
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-text-content.js","sourceRoot":"","sources":["../../src/matchers/to-have-text-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,UAAU,iBAAiB,CAE7B,IAAa,EACb,SAA0B,EAC1B,UAA4C,EAAE,mBAAmB,EAAE,IAAI,EAAE;IAEzE,SAAS,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB;QAC3C,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,oCAAoC;IAEpF,MAAM,uBAAuB,GAAG,WAAW,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,CAAC;IAEvE,OAAO;QACH,IAAI,EAAE,CAAC,uBAAuB,IAAI,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;QACjE,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,UAAU,CACb,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,SAAS,EAAE,EAAE,CAAC,EACtF,uBAAuB;gBACnB,CAAC,CAAC,kFAAkF;gBACpF,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,EAChD,SAAS,EACT,UAAU,EACV,WAAW,CACd,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"to-have-text-content.js","sourceRoot":"","sources":["../../src/matchers/to-have-text-content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,iBAAiB,CAE7B,IAAa,EACb,SAA0B,EAC1B,UAA4C,EAAE,mBAAmB,EAAE,IAAI,EAAE;IAEzE,SAAS,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAEzC,MAAM,WAAW,GAAG,OAAO,CAAC,mBAAmB;QAC3C,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,oCAAoC;IAEpF,MAAM,uBAAuB,GAAG,WAAW,KAAK,EAAE,IAAI,SAAS,KAAK,EAAE,CAAC;IAEvE,OAAO;QACH,IAAI,EAAE,CAAC,uBAAuB,IAAI,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;QACjE,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,OAAO,UAAU,CACb,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,SAAS,EAAE,EAAE,CAAC,EACtF,uBAAuB;gBACnB,CAAC,CAAC,kFAAkF;gBACpF,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,EAChD,SAAS,EACT,UAAU,EACV,WAAW,CACd,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -1,2 +1,21 @@
1
1
  import type { MatcherResult, MatcherState } from "./types.js";
2
+ /**
3
+ * @description
4
+ * Check whether the given form element has the specified value.
5
+ *
6
+ * Accepts `<input>`, `<select>`, and `<textarea>` elements with the exception of `<input type="checkbox">` and
7
+ * `<input type="radiobox">`, which can be matched only using
8
+ * [toBeChecked](https://github.com/testing-library/jest-dom#tobechecked) or
9
+ * [toHaveFormValues](https://github.com/testing-library/jest-dom#tohaveformvalues).
10
+ * @example
11
+ * <input
12
+ * type="number"
13
+ * value="5"
14
+ * data-testid="input-number" />
15
+ *
16
+ * const numberInput = getByTestId('input-number')
17
+ * expect(numberInput).toHaveValue(5)
18
+ * @see
19
+ * [testing-library/jest-dom#tohavevalue](https://github.com/testing-library/jest-dom#tohavevalue)
20
+ */
2
21
  export declare function toHaveValue(this: MatcherState, htmlElement: Element, expectedValue?: string | string[] | number | null): MatcherResult;
@@ -1,5 +1,24 @@
1
1
  import { isEqualWith } from "lodash-es";
2
2
  import { checkHtmlElement, compareArraysAsSet, getMessage, getSingleElementValue } from "./utils.js";
3
+ /**
4
+ * @description
5
+ * Check whether the given form element has the specified value.
6
+ *
7
+ * Accepts `<input>`, `<select>`, and `<textarea>` elements with the exception of `<input type="checkbox">` and
8
+ * `<input type="radiobox">`, which can be matched only using
9
+ * [toBeChecked](https://github.com/testing-library/jest-dom#tobechecked) or
10
+ * [toHaveFormValues](https://github.com/testing-library/jest-dom#tohaveformvalues).
11
+ * @example
12
+ * <input
13
+ * type="number"
14
+ * value="5"
15
+ * data-testid="input-number" />
16
+ *
17
+ * const numberInput = getByTestId('input-number')
18
+ * expect(numberInput).toHaveValue(5)
19
+ * @see
20
+ * [testing-library/jest-dom#tohavevalue](https://github.com/testing-library/jest-dom#tohavevalue)
21
+ */
3
22
  export function toHaveValue(htmlElement, expectedValue) {
4
23
  checkHtmlElement(htmlElement, toHaveValue, this);
5
24
  if (htmlElement.tagName.toLowerCase() === "input" &&
@@ -1 +1 @@
1
- {"version":3,"file":"to-have-value.js","sourceRoot":"","sources":["../../src/matchers/to-have-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErG,MAAM,UAAU,WAAW,CAEvB,WAAoB,EACpB,aAAiD;IAEjD,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAEjD,IACI,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;QAC7C,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAE,WAAgC,CAAC,IAAI,CAAC,EACxE,CAAC;QACC,MAAM,IAAI,KAAK,CACX,gJAAgJ,CACnJ,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,CAAC;IAEjD,IAAI,kBAAkB,GAAG,aAAa,CAAC;IACvC,IAAI,kBAAkB,GAAG,aAAa,CAAC;IACvC,IAAI,aAAa,IAAI,aAAa,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpE,kBAAkB,GAAG,GAAG,aAAa,KAAK,OAAO,aAAa,GAAG,CAAC;QAClE,kBAAkB,GAAG,GAAG,aAAa,KAAK,OAAO,aAAa,GAAG,CAAC;IACtE,CAAC;IAED,OAAO;QACH,IAAI,EAAE,YAAY;YACd,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,kBAAkB,CAAC;YAC/D,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5B,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAClC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EACzC,SAAS,EACT,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAClE,CAAC;YACF,OAAO,UAAU,CACb,IAAI,EACJ,OAAO,EACP,wBAAwB,EAAE,aAAa,EACvC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAC3C,UAAU,EACV,kBAAkB,CACrB,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"to-have-value.js","sourceRoot":"","sources":["../../src/matchers/to-have-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAErG;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,WAAW,CAEvB,WAAoB,EACpB,aAAiD;IAEjD,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAEjD,IACI,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO;QAC7C,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAE,WAAgC,CAAC,IAAI,CAAC,EACxE,CAAC;QACC,MAAM,IAAI,KAAK,CACX,gJAAgJ,CACnJ,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,CAAC;IAEjD,IAAI,kBAAkB,GAAG,aAAa,CAAC;IACvC,IAAI,kBAAkB,GAAG,aAAa,CAAC;IACvC,IAAI,aAAa,IAAI,aAAa,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QACpE,kBAAkB,GAAG,GAAG,aAAa,KAAK,OAAO,aAAa,GAAG,CAAC;QAClE,kBAAkB,GAAG,GAAG,aAAa,KAAK,OAAO,aAAa,GAAG,CAAC;IACtE,CAAC;IAED,OAAO;QACH,IAAI,EAAE,YAAY;YACd,CAAC,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,EAAE,kBAAkB,CAAC;YAC/D,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5B,OAAO,EAAE,GAAG,EAAE;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAClC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,EACzC,SAAS,EACT,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAClE,CAAC;YACF,OAAO,UAAU,CACb,IAAI,EACJ,OAAO,EACP,wBAAwB,EAAE,aAAa,EACvC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAC3C,UAAU,EACV,kBAAkB,CACrB,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC"}