@gtkx/testing 1.0.0-rc.1 → 1.0.0-rc.3

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 (187) hide show
  1. package/dist/act.d.ts +6 -6
  2. package/dist/act.d.ts.map +1 -1
  3. package/dist/act.js +34 -26
  4. package/dist/act.js.map +1 -1
  5. package/dist/bound-queries.d.ts +5 -5
  6. package/dist/bound-queries.d.ts.map +1 -1
  7. package/dist/bound-queries.js.map +1 -1
  8. package/dist/build-queries.d.ts +5 -5
  9. package/dist/build-queries.d.ts.map +1 -1
  10. package/dist/build-queries.js +21 -9
  11. package/dist/build-queries.js.map +1 -1
  12. package/dist/cleanup-registry.d.ts +4 -3
  13. package/dist/cleanup-registry.d.ts.map +1 -1
  14. package/dist/cleanup-registry.js +13 -3
  15. package/dist/cleanup-registry.js.map +1 -1
  16. package/dist/config.d.ts +5 -4
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +11 -9
  19. package/dist/config.js.map +1 -1
  20. package/dist/editable.d.ts +6 -5
  21. package/dist/editable.d.ts.map +1 -1
  22. package/dist/editable.js +7 -5
  23. package/dist/editable.js.map +1 -1
  24. package/dist/errors.d.ts +7 -6
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +64 -48
  27. package/dist/errors.js.map +1 -1
  28. package/dist/fire-event.d.ts +2 -1
  29. package/dist/fire-event.d.ts.map +1 -1
  30. package/dist/fire-event.js +2 -1
  31. package/dist/fire-event.js.map +1 -1
  32. package/dist/frame-sync.d.ts +2 -1
  33. package/dist/frame-sync.d.ts.map +1 -1
  34. package/dist/frame-sync.js +28 -21
  35. package/dist/frame-sync.js.map +1 -1
  36. package/dist/index.d.ts +9 -6
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -3
  39. package/dist/index.js.map +1 -1
  40. package/dist/matchers.d.ts +99 -35
  41. package/dist/matchers.d.ts.map +1 -1
  42. package/dist/matchers.js +314 -63
  43. package/dist/matchers.js.map +1 -1
  44. package/dist/normalize.d.ts +10 -0
  45. package/dist/normalize.d.ts.map +1 -0
  46. package/dist/normalize.js +20 -0
  47. package/dist/normalize.js.map +1 -0
  48. package/dist/pretty-widget.d.ts +6 -4
  49. package/dist/pretty-widget.d.ts.map +1 -1
  50. package/dist/pretty-widget.js +64 -24
  51. package/dist/pretty-widget.js.map +1 -1
  52. package/dist/queries.d.ts +129 -90
  53. package/dist/queries.d.ts.map +1 -1
  54. package/dist/queries.js +235 -164
  55. package/dist/queries.js.map +1 -1
  56. package/dist/register-test-hooks.js +2 -1
  57. package/dist/register-test-hooks.js.map +1 -1
  58. package/dist/render-hook.d.ts +3 -2
  59. package/dist/render-hook.d.ts.map +1 -1
  60. package/dist/render-hook.js +2 -1
  61. package/dist/render-hook.js.map +1 -1
  62. package/dist/render.d.ts +3 -2
  63. package/dist/render.d.ts.map +1 -1
  64. package/dist/render.js +25 -19
  65. package/dist/render.js.map +1 -1
  66. package/dist/role-helpers.d.ts +6 -5
  67. package/dist/role-helpers.d.ts.map +1 -1
  68. package/dist/role-helpers.js +16 -12
  69. package/dist/role-helpers.js.map +1 -1
  70. package/dist/screen.d.ts +4 -3
  71. package/dist/screen.d.ts.map +1 -1
  72. package/dist/screen.js +13 -11
  73. package/dist/screen.js.map +1 -1
  74. package/dist/screenshot.d.ts +4 -3
  75. package/dist/screenshot.d.ts.map +1 -1
  76. package/dist/screenshot.js +43 -36
  77. package/dist/screenshot.js.map +1 -1
  78. package/dist/suggestions.d.ts +11 -6
  79. package/dist/suggestions.d.ts.map +1 -1
  80. package/dist/suggestions.js +10 -5
  81. package/dist/suggestions.js.map +1 -1
  82. package/dist/traversal.d.ts +7 -7
  83. package/dist/traversal.d.ts.map +1 -1
  84. package/dist/traversal.js +17 -11
  85. package/dist/traversal.js.map +1 -1
  86. package/dist/types.d.ts +65 -24
  87. package/dist/types.d.ts.map +1 -1
  88. package/dist/types.js.map +1 -1
  89. package/dist/user-event/adjustment.d.ts +5 -3
  90. package/dist/user-event/adjustment.d.ts.map +1 -1
  91. package/dist/user-event/adjustment.js +6 -4
  92. package/dist/user-event/adjustment.js.map +1 -1
  93. package/dist/user-event/click.d.ts +6 -5
  94. package/dist/user-event/click.d.ts.map +1 -1
  95. package/dist/user-event/click.js +29 -21
  96. package/dist/user-event/click.js.map +1 -1
  97. package/dist/user-event/controller.d.ts +7 -5
  98. package/dist/user-event/controller.d.ts.map +1 -1
  99. package/dist/user-event/controller.js +16 -6
  100. package/dist/user-event/controller.js.map +1 -1
  101. package/dist/user-event/dispatch.d.ts +3 -3
  102. package/dist/user-event/dispatch.d.ts.map +1 -1
  103. package/dist/user-event/dispatch.js +3 -2
  104. package/dist/user-event/dispatch.js.map +1 -1
  105. package/dist/user-event/event-wrapper.d.ts +2 -1
  106. package/dist/user-event/event-wrapper.d.ts.map +1 -1
  107. package/dist/user-event/event-wrapper.js +27 -16
  108. package/dist/user-event/event-wrapper.js.map +1 -1
  109. package/dist/user-event/gesture.d.ts +18 -14
  110. package/dist/user-event/gesture.d.ts.map +1 -1
  111. package/dist/user-event/gesture.js +70 -37
  112. package/dist/user-event/gesture.js.map +1 -1
  113. package/dist/user-event/index.d.ts +17 -10
  114. package/dist/user-event/index.d.ts.map +1 -1
  115. package/dist/user-event/index.js +7 -3
  116. package/dist/user-event/index.js.map +1 -1
  117. package/dist/user-event/keyboard.d.ts +4 -3
  118. package/dist/user-event/keyboard.d.ts.map +1 -1
  119. package/dist/user-event/keyboard.js +89 -58
  120. package/dist/user-event/keyboard.js.map +1 -1
  121. package/dist/user-event/pointer.d.ts +7 -3
  122. package/dist/user-event/pointer.d.ts.map +1 -1
  123. package/dist/user-event/pointer.js +4 -1
  124. package/dist/user-event/pointer.js.map +1 -1
  125. package/dist/user-event/selection.d.ts +3 -2
  126. package/dist/user-event/selection.d.ts.map +1 -1
  127. package/dist/user-event/selection.js +26 -27
  128. package/dist/user-event/selection.js.map +1 -1
  129. package/dist/user-event/state.d.ts +3 -2
  130. package/dist/user-event/state.d.ts.map +1 -1
  131. package/dist/user-event/state.js +2 -1
  132. package/dist/user-event/state.js.map +1 -1
  133. package/dist/user-event/text.d.ts +8 -7
  134. package/dist/user-event/text.d.ts.map +1 -1
  135. package/dist/user-event/text.js +39 -33
  136. package/dist/user-event/text.js.map +1 -1
  137. package/dist/wait-for.d.ts +5 -5
  138. package/dist/wait-for.d.ts.map +1 -1
  139. package/dist/wait-for.js +45 -30
  140. package/dist/wait-for.js.map +1 -1
  141. package/dist/widget-accessible-properties.d.ts +36 -25
  142. package/dist/widget-accessible-properties.d.ts.map +1 -1
  143. package/dist/widget-accessible-properties.js +215 -68
  144. package/dist/widget-accessible-properties.js.map +1 -1
  145. package/dist/within.d.ts +2 -1
  146. package/dist/within.d.ts.map +1 -1
  147. package/dist/within.js +2 -1
  148. package/dist/within.js.map +1 -1
  149. package/package.json +11 -9
  150. package/src/act.ts +44 -35
  151. package/src/bound-queries.ts +6 -6
  152. package/src/build-queries.ts +84 -43
  153. package/src/cleanup-registry.ts +18 -5
  154. package/src/config.ts +16 -12
  155. package/src/editable.ts +13 -6
  156. package/src/errors.ts +106 -45
  157. package/src/fire-event.ts +3 -1
  158. package/src/frame-sync.ts +38 -21
  159. package/src/index.ts +13 -3
  160. package/src/matchers.ts +568 -114
  161. package/src/normalize.ts +28 -0
  162. package/src/pretty-widget.ts +114 -42
  163. package/src/queries.ts +418 -256
  164. package/src/register-test-hooks.ts +4 -1
  165. package/src/render-hook.tsx +10 -4
  166. package/src/render.tsx +59 -34
  167. package/src/role-helpers.ts +29 -16
  168. package/src/screen.ts +17 -12
  169. package/src/screenshot.ts +61 -38
  170. package/src/suggestions.ts +29 -10
  171. package/src/traversal.ts +35 -15
  172. package/src/types.ts +111 -32
  173. package/src/user-event/adjustment.ts +23 -10
  174. package/src/user-event/click.ts +49 -20
  175. package/src/user-event/controller.ts +41 -7
  176. package/src/user-event/dispatch.ts +4 -2
  177. package/src/user-event/event-wrapper.ts +42 -16
  178. package/src/user-event/gesture.ts +135 -50
  179. package/src/user-event/index.ts +19 -12
  180. package/src/user-event/keyboard.ts +147 -61
  181. package/src/user-event/pointer.ts +20 -8
  182. package/src/user-event/selection.ts +69 -32
  183. package/src/user-event/state.ts +4 -2
  184. package/src/user-event/text.ts +73 -38
  185. package/src/wait-for.ts +77 -36
  186. package/src/widget-accessible-properties.ts +385 -79
  187. package/src/within.ts +8 -5
