@gtkx/testing 0.21.0 → 1.0.0-rc.2

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 (216) hide show
  1. package/README.md +137 -34
  2. package/dist/act.d.ts +19 -0
  3. package/dist/act.d.ts.map +1 -0
  4. package/dist/act.js +56 -0
  5. package/dist/act.js.map +1 -0
  6. package/dist/bound-queries.d.ts +33 -0
  7. package/dist/bound-queries.d.ts.map +1 -0
  8. package/dist/bound-queries.js +2 -0
  9. package/dist/bound-queries.js.map +1 -0
  10. package/dist/build-queries.d.ts +16 -0
  11. package/dist/build-queries.d.ts.map +1 -0
  12. package/dist/build-queries.js +115 -0
  13. package/dist/build-queries.js.map +1 -0
  14. package/dist/cleanup-registry.d.ts +5 -0
  15. package/dist/cleanup-registry.d.ts.map +1 -0
  16. package/dist/cleanup-registry.js +21 -0
  17. package/dist/cleanup-registry.js.map +1 -0
  18. package/dist/config.d.ts +20 -52
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/config.js +17 -46
  21. package/dist/config.js.map +1 -1
  22. package/dist/editable.d.ts +8 -0
  23. package/dist/editable.d.ts.map +1 -0
  24. package/dist/editable.js +26 -0
  25. package/dist/editable.js.map +1 -0
  26. package/dist/errors.d.ts +30 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +135 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/fire-event.d.ts +8 -25
  31. package/dist/fire-event.d.ts.map +1 -1
  32. package/dist/fire-event.js +11 -30
  33. package/dist/fire-event.js.map +1 -1
  34. package/dist/frame-sync.d.ts +4 -0
  35. package/dist/frame-sync.d.ts.map +1 -0
  36. package/dist/frame-sync.js +37 -0
  37. package/dist/frame-sync.js.map +1 -0
  38. package/dist/index.d.ts +17 -12
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +11 -7
  41. package/dist/index.js.map +1 -1
  42. package/dist/matchers.d.ts +59 -0
  43. package/dist/matchers.d.ts.map +1 -0
  44. package/dist/matchers.js +117 -0
  45. package/dist/matchers.js.map +1 -0
  46. package/dist/pretty-widget.d.ts +24 -26
  47. package/dist/pretty-widget.d.ts.map +1 -1
  48. package/dist/pretty-widget.js +111 -117
  49. package/dist/pretty-widget.js.map +1 -1
  50. package/dist/queries.d.ts +190 -180
  51. package/dist/queries.d.ts.map +1 -1
  52. package/dist/queries.js +291 -320
  53. package/dist/queries.js.map +1 -1
  54. package/dist/register-test-hooks.d.ts +2 -0
  55. package/dist/register-test-hooks.d.ts.map +1 -0
  56. package/dist/register-test-hooks.js +16 -0
  57. package/dist/register-test-hooks.js.map +1 -0
  58. package/dist/render-hook.d.ts +15 -35
  59. package/dist/render-hook.d.ts.map +1 -1
  60. package/dist/render-hook.js +9 -45
  61. package/dist/render-hook.js.map +1 -1
  62. package/dist/render.d.ts +13 -42
  63. package/dist/render.d.ts.map +1 -1
  64. package/dist/render.js +138 -121
  65. package/dist/render.js.map +1 -1
  66. package/dist/role-helpers.d.ts +19 -53
  67. package/dist/role-helpers.d.ts.map +1 -1
  68. package/dist/role-helpers.js +48 -63
  69. package/dist/role-helpers.js.map +1 -1
  70. package/dist/screen.d.ts +7 -63
  71. package/dist/screen.d.ts.map +1 -1
  72. package/dist/screen.js +24 -110
  73. package/dist/screen.js.map +1 -1
  74. package/dist/screenshot.d.ts +21 -23
  75. package/dist/screenshot.d.ts.map +1 -1
  76. package/dist/screenshot.js +98 -50
  77. package/dist/screenshot.js.map +1 -1
  78. package/dist/suggestions.d.ts +27 -0
  79. package/dist/suggestions.d.ts.map +1 -0
  80. package/dist/suggestions.js +61 -0
  81. package/dist/suggestions.js.map +1 -0
  82. package/dist/traversal.d.ts +12 -10
  83. package/dist/traversal.d.ts.map +1 -1
  84. package/dist/traversal.js +36 -15
  85. package/dist/traversal.js.map +1 -1
  86. package/dist/types.d.ts +115 -169
  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 +10 -0
  90. package/dist/user-event/adjustment.d.ts.map +1 -0
  91. package/dist/user-event/adjustment.js +35 -0
  92. package/dist/user-event/adjustment.js.map +1 -0
  93. package/dist/user-event/click.d.ts +8 -0
  94. package/dist/user-event/click.d.ts.map +1 -0
  95. package/dist/user-event/click.js +73 -0
  96. package/dist/user-event/click.js.map +1 -0
  97. package/dist/user-event/controller.d.ts +8 -0
  98. package/dist/user-event/controller.d.ts.map +1 -0
  99. package/dist/user-event/controller.js +31 -0
  100. package/dist/user-event/controller.js.map +1 -0
  101. package/dist/user-event/dispatch.d.ts +7 -0
  102. package/dist/user-event/dispatch.d.ts.map +1 -0
  103. package/dist/user-event/dispatch.js +11 -0
  104. package/dist/user-event/dispatch.js.map +1 -0
  105. package/dist/user-event/event-wrapper.d.ts +4 -0
  106. package/dist/user-event/event-wrapper.d.ts.map +1 -0
  107. package/dist/user-event/event-wrapper.js +59 -0
  108. package/dist/user-event/event-wrapper.js.map +1 -0
  109. package/dist/user-event/gesture.d.ts +35 -0
  110. package/dist/user-event/gesture.d.ts.map +1 -0
  111. package/dist/user-event/gesture.js +138 -0
  112. package/dist/user-event/gesture.js.map +1 -0
  113. package/dist/user-event/index.d.ts +51 -0
  114. package/dist/user-event/index.d.ts.map +1 -0
  115. package/dist/user-event/index.js +42 -0
  116. package/dist/user-event/index.js.map +1 -0
  117. package/dist/user-event/keyboard.d.ts +10 -0
  118. package/dist/user-event/keyboard.d.ts.map +1 -0
  119. package/dist/user-event/keyboard.js +204 -0
  120. package/dist/user-event/keyboard.js.map +1 -0
  121. package/dist/user-event/pointer.d.ts +10 -0
  122. package/dist/user-event/pointer.d.ts.map +1 -0
  123. package/dist/user-event/pointer.js +30 -0
  124. package/dist/user-event/pointer.js.map +1 -0
  125. package/dist/user-event/selection.d.ts +5 -0
  126. package/dist/user-event/selection.d.ts.map +1 -0
  127. package/dist/user-event/selection.js +105 -0
  128. package/dist/user-event/selection.js.map +1 -0
  129. package/dist/user-event/state.d.ts +7 -0
  130. package/dist/user-event/state.d.ts.map +1 -0
  131. package/dist/user-event/state.js +3 -0
  132. package/dist/user-event/state.js.map +1 -0
  133. package/dist/user-event/text.d.ts +18 -0
  134. package/dist/user-event/text.d.ts.map +1 -0
  135. package/dist/user-event/text.js +113 -0
  136. package/dist/user-event/text.js.map +1 -0
  137. package/dist/wait-for.d.ts +16 -36
  138. package/dist/wait-for.d.ts.map +1 -1
  139. package/dist/wait-for.js +74 -70
  140. package/dist/wait-for.js.map +1 -1
  141. package/dist/widget-accessible-properties.d.ts +34 -0
  142. package/dist/widget-accessible-properties.d.ts.map +1 -0
  143. package/dist/widget-accessible-properties.js +260 -0
  144. package/dist/widget-accessible-properties.js.map +1 -0
  145. package/dist/within.d.ts +10 -26
  146. package/dist/within.d.ts.map +1 -1
  147. package/dist/within.js +16 -25
  148. package/dist/within.js.map +1 -1
  149. package/package.json +23 -12
  150. package/src/act.ts +77 -0
  151. package/src/bound-queries.ts +37 -0
  152. package/src/build-queries.ts +226 -0
  153. package/src/cleanup-registry.ts +27 -0
  154. package/src/config.ts +35 -62
  155. package/src/editable.ts +37 -0
  156. package/src/errors.ts +191 -0
  157. package/src/fire-event.ts +13 -38
  158. package/src/frame-sync.ts +51 -0
  159. package/src/index.ts +58 -15
  160. package/src/matchers.ts +251 -0
  161. package/src/pretty-widget.ts +163 -130
  162. package/src/queries.ts +485 -396
  163. package/src/register-test-hooks.ts +19 -0
  164. package/src/render-hook.tsx +38 -45
  165. package/src/render.tsx +192 -155
  166. package/src/role-helpers.ts +65 -72
  167. package/src/screen.ts +26 -114
  168. package/src/screenshot.ts +128 -56
  169. package/src/suggestions.ts +106 -0
  170. package/src/traversal.ts +56 -22
  171. package/src/types.ts +144 -172
  172. package/src/user-event/adjustment.ts +62 -0
  173. package/src/user-event/click.ts +99 -0
  174. package/src/user-event/controller.ts +58 -0
  175. package/src/user-event/dispatch.ts +25 -0
  176. package/src/user-event/event-wrapper.ts +80 -0
  177. package/src/user-event/gesture.ts +239 -0
  178. package/src/user-event/index.ts +81 -0
  179. package/src/user-event/keyboard.ts +290 -0
  180. package/src/user-event/pointer.ts +46 -0
  181. package/src/user-event/selection.ts +159 -0
  182. package/src/user-event/state.ts +8 -0
  183. package/src/user-event/text.ts +172 -0
  184. package/src/wait-for.ts +117 -78
  185. package/src/widget-accessible-properties.ts +388 -0
  186. package/src/within.ts +29 -27
  187. package/dist/bind-queries.d.ts +0 -14
  188. package/dist/bind-queries.d.ts.map +0 -1
  189. package/dist/bind-queries.js +0 -29
  190. package/dist/bind-queries.js.map +0 -1
  191. package/dist/error-builder.d.ts +0 -28
  192. package/dist/error-builder.d.ts.map +0 -1
  193. package/dist/error-builder.js +0 -81
  194. package/dist/error-builder.js.map +0 -1
  195. package/dist/timing.d.ts +0 -18
  196. package/dist/timing.d.ts.map +0 -1
  197. package/dist/timing.js +0 -18
  198. package/dist/timing.js.map +0 -1
  199. package/dist/user-event.d.ts +0 -138
  200. package/dist/user-event.d.ts.map +0 -1
  201. package/dist/user-event.js +0 -411
  202. package/dist/user-event.js.map +0 -1
  203. package/dist/widget-text.d.ts +0 -69
  204. package/dist/widget-text.d.ts.map +0 -1
  205. package/dist/widget-text.js +0 -177
  206. package/dist/widget-text.js.map +0 -1
  207. package/dist/widget.d.ts +0 -3
  208. package/dist/widget.d.ts.map +0 -1
  209. package/dist/widget.js +0 -13
  210. package/dist/widget.js.map +0 -1
  211. package/src/bind-queries.ts +0 -52
  212. package/src/error-builder.ts +0 -102
  213. package/src/timing.ts +0 -17
  214. package/src/user-event.ts +0 -492
  215. package/src/widget-text.ts +0 -202
  216. package/src/widget.ts +0 -15