package/src/errors.ts CHANGED
@@ -1,94 +1,140 @@
1
1
  import type * as Gtk from "@gtkx/gi/gtk";
2
+ import type { Container } from "./traversal.js";
3
+ import type { ByRoleOptions, ByRoleValue, Matcher } from "./types.js";
2
4
  import { getConfig } from "./config.js";
3
5
  import { prettyWidget } from "./pretty-widget.js";
4
6
  import { formatRole, prettyRoles } from "./role-helpers.js";
5
- import type { Container } from "./traversal.js";
6
- import type { ByRoleOptions, ByRoleValue, Matcher } from "./types.js";
7
+
8
+ type QueryDescriptor =
9
+ | { queryType: "role"; role: Gtk.AccessibleRole; options?: ByRoleOptions | undefined } |
10
+ { queryType: "text"; text: Matcher } |
11
+ { queryType: "labelText"; text: Matcher } |
12
+ { queryType: "name"; name: Matcher } |
13
+ { queryType: "placeholderText"; text: Matcher } |
14
+ { queryType: "displayValue"; value: Matcher };
15
+
16
+ const roleOptionFormatters: ((options: ByRoleOptions) => string | null)[] = [
17
+ (o) => (o.name ? `name ${formatTextMatcher(o.name)}` : null),
18
+ (o) => (o.checked === undefined ? null : `checked=${String(o.checked)}`),
19
+ (o) => (o.pressed === undefined ? null : `pressed=${String(o.pressed)}`),
20
+ (o) => (o.selected === undefined ? null : `selected=${String(o.selected)}`),
21
+ (o) => (o.expanded === undefined ? null : `expanded=${String(o.expanded)}`),
22
+ (o) => (o.level === undefined ? null : `level=${String(o.level)}`),
23
+ (o) => (o.busy === undefined ? null : `busy=${String(o.busy)}`),
24
+ (o) => (o.description ? `description ${formatTextMatcher(o.description)}` : null),
25
+ (o) => (o.value ? `value ${formatByRoleValue(o.value)}` : null),
26
+ (o) => (o.hidden === undefined ? null : `hidden=${String(o.hidden)}`),
27
+ ];
28
+
29
+ const expensiveErrorDiagnostics = { isDisabled: false };
7
30
 
8
31
  const formatTextMatcher = (text: Matcher): string => {
9
32
  if (typeof text === "function") {
10
33
  return "custom function";
11
34
  }
35
+
12
36
  if (text instanceof RegExp) {
13
37
  return text.toString();
14
38
  }
15
- return `'${text}'`;
39
+
40
+ return `'${String(text)}'`;
16
41
  };
17
42
 
18
43
  const formatByRoleValue = (value: ByRoleValue): string => {
19
44
  const parts: string[] = [];
20
- if (value.now !== undefined) parts.push(`now=${value.now}`);
21
- if (value.min !== undefined) parts.push(`min=${value.min}`);
22
- if (value.max !== undefined) parts.push(`max=${value.max}`);
23
- if (value.text !== undefined) parts.push(`text ${formatTextMatcher(value.text)}`);
45
+
46
+ if (value.now !== undefined) {
47
+ parts.push(`now=${String(value.now)}`);
48
+ }
49
+
50
+ if (value.min !== undefined) {
51
+ parts.push(`min=${String(value.min)}`);
52
+ }
53
+
54
+ if (value.max !== undefined) {
55
+ parts.push(`max=${String(value.max)}`);
56
+ }
57
+
58
+ if (value.text !== undefined) {
59
+ parts.push(`text ${formatTextMatcher(value.text)}`);
60
+ }
61
+
24
62
  return parts.join(", ");
25
63
  };