@@ -1 +0,0 @@
1
- {"version":3,"file":"bind-queries.d.ts","sourceRoot":"","sources":["../src/bind-queries.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAA8C,MAAM,YAAY,CAAC;AAE3F,KAAK,iBAAiB,GAAG,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;AAKvD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,mBAAmB,iBAAiB,KAAG,YAiCjE,CAAC"}
@@ -1,29 +0,0 @@
1
- import * as queries from "./queries.js";
2
- const resolveContainer = (containerOrGetter) => typeof containerOrGetter === "function" ? containerOrGetter() : containerOrGetter;
3
- /**
4
- * Binds all query functions to a container.
5
- *
6
- * @param containerOrGetter - The container to bind queries to, or a function that returns it
7
- * @returns Object with all query methods bound to the container
8
- *
9
- * @internal
10
- */
11
- export const bindQueries = (containerOrGetter) => ({
12
- queryByRole: (role, options) => queries.queryByRole(resolveContainer(containerOrGetter), role, options),
13
- queryByLabelText: (text, options) => queries.queryByLabelText(resolveContainer(containerOrGetter), text, options),
14
- queryByText: (text, options) => queries.queryByText(resolveContainer(containerOrGetter), text, options),
15
- queryByName: (name, options) => queries.queryByName(resolveContainer(containerOrGetter), name, options),
16
- queryAllByRole: (role, options) => queries.queryAllByRole(resolveContainer(containerOrGetter), role, options),
17
- queryAllByLabelText: (text, options) => queries.queryAllByLabelText(resolveContainer(containerOrGetter), text, options),
18
- queryAllByText: (text, options) => queries.queryAllByText(resolveContainer(containerOrGetter), text, options),
19
- queryAllByName: (name, options) => queries.queryAllByName(resolveContainer(containerOrGetter), name, options),
20
- findByRole: (role, options) => queries.findByRole(resolveContainer(containerOrGetter), role, options),
21
- findByLabelText: (text, options) => queries.findByLabelText(resolveContainer(containerOrGetter), text, options),
22
- findByText: (text, options) => queries.findByText(resolveContainer(containerOrGetter), text, options),
23
- findByName: (name, options) => queries.findByName(resolveContainer(containerOrGetter), name, options),
24
- findAllByRole: (role, options) => queries.findAllByRole(resolveContainer(containerOrGetter), role, options),
25
- findAllByLabelText: (text, options) => queries.findAllByLabelText(resolveContainer(containerOrGetter), text, options),
26
- findAllByText: (text, options) => queries.findAllByText(resolveContainer(containerOrGetter), text, options),
27
- findAllByName: (name, options) => queries.findAllByName(resolveContainer(containerOrGetter), name, options),
28
- });
29
- //# sourceMappingURL=bind-queries.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bind-queries.js","sourceRoot":"","sources":["../src/bind-queries.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import type * as Gtk from "@gtkx/ffi/gtk";
2
- import type { Container } from "./traversal.js";
3
- import type { ByRoleOptions, TextMatch } from "./types.js";
4
- type QueryType = "role" | "text" | "labelText" | "name";
5
- /**
6
- * Builds an error for when no elements match a query.
7
- */
8
- export declare const buildNotFoundError: (container: Container, queryType: QueryType, args: {
9
- role?: Gtk.AccessibleRole;
10
- text?: TextMatch;
11
- name?: TextMatch;
12
- options?: ByRoleOptions;
13
- }) => Error;
14
- /**
15
- * Builds an error for when multiple elements match a query but only one was expected.
16
- */
17
- export declare const buildMultipleFoundError: (container: Container, queryType: QueryType, args: {
18
- role?: Gtk.AccessibleRole;
19
- text?: TextMatch;
20
- name?: TextMatch;
21
- options?: ByRoleOptions;
22
- }, count: number) => Error;
23
- /**
24
- * Builds a timeout error with the last query error message.
25
- */
26
- export declare const buildTimeoutError: (timeout: number, lastError: Error | null) => Error;
27
- export {};
28
- //# sourceMappingURL=error-builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-builder.d.ts","sourceRoot":"","sources":["../src/error-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,eAAe,CAAC;AAI1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE3D,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAuCxD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC3B,WAAW,SAAS,EACpB,WAAW,SAAS,EACpB,MAAM;IAAE,IAAI,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,KACjG,KAiBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAChC,WAAW,SAAS,EACpB,WAAW,SAAS,EACpB,MAAM;IAAE,IAAI,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,EAChG,OAAO,MAAM,KACd,KAUF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,EAAE,WAAW,KAAK,GAAG,IAAI,KAAG,KAM5E,CAAC"}
@@ -1,81 +0,0 @@
1
- import { getConfig } from "./config.js";
2
- import { prettyWidget } from "./pretty-widget.js";
3
- import { formatRole, prettyRoles } from "./role-helpers.js";
4
- const formatTextMatcher = (text) => {
5
- if (typeof text === "function") {
6
- return "custom function";
7
- }
8
- if (text instanceof RegExp) {
9
- return text.toString();
10
- }
11
- return `'${text}'`;
12
- };
13
- const formatByRoleDescription = (role, options) => {
14
- const parts = [`role '${formatRole(role).toUpperCase()}'`];
15
- if (options?.name)
16
- parts.push(`name ${formatTextMatcher(options.name)}`);
17
- if (options?.checked !== undefined)
18
- parts.push(`checked=${options.checked}`);
19
- if (options?.pressed !== undefined)
20
- parts.push(`pressed=${options.pressed}`);
21
- if (options?.selected !== undefined)
22
- parts.push(`selected=${options.selected}`);
23
- if (options?.expanded !== undefined)
24
- parts.push(`expanded=${options.expanded}`);
25
- if (options?.level !== undefined)
26
- parts.push(`level=${options.level}`);
27
- return parts.join(" and ");
28
- };
29
- const formatQueryDescription = (queryType, args) => {
30
- switch (queryType) {
31
- case "role":
32
- return formatByRoleDescription(args.role, args.options);
33
- case "text":
34
- return `text ${formatTextMatcher(args.text)}`;
35
- case "labelText":
36
- return `label text ${formatTextMatcher(args.text)}`;
37
- case "name":
38
- return `name ${formatTextMatcher(args.name)}`;
39
- }
40
- };
41
- /**
42
- * Builds an error for when no elements match a query.
43
- */
44
- export const buildNotFoundError = (container, queryType, args) => {
45
- const config = getConfig();
46
- const description = formatQueryDescription(queryType, args);
47
- const lines = [`Unable to find an element with ${description}`];
48
- if (config.showSuggestions && queryType === "role") {
49
- lines.push("");
50
- lines.push("Here are the accessible roles:");
51
- lines.push("");
52
- lines.push(prettyRoles(container));
53
- }
54
- lines.push("");
55
- lines.push(prettyWidget(container, { highlight: false }));
56
- const message = lines.join("\n");
57
- return config.getElementError(message, container);
58
- };
59
- /**
60
- * Builds an error for when multiple elements match a query but only one was expected.
61
- */
62
- export const buildMultipleFoundError = (container, queryType, args, count) => {
63
- const config = getConfig();
64
- const description = formatQueryDescription(queryType, args);
65
- const lines = [`Found ${count} elements with ${description}, but expected only one`];
66
- lines.push("");
67
- lines.push(prettyWidget(container, { highlight: false }));
68
- const message = lines.join("\n");
69
- return config.getElementError(message, container);
70
- };
71
- /**
72
- * Builds a timeout error with the last query error message.
73
- */
74
- export const buildTimeoutError = (timeout, lastError) => {
75
- const baseMessage = `Timed out after ${timeout}ms`;
76
- if (lastError) {
77
- return new Error(`${baseMessage}.\n\n${lastError.message}`);
78
- }
79
- return new Error(baseMessage);
80
- };
81
- //# sourceMappingURL=error-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-builder.js","sourceRoot":"","sources":["../src/error-builder.ts"],"names":[],"mappings":"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"}
package/dist/timing.d.ts DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * Yields to the event loop, allowing pending GTK events to process.
3
- *
4
- * Use this after actions that trigger async widget updates.
5
- *
6
- * @returns Promise that resolves on the next event loop tick
7
- *
8
- * @example
9
- * ```tsx
10
- * import { tick } from "@gtkx/testing";
11
- *
12
- * widget.setSensitive(false);
13
- * await tick(); // Wait for GTK to process the change
14
- * expect(widget.getSensitive()).toBe(false);
15
- * ```
16
- */
17
- export declare const tick: () => Promise<void>;
18
- //# sourceMappingURL=timing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,IAAI,QAAO,OAAO,CAAC,IAAI,CAAqD,CAAC"}
package/dist/timing.js DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * Yields to the event loop, allowing pending GTK events to process.
3
- *
4
- * Use this after actions that trigger async widget updates.
5
- *
6
- * @returns Promise that resolves on the next event loop tick
7
- *
8
- * @example
9
- * ```tsx
10
- * import { tick } from "@gtkx/testing";
11
- *
12
- * widget.setSensitive(false);
13
- * await tick(); // Wait for GTK to process the change
14
- * expect(widget.getSensitive()).toBe(false);
15
- * ```
16
- */
17
- export const tick = () => new Promise((resolve) => setTimeout(resolve, 0));
18
- //# sourceMappingURL=timing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timing.js","sourceRoot":"","sources":["../src/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,GAAkB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC"}
@@ -1,138 +0,0 @@
1
- import * as Gtk from "@gtkx/ffi/gtk";
2
- /**
3
- * Options for tab navigation.
4
- */
5
- export type TabOptions = {
6
- /** Navigate backwards (Shift+Tab) instead of forwards */
7
- shift?: boolean;
8
- };
9
- /**
10
- * Pointer input actions for simulating mouse interactions.
11
- *
12
- * - `"click"` or `"[MouseLeft]"`: Full click (press + release)
13
- * - `"down"` or `"[MouseLeft>]"`: Press and hold
14
- * - `"up"` or `"[/MouseLeft]"`: Release
15
- */
16
- export type PointerInput = "click" | "down" | "up" | "[MouseLeft]" | "[MouseLeft>]" | "[/MouseLeft]";
17
- /**
18
- * User interaction utilities for testing.
19
- *
20
- * Simulates user actions like clicking, typing, and selecting.
21
- * All methods are async and wait for GTK event processing.
22
- *
23
- * @example
24
- * ```tsx
25
- * import { render, screen, userEvent } from "@gtkx/testing";
26
- *
27
- * test("form submission", async () => {
28
- * await render(<LoginForm />);
29
- *
30
- * const input = await screen.findByRole(Gtk.AccessibleRole.TEXT_BOX);
31
- * await userEvent.type(input, "username");
32
- *
33
- * const button = await screen.findByRole(Gtk.AccessibleRole.BUTTON);
34
- * await userEvent.click(button);
35
- * });
36
- * ```
37
- */
38
- export declare const userEvent: {
39
- /**
40
- * Activates a widget.
41
- *
42
- * Uses GTK's native `Gtk.Widget.activate()` to trigger the widget's
43
- * default action — clicking buttons, toggling checkboxes/switches, etc.
44
- */
45
- click: (element: Gtk.Widget) => Promise<void>;
46
- /**
47
- * Double-clicks a widget.
48
- *
49
- * Emits pressed/released signals with n_press=1, then n_press=2.
50
- */
51
- dblClick: (element: Gtk.Widget) => Promise<void>;
52
- /**
53
- * Triple-clicks a widget.
54
- *
55
- * Emits pressed/released signals with n_press=1, 2, then 3. Useful for text selection.
56
- */
57
- tripleClick: (element: Gtk.Widget) => Promise<void>;
58
- /**
59
- * Simulates Tab key navigation.
60
- *
61
- * @param element - Starting element
62
- * @param options - Use `shift: true` for backwards navigation
63
- */
64
- tab: (element: Gtk.Widget, options?: TabOptions) => Promise<void>;
65
- /**
66
- * Types text into an editable widget.
67
- *
68
- * Appends text to the current content. Works with Entry, SearchEntry,
69
- * and SpinButton widgets.
70
- *
71
- * @param element - The editable widget
72
- * @param text - Text to type
73
- */
74
- type: (element: Gtk.Widget, text: string) => Promise<void>;
75
- /**
76
- * Clears an editable widget's content.
77
- *
78
- * Sets the text to empty string.
79
- */
80
- clear: (element: Gtk.Widget) => Promise<void>;
81
- /**
82
- * Selects options in a dropdown or list.
83
- *
84
- * Works with DropDown, ComboBox, ListBox, ListView, GridView, and ColumnView.
85
- *
86
- * @param element - The selectable widget
87
- * @param values - Index or array of indices to select
88
- */
89
- selectOptions: (element: Gtk.Widget, values: number | number[]) => Promise<void>;
90
- /**
91
- * Deselects options in a list.
92
- *
93
- * Works with ListBox and multi-selection list views.
94
- *
95
- * @param element - The selectable widget
96
- * @param values - Index or array of indices to deselect
97
- */
98
- deselectOptions: (element: Gtk.Widget, values: number | number[]) => Promise<void>;
99
- /**
100
- * Simulates mouse entering a widget (hover).
101
- *
102
- * Triggers the "enter" signal on the widget's EventControllerMotion.
103
- */
104
- hover: (element: Gtk.Widget) => Promise<void>;
105
- /**
106
- * Simulates mouse leaving a widget (unhover).
107
- *
108
- * Triggers the "leave" signal on the widget's EventControllerMotion.
109
- */
110
- unhover: (element: Gtk.Widget) => Promise<void>;
111
- /**
112
- * Simulates keyboard input.
113
- *
114
- * Supports special keys in braces: `{Enter}`, `{Tab}`, `{Escape}`, etc.
115
- * Use `{Key>}` to hold a key down, `{/Key}` to release.
116
- *
117
- * @example
118
- * ```tsx
119
- * await userEvent.keyboard(element, "hello");
120
- * await userEvent.keyboard(element, "{Enter}");
121
- * await userEvent.keyboard(element, "{Shift>}A{/Shift}");
122
- * ```
123
- */
124
- keyboard: (element: Gtk.Widget, input: string) => Promise<void>;
125
- /**
126
- * Simulates pointer (mouse) input.
127
- *
128
- * Supports: `"click"`, `"[MouseLeft]"`, `"down"`, `"up"`.
129
- *
130
- * @example
131
- * ```tsx
132
- * await userEvent.pointer(element, "click");
133
- * await userEvent.pointer(element, "[MouseLeft]");
134
- * ```
135
- */
136
- pointer: (element: Gtk.Widget, input: PointerInput) => Promise<void>;
137
- };
138
- //# sourceMappingURL=user-event.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-event.d.ts","sourceRoot":"","sources":["../src/user-event.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AAKrC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACrB,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAkUF;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAC;AA6BrG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,SAAS;IAClB;;;;;OAKG;qBA/XuB,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAiYpD;;;;OAIG;wBA/W0B,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAiXvD;;;;OAIG;2BAjX6B,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAmX1D;;;;;OAKG;mBApXqB,GAAG,CAAC,MAAM,YAAY,UAAU,KAAG,OAAO,CAAC,IAAI,CAAC;IAsXxE;;;;;;;;OAQG;oBAnXsB,GAAG,CAAC,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAqXjE;;;;OAIG;qBA9WuB,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAgXpD;;;;;;;OAOG;6BA5U+B,GAAG,CAAC,MAAM,UAAU,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC;IA8UvF;;;;;;;OAOG;+BA3SiC,GAAG,CAAC,MAAM,UAAU,MAAM,GAAG,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAAC;IA6SzF;;;;OAIG;qBA3PuB,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IA6PpD;;;;OAIG;uBAvPyB,GAAG,CAAC,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAyPtD;;;;;;;;;;;;OAYG;wBArL0B,GAAG,CAAC,MAAM,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;IAuLtE;;;;;;;;;;OAUG;uBAjJyB,GAAG,CAAC,MAAM,SAAS,YAAY,KAAG,OAAO,CAAC,IAAI,CAAC;CAmJ9E,CAAC"}