26
64
 
65
+ const roleOptionParts = (options: ByRoleOptions): string[] => {
66
+ const parts: string[] = [];
67
+
68
+ for (const formatter of roleOptionFormatters) {
69
+ const part = formatter(options);
70
+
71
+ if (part !== null) {
72
+ parts.push(part);
73
+ }
74
+ }
75
+
76
+ return parts;
77
+ };
78
+
27
79
  const formatByRoleDescription = (role: Gtk.AccessibleRole, options?: ByRoleOptions): string => {
28
80
  const parts = [`role '${formatRole(role).toUpperCase()}'`];
29
- if (options?.name) parts.push(`name ${formatTextMatcher(options.name)}`);
30
- if (options?.checked !== undefined) parts.push(`checked=${options.checked}`);
31
- if (options?.pressed !== undefined) parts.push(`pressed=${options.pressed}`);
32
- if (options?.selected !== undefined) parts.push(`selected=${options.selected}`);
33
- if (options?.expanded !== undefined) parts.push(`expanded=${options.expanded}`);
34
- if (options?.level !== undefined) parts.push(`level=${options.level}`);
35
- if (options?.busy !== undefined) parts.push(`busy=${options.busy}`);
36
- if (options?.description) parts.push(`description ${formatTextMatcher(options.description)}`);
37
- if (options?.value) parts.push(`value ${formatByRoleValue(options.value)}`);
38
- if (options?.hidden !== undefined) parts.push(`hidden=${options.hidden}`);
81
+
82
+ if (options) {
83
+ parts.push(...roleOptionParts(options));
84
+ }
85
+
39
86
  return parts.join(" and ");
40
87
  };
41
88
 
42
- export type QueryDescriptor =
43
- | { queryType: "role"; role: Gtk.AccessibleRole; options?: ByRoleOptions | undefined }
44
- | { queryType: "text"; text: Matcher }
45
- | { queryType: "labelText"; text: Matcher }
46
- | { queryType: "name"; name: Matcher }
47
- | { queryType: "placeholderText"; text: Matcher }
48
- | { queryType: "displayValue"; value: Matcher };
49
-
50
89
  const formatQueryDescription = (descriptor: QueryDescriptor): string => {
51
90
  switch (descriptor.queryType) {
52
- case "role":
91
+ case "role": {
53
92
  return formatByRoleDescription(descriptor.role, descriptor.options);
54
- case "text":
93
+ }
94
+ case "text": {
55
95
  return `text ${formatTextMatcher(descriptor.text)}`;
56
- case "labelText":
96
+ }
97
+ case "labelText": {
57
98
  return `label text ${formatTextMatcher(descriptor.text)}`;
58
- case "name":
99
+ }
100
+ case "name": {
59
101
  return `name ${formatTextMatcher(descriptor.name)}`;
60
- case "placeholderText":
102
+ }
103
+ case "placeholderText": {
61
104
  return `placeholder text ${formatTextMatcher(descriptor.text)}`;
62
- case "displayValue":
105
+ }
106
+ case "displayValue": {
63
107
  return `display value ${formatTextMatcher(descriptor.value)}`;
108
+ }
64
109
  }
65
110
  };
66
111
 
67
- let expensiveErrorDiagnosticsDisabled = false;
112
+ const runWithExpensiveErrorDiagnosticsDisabled = <T>(callback: () => T): T => {
113
+ const isPrevious = expensiveErrorDiagnostics.isDisabled;
114
+ expensiveErrorDiagnostics.isDisabled = true;
68
115
 
69
- export const runWithExpensiveErrorDiagnosticsDisabled = <T>(callback: () => T): T => {
70
- const previous = expensiveErrorDiagnosticsDisabled;
71
- expensiveErrorDiagnosticsDisabled = true;
72
116
  try {
73
117
  return callback();
74
118
  } finally {
75
- expensiveErrorDiagnosticsDisabled = previous;
119
+ expensiveErrorDiagnostics.isDisabled = isPrevious;
76
120
  }
77
121
  };
78
122
 
79
123
  const buildElementError = (container: Container, headLines: string[]): Error => {
80
124
  const config = getConfig();
81
- const lines = expensiveErrorDiagnosticsDisabled
125
+
126
+ const lines = expensiveErrorDiagnostics.isDisabled
82
127
  ? headLines
83
128
  : [...headLines, "", prettyWidget(container, { highlight: false })];
129
+
84
130
  return config.getElementError(lines.join("\n"), container);
85
131
  };
86
132
 
87
- export const notFoundError = (container: Container, descriptor: QueryDescriptor): Error => {
133
+ const notFoundError = (container: Container, descriptor: QueryDescriptor): Error => {
88
134
  const description = formatQueryDescription(descriptor);
89
135
  const headLines = [`Unable to find an element with ${description}`];
90
136
 
91
- if (!expensiveErrorDiagnosticsDisabled && descriptor.queryType === "role") {
137
+ if (!expensiveErrorDiagnostics.isDisabled && descriptor.queryType === "role") {
92
138
  headLines.push("", "Here are the accessible roles:", "", prettyRoles(container));
93
139
  }
94
140
 
@@ -97,34 +143,49 @@ export const notFoundError = (container: Container, descriptor: QueryDescriptor)
97
143
 
98
144
  const allByVariantHint = (descriptor: QueryDescriptor): string => {
99
145
  const variant = descriptor.queryType === "role" ? "getAllByRole" : "getAllBy*";
146
+
100
147
  return (
101
148
  "(If this is intentional, use the *AllBy* variant of the query, " +
102
149
  `e.g. queryAllBy*/getAllBy*/findAllBy*, such as ${variant}.)`
103
150
  );
104
151
  };
105
152
 
106
- export const multipleFoundError = (container: Container, descriptor: QueryDescriptor, matches: Gtk.Widget[]): Error => {
153
+ const multipleFoundError = (container: Container, descriptor: QueryDescriptor, matches: Gtk.Widget[]): Error => {
107
154
  const description = formatQueryDescription(descriptor);
155
+
108
156
  const headLines = [
109
- `Found ${matches.length} elements with ${description}, but expected only one`,
157
+ `Found ${String(matches.length)} elements with ${description}, but expected only one`,
110
158
  "",
111
159
  allByVariantHint(descriptor),
112
160
  ];
113
- if (!expensiveErrorDiagnosticsDisabled) {
161
+
162
+ if (!expensiveErrorDiagnostics.isDisabled) {
114
163
  const renderedMatches = matches.map((widget) => prettyWidget(widget, { highlight: false }));
115
164
  headLines.push("", "Here are the matching elements:", "", ...renderedMatches);
116
165
  }
166
+
117
167
  return buildElementError(container, headLines);
118
168
  };
119
169
 
120
- export const suggestionError = (suggestion: string, container: Container): Error => {
170
+ const suggestionError = (suggestion: string, container: Container): Error => {
121
171
  const config = getConfig();
122
172
  const message = `A better query is available, try this:\n${suggestion}\n`;
173
+
123
174
  return config.getElementError(message, container);
124
175
  };
125
176
 
126
- export const timeoutError = (timeout: number, lastError: Error | null): Error => {
127
- const baseMessage = `Timed out after ${timeout}ms`;
177
+ const timeoutError = (timeout: number, lastError: Error | null): Error => {
178
+ const baseMessage = `Timed out after ${String(timeout)}ms`;
128
179
  const message = lastError ? `${baseMessage}.\n\n${lastError.message}` : baseMessage;
180
+
129
181
  return getConfig().getElementError(message);
130
182
  };
183
+
184
+ export {
185
+ runWithExpensiveErrorDiagnosticsDisabled,
186
+ notFoundError,
187
+ multipleFoundError,
188
+ suggestionError,
189
+ timeoutError,
190
+ type QueryDescriptor,
191
+ };
package/src/fire-event.ts CHANGED
@@ -9,8 +9,10 @@ import { runInAct } from "./act.js";
9
9
  * @param signalName Name of the signal to emit.
10
10
  * @param args Arguments passed to the signal handlers.
11
11
  */
12
- export const fireEvent = async (element: GObject.Object, signalName: string, ...args: unknown[]): Promise<void> => {
12
+ const fireEvent = async (element: GObject.Object, signalName: string, ...args: unknown[]): Promise<void> => {
13
13
  await runInAct(() => {
14
14
  element.emit(signalName, ...args);
15
15
  });
16
16
  };
17
+
18
+ export { fireEvent };
package/src/frame-sync.ts CHANGED
@@ -1,34 +1,51 @@
1
1
  import type * as Gtk from "@gtkx/gi/gtk";
2
+ import * as GLib from "@gtkx/gi/glib";
2
3
 
3
4
  const CLOCK_STALL_FALLBACK_MS = 500;
4
5
 
5
- export const scheduleAfterLayout = (widget: Gtk.Widget | null, callback: () => void): void => {
6
- let done = false;
7
- let removeTick: (() => void) | null = null;
8
- let fallback: ReturnType<typeof setTimeout> | null = null;
9
-
10
- const finish = (): void => {
11
- if (done) return;
12
- done = true;
13
- if (fallback !== null) clearTimeout(fallback);
14
- removeTick?.();
15
- removeTick = null;
16
- fallback = null;
6
+ const once = (callback: () => void): (() => void) => {
7
+ let isCalled = false;
8
+
9
+ return () => {
10
+ if (isCalled) {
11
+ return;
12
+ }
13
+
14
+ isCalled = true;
17
15
  callback();
18
16
  };
17
+ };
19
18
 
20
- if (widget === null || widget.getFrameClock() === null || widget.getWidth() > 0) {
21
- queueMicrotask(finish);
22
- return;
23
- }
19
+ const runWhenSized = (widget: Gtk.Widget, finish: () => void): void => {
20
+ let tickId = 0;
21
+
22
+ const fallback = setTimeout(() => {
23
+ widget.removeTickCallback(tickId);
24
+ finish();
25
+ }, CLOCK_STALL_FALLBACK_MS);
24
26
 
25
- fallback = setTimeout(finish, CLOCK_STALL_FALLBACK_MS);
27
+ tickId = widget.addTickCallback(() => {
28
+ if (widget.getWidth() === 0) {
29
+ return GLib.SOURCE_CONTINUE;
30
+ }
26
31
 
27
- const tickId = widget.addTickCallback(() => {
28
- if (widget.getWidth() === 0) return true;
32
+ clearTimeout(fallback);
29
33
  finish();
30
- return false;
34
+
35
+ return GLib.SOURCE_REMOVE;
31
36
  });
37
+ };
38
+
39
+ const scheduleAfterLayout = (widget: Gtk.Widget | null, callback: () => void): void => {
40
+ const finish = once(callback);
41
+
42
+ if (widget?.getFrameClock() == null || widget.getWidth() > 0) {
43
+ queueMicrotask(finish);
32
44
 
33
- removeTick = () => widget.removeTickCallback(tickId);
45
+ return;
46
+ }
47
+
48
+ runWhenSized(widget, finish);
34
49
  };
50
+
51
+ export { scheduleAfterLayout };
package/src/index.ts CHANGED
@@ -5,8 +5,9 @@ export type { BoundQueries, RenderResult, Screen } from "./bound-queries.js";
5
5
  export type { Config, ConfigFn } from "./config.js";
6
6
  export { configure, getConfig } from "./config.js";
7
7
  export { fireEvent } from "./fire-event.js";
8
- export type { TextExpectation } from "./matchers.js";
8
+ export type { ClassExpectation, TextContentOptions, TextExpectation } from "./matchers.js";
9
9
  export { matchers, registerMatchers } from "./matchers.js";
10
+ export { getDefaultNormalizer } from "./normalize.js";
10
11
  export type { PrettyWidgetOptions } from "./pretty-widget.js";
11
12
  export { logWidget, prettyWidget } from "./pretty-widget.js";
12
13
  export {
@@ -34,7 +35,6 @@ export {
34
35
  getByPlaceholderText,
35
36
  getByRole,
36
37
  getByText,
37
- getDefaultNormalizer,
38
38
  queryAllByDisplayValue,
39
39
  queryAllByLabelText,
40
40
  queryAllByName,
@@ -48,8 +48,8 @@ export {
48
48
  queryByRole,
49
49
  queryByText,
50
50
  } from "./queries.js";
51
- export { cleanup, render } from "./render.js";
52
51
  export { renderHook } from "./render-hook.js";
52
+ export { cleanup, render } from "./render.js";
53
53
  export { formatRole, getRoles, logRoles, prettyRoles } from "./role-helpers.js";
54
54
  export { screen } from "./screen.js";
55
55
  export { captureAndSaveScreenshot, logScreenshotPath, screenshot } from "./screenshot.js";
@@ -59,6 +59,7 @@ export type { Container } from "./traversal.js";
59
59
  export type {
60
60
  ByRoleOptions,
61
61
  ByRoleValue,
62
+ WidgetType,
62
63
  Matcher,
63
64
  MatcherFunction,
64
65
  MatcherOptions,
@@ -73,12 +74,20 @@ export type {
73
74
  WindowSelector,
74
75
  WrapperComponent,
75
76
  } from "./types.js";
77
+ export type { ControllerConstructor } from "./user-event/controller.js";
78
+ export {
79
+ getAllControllers,
80
+ getController,
81
+ queryAllControllers,
82
+ queryController,
83
+ } from "./user-event/controller.js";
76
84
  export type {
77
85
  DragOffset,
78
86
  DragOptions,
79
87
  DropContent,
80
88
  DropOptions,
81
89
  PointerInput,
90
+ ScrollDelta,
82
91
  TabOptions,
83
92
  TypeOptions,
84
93
  UserEvent,
@@ -89,5 +98,6 @@ export {
89
98
  getWidgetErrorMessage,
90
99
  getWidgetInvalidState,
91
100
  getWidgetNodeText,
101
+ getWidgetTextContent,
92
102
  } from "./widget-accessible-properties.js";
93
103
  export { within } from "./within.js";