@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,411 +0,0 @@
1
- import * as Gdk from "@gtkx/ffi/gdk";
2
- import { signalEmitv, signalLookup, typeFromName, Value } from "@gtkx/ffi/gobject";
3
- import * as Gtk from "@gtkx/ffi/gtk";
4
- import { fireEvent } from "./fire-event.js";
5
- import { tick } from "./timing.js";
6
- import { isEditable } from "./widget.js";
7
- const click = async (element) => {
8
- element.activate();
9
- await tick();
10
- };
11
- const emitClickSequence = async (element, nPress) => {
12
- const controller = getOrCreateController(element, Gtk.GestureClick);
13
- for (let i = 1; i <= nPress; i++) {
14
- const args = [
15
- Value.newFromObject(controller),
16
- Value.newFromInt(i),
17
- Value.newFromDouble(0),
18
- Value.newFromDouble(0),
19
- ];
20
- signalEmitv(args, getSignalId(controller, "pressed"), 0);
21
- signalEmitv(args, getSignalId(controller, "released"), 0);
22
- }
23
- await tick();
24
- };
25
- const dblClick = async (element) => {
26
- await emitClickSequence(element, 2);
27
- };
28
- const tripleClick = async (element) => {
29
- await emitClickSequence(element, 3);
30
- };
31
- const tab = async (element, options) => {
32
- const direction = options?.shift ? Gtk.DirectionType.TAB_BACKWARD : Gtk.DirectionType.TAB_FORWARD;
33
- const root = element.getRoot();
34
- if (root && root instanceof Gtk.Widget) {
35
- root.childFocus(direction);
36
- }
37
- await tick();
38
- };
39
- const type = async (element, text) => {
40
- if (!isEditable(element)) {
41
- throw new Error("Cannot type into element: expected editable widget (TEXT_BOX, SEARCH_BOX, or SPIN_BUTTON)");
42
- }
43
- const currentText = element.getText();
44
- element.setText(currentText + text);
45
- await tick();
46
- };
47
- const clear = async (element) => {
48
- if (!isEditable(element)) {
49
- throw new Error("Cannot clear element: expected editable widget (TEXT_BOX, SEARCH_BOX, or SPIN_BUTTON)");
50
- }
51
- element.setText("");
52
- await tick();
53
- };
54
- const SELECTABLE_ROLES = new Set([Gtk.AccessibleRole.COMBO_BOX, Gtk.AccessibleRole.LIST]);
55
- const isSelectable = (widget) => {
56
- if (!widget)
57
- return false;
58
- return SELECTABLE_ROLES.has(widget.getAccessibleRole());
59
- };
60
- const selectListViewItems = (selectionModel, positions, exclusive) => {
61
- if (positions.length === 0) {
62
- selectionModel.unselectRange(0, selectionModel.getNItems());
63
- return;
64
- }
65
- if (exclusive && positions.length === 1) {
66
- selectionModel.selectItem(positions[0], true);
67
- return;
68
- }
69
- const nItems = selectionModel.getNItems();
70
- const selected = new Gtk.Bitset();
71
- const mask = Gtk.Bitset.newRange(0, nItems);
72
- for (const pos of positions) {
73
- selected.add(pos);
74
- }
75
- selectionModel.setSelection(selected, mask);
76
- };
77
- const isListView = (widget) => {
78
- return widget instanceof Gtk.ListView || widget instanceof Gtk.GridView || widget instanceof Gtk.ColumnView;
79
- };
80
- const selectOptions = async (element, values) => {
81
- const valueArray = Array.isArray(values) ? values : [values];
82
- if (isListView(element)) {
83
- const selectionModel = element.getModel();
84
- const isMultiSelection = selectionModel instanceof Gtk.MultiSelection;
85
- selectListViewItems(selectionModel, valueArray, !isMultiSelection);
86
- await tick();
87
- return;
88
- }
89
- if (!isSelectable(element)) {
90
- throw new Error("Cannot select options: expected selectable widget (COMBO_BOX or LIST)");
91
- }
92
- const role = element.getAccessibleRole();
93
- if (role === Gtk.AccessibleRole.COMBO_BOX) {
94
- if (Array.isArray(values) && values.length > 1) {
95
- throw new Error("Cannot select multiple options: ComboBox only supports single selection");
96
- }
97
- if (element instanceof Gtk.DropDown) {
98
- element.setSelected(valueArray[0]);
99
- }
100
- else {
101
- element.setActive(valueArray[0]);
102
- }
103
- }
104
- else if (role === Gtk.AccessibleRole.LIST) {
105
- const listBox = element;
106
- for (const value of valueArray) {
107
- const row = listBox.getRowAtIndex(value);
108
- if (row) {
109
- listBox.selectRow(row);
110
- row.activate();
111
- }
112
- }
113
- }
114
- await tick();
115
- };
116
- const deselectOptions = async (element, values) => {
117
- const valueArray = Array.isArray(values) ? values : [values];
118
- if (isListView(element)) {
119
- const selectionModel = element.getModel();
120
- for (const pos of valueArray) {
121
- selectionModel.unselectItem(pos);
122
- }
123
- await tick();
124
- return;
125
- }
126
- const role = element.getAccessibleRole();
127
- if (role !== Gtk.AccessibleRole.LIST) {
128
- throw new Error("Cannot deselect options: only ListBox supports deselection");
129
- }
130
- const listBox = element;
131
- for (const value of valueArray) {
132
- const row = listBox.getRowAtIndex(value);
133
- if (row) {
134
- listBox.unselectRow(row);
135
- }
136
- }
137
- await tick();
138
- };
139
- const getOrCreateController = (element, controllerType) => {
140
- const controllers = element.observeControllers();
141
- const nItems = controllers.getNItems();
142
- for (let i = 0; i < nItems; i++) {
143
- const controller = controllers.getObject(i);
144
- if (controller instanceof controllerType) {
145
- return controller;
146
- }
147
- }
148
- const controller = new controllerType();
149
- element.addController(controller);
150
- return controller;
151
- };
152
- const getSignalId = (target, signalName) => {
153
- const gtype = typeFromName(target.constructor.glibTypeName);
154
- return signalLookup(signalName, gtype);
155
- };
156
- const hover = async (element) => {
157
- const controller = getOrCreateController(element, Gtk.EventControllerMotion);
158
- signalEmitv([Value.newFromObject(controller), Value.newFromDouble(0), Value.newFromDouble(0)], getSignalId(controller, "enter"), 0);
159
- await tick();
160
- };
161
- const unhover = async (element) => {
162
- const controller = getOrCreateController(element, Gtk.EventControllerMotion);
163
- signalEmitv([Value.newFromObject(controller)], getSignalId(controller, "leave"), 0);
164
- await tick();
165
- };
166
- const KEY_MAP = {
167
- Enter: Gdk.KEY_Return,
168
- Tab: Gdk.KEY_Tab,
169
- Escape: Gdk.KEY_Escape,
170
- Backspace: Gdk.KEY_BackSpace,
171
- Delete: Gdk.KEY_Delete,
172
- ArrowUp: Gdk.KEY_Up,
173
- ArrowDown: Gdk.KEY_Down,
174
- ArrowLeft: Gdk.KEY_Left,
175
- ArrowRight: Gdk.KEY_Right,
176
- Home: Gdk.KEY_Home,
177
- End: Gdk.KEY_End,
178
- PageUp: Gdk.KEY_Page_Up,
179
- PageDown: Gdk.KEY_Page_Down,
180
- Space: Gdk.KEY_space,
181
- Shift: Gdk.KEY_Shift_L,
182
- Control: Gdk.KEY_Control_L,
183
- Alt: Gdk.KEY_Alt_L,
184
- Meta: Gdk.KEY_Meta_L,
185
- };
186
- const parseKeyboardInput = (input) => {
187
- const actions = [];
188
- let i = 0;
189
- while (i < input.length) {
190
- if (input[i] === "{") {
191
- const endBrace = input.indexOf("}", i);
192
- if (endBrace === -1)
193
- break;
194
- let keyName = input.slice(i + 1, endBrace);
195
- let press = true;
196
- let release = true;
197
- if (keyName.startsWith("/")) {
198
- keyName = keyName.slice(1);
199
- press = false;
200
- }
201
- else if (keyName.endsWith(">")) {
202
- keyName = keyName.slice(0, -1);
203
- release = false;
204
- }
205
- const keyval = KEY_MAP[keyName];
206
- if (keyval === undefined) {
207
- throw new Error(`Unknown key: {${keyName}}`);
208
- }
209
- if (press)
210
- actions.push({ keyval, press: true });
211
- if (release)
212
- actions.push({ keyval, press: false });
213
- i = endBrace + 1;
214
- }
215
- else {
216
- const keyval = input.charCodeAt(i);
217
- actions.push({ keyval, press: true });
218
- actions.push({ keyval, press: false });
219
- i++;
220
- }
221
- }
222
- return actions;
223
- };
224
- const MODIFIER_KEYVAL_TO_MASK = {
225
- [Gdk.KEY_Shift_L]: Gdk.ModifierType.SHIFT_MASK,
226
- [Gdk.KEY_Shift_R]: Gdk.ModifierType.SHIFT_MASK,
227
- [Gdk.KEY_Control_L]: Gdk.ModifierType.CONTROL_MASK,
228
- [Gdk.KEY_Control_R]: Gdk.ModifierType.CONTROL_MASK,
229
- [Gdk.KEY_Alt_L]: Gdk.ModifierType.ALT_MASK,
230
- [Gdk.KEY_Alt_R]: Gdk.ModifierType.ALT_MASK,
231
- [Gdk.KEY_Meta_L]: Gdk.ModifierType.META_MASK,
232
- [Gdk.KEY_Meta_R]: Gdk.ModifierType.META_MASK,
233
- };
234
- let gdkModifierType = null;
235
- const keyboard = async (element, input) => {
236
- gdkModifierType ??= typeFromName("GdkModifierType");
237
- const controller = getOrCreateController(element, Gtk.EventControllerKey);
238
- const actions = parseKeyboardInput(input);
239
- let modifierState = 0;
240
- for (const action of actions) {
241
- const mask = MODIFIER_KEYVAL_TO_MASK[action.keyval];
242
- if (mask) {
243
- if (action.press) {
244
- modifierState |= mask;
245
- }
246
- else {
247
- modifierState &= ~mask;
248
- }
249
- }
250
- const signalName = action.press ? "key-pressed" : "key-released";
251
- const returnValue = action.press ? Value.newFromBoolean(false) : undefined;
252
- signalEmitv([
253
- Value.newFromObject(controller),
254
- Value.newFromUint(action.keyval),
255
- Value.newFromUint(0),
256
- Value.newFromFlags(gdkModifierType, modifierState),
257
- ], getSignalId(controller, signalName), 0, returnValue);
258
- if (action.press && action.keyval === Gdk.KEY_Return && isEditable(element)) {
259
- await fireEvent(element, "activate");
260
- }
261
- }
262
- await tick();
263
- };
264
- const pointer = async (element, input) => {
265
- const controller = getOrCreateController(element, Gtk.GestureClick);
266
- const pressedArgs = [
267
- Value.newFromObject(controller),
268
- Value.newFromInt(1),
269
- Value.newFromDouble(0),
270
- Value.newFromDouble(0),
271
- ];
272
- const releasedArgs = [
273
- Value.newFromObject(controller),
274
- Value.newFromInt(1),
275
- Value.newFromDouble(0),
276
- Value.newFromDouble(0),
277
- ];
278
- if (input === "[MouseLeft]" || input === "click") {
279
- signalEmitv(pressedArgs, getSignalId(controller, "pressed"), 0);
280
- signalEmitv(releasedArgs, getSignalId(controller, "released"), 0);
281
- }
282
- else if (input === "[MouseLeft>]" || input === "down") {
283
- signalEmitv(pressedArgs, getSignalId(controller, "pressed"), 0);
284
- }
285
- else if (input === "[/MouseLeft]" || input === "up") {
286
- signalEmitv(releasedArgs, getSignalId(controller, "released"), 0);
287
- }
288
- await tick();
289
- };
290
- /**
291
- * User interaction utilities for testing.
292
- *
293
- * Simulates user actions like clicking, typing, and selecting.
294
- * All methods are async and wait for GTK event processing.
295
- *
296
- * @example
297
- * ```tsx
298
- * import { render, screen, userEvent } from "@gtkx/testing";
299
- *
300
- * test("form submission", async () => {
301
- * await render(<LoginForm />);
302
- *
303
- * const input = await screen.findByRole(Gtk.AccessibleRole.TEXT_BOX);
304
- * await userEvent.type(input, "username");
305
- *
306
- * const button = await screen.findByRole(Gtk.AccessibleRole.BUTTON);
307
- * await userEvent.click(button);
308
- * });
309
- * ```
310
- */
311
- export const userEvent = {
312
- /**
313
- * Activates a widget.
314
- *
315
- * Uses GTK's native `Gtk.Widget.activate()` to trigger the widget's
316
- * default action — clicking buttons, toggling checkboxes/switches, etc.
317
- */
318
- click,
319
- /**
320
- * Double-clicks a widget.
321
- *
322
- * Emits pressed/released signals with n_press=1, then n_press=2.
323
- */
324
- dblClick,
325
- /**
326
- * Triple-clicks a widget.
327
- *
328
- * Emits pressed/released signals with n_press=1, 2, then 3. Useful for text selection.
329
- */
330
- tripleClick,
331
- /**
332
- * Simulates Tab key navigation.
333
- *
334
- * @param element - Starting element
335
- * @param options - Use `shift: true` for backwards navigation
336
- */
337
- tab,
338
- /**
339
- * Types text into an editable widget.
340
- *
341
- * Appends text to the current content. Works with Entry, SearchEntry,
342
- * and SpinButton widgets.
343
- *
344
- * @param element - The editable widget
345
- * @param text - Text to type
346
- */
347
- type,
348
- /**
349
- * Clears an editable widget's content.
350
- *
351
- * Sets the text to empty string.
352
- */
353
- clear,
354
- /**
355
- * Selects options in a dropdown or list.
356
- *
357
- * Works with DropDown, ComboBox, ListBox, ListView, GridView, and ColumnView.
358
- *
359
- * @param element - The selectable widget
360
- * @param values - Index or array of indices to select
361
- */
362
- selectOptions,
363
- /**
364
- * Deselects options in a list.
365
- *
366
- * Works with ListBox and multi-selection list views.
367
- *
368
- * @param element - The selectable widget
369
- * @param values - Index or array of indices to deselect
370
- */
371
- deselectOptions,
372
- /**
373
- * Simulates mouse entering a widget (hover).
374
- *
375
- * Triggers the "enter" signal on the widget's EventControllerMotion.
376
- */
377
- hover,
378
- /**
379
- * Simulates mouse leaving a widget (unhover).
380
- *
381
- * Triggers the "leave" signal on the widget's EventControllerMotion.
382
- */
383
- unhover,
384
- /**
385
- * Simulates keyboard input.
386
- *
387
- * Supports special keys in braces: `{Enter}`, `{Tab}`, `{Escape}`, etc.
388
- * Use `{Key>}` to hold a key down, `{/Key}` to release.
389
- *
390
- * @example
391
- * ```tsx
392
- * await userEvent.keyboard(element, "hello");
393
- * await userEvent.keyboard(element, "{Enter}");
394
- * await userEvent.keyboard(element, "{Shift>}A{/Shift}");
395
- * ```
396
- */
397
- keyboard,
398
- /**
399
- * Simulates pointer (mouse) input.
400
- *
401
- * Supports: `"click"`, `"[MouseLeft]"`, `"down"`, `"up"`.
402
- *
403
- * @example
404
- * ```tsx
405
- * await userEvent.pointer(element, "click");
406
- * await userEvent.pointer(element, "[MouseLeft]");
407
- * ```
408
- */
409
- pointer,
410
- };
411
- //# sourceMappingURL=user-event.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user-event.js","sourceRoot":"","sources":["../src/user-event.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- import * as Gtk from "@gtkx/ffi/gtk";
2
- /**
3
- * Returns the text content of a widget, analogous to RTL's getNodeText.
4
- *
5
- * Collects direct child GtkLabel text (treated as text nodes) and joins
6
- * them into a single string. Widget properties like getLabel(), getTitle(),
7
- * getText() are NOT included — those are attributes, not text content.
8
- *
9
- * @param widget - The widget to extract text from
10
- * @returns The joined text content or null if none found
11
- */
12
- export declare const getWidgetText: (widget: Gtk.Widget) => string | null;
13
- /**
14
- * Returns the widget's own text from properties (getLabel, getText, getTitle).
15
- *
16
- * Used for display/debugging purposes (e.g., prettyWidget). This is
17
- * analogous to HTML attributes like aria-label, not text content.
18
- *
19
- * @param widget - The widget to extract property text from
20
- * @returns The property text or null if none found
21
- */
22
- export declare const getWidgetPropertyText: (widget: Gtk.Widget) => string | null;
23
- /**
24
- * Computes the accessible name of a widget for role-based queries.
25
- *
26
- * Uses the widget's own text properties first, then recursively collects
27
- * all descendant label text. This mirrors how ARIA accessible name
28
- * computation works in the DOM.
29
- *
30
- * @param widget - The widget to compute the accessible name for
31
- * @returns The accessible name or null if none found
32
- */
33
- export declare const getWidgetAccessibleName: (widget: Gtk.Widget) => string | null;
34
- /**
35
- * Gets the widget name (gtk_widget_get_name).
36
- *
37
- * @param widget - The widget to get the name from
38
- * @returns The widget name or null if not set
39
- */
40
- export declare const getWidgetName: (widget: Gtk.Widget) => string | null;
41
- /**
42
- * Gets the checked state from toggle-like widgets.
43
- *
44
- * @param widget - The widget to get the checked state from
45
- * @returns The checked state or null if not applicable
46
- */
47
- export declare const getWidgetCheckedState: (widget: Gtk.Widget) => boolean | null;
48
- /**
49
- * Gets the pressed state from toggle button widgets.
50
- *
51
- * @param widget - The widget to get the pressed state from
52
- * @returns The pressed state or null if not applicable
53
- */
54
- export declare const getWidgetPressedState: (widget: Gtk.Widget) => boolean | null;
55
- /**
56
- * Gets the expanded state from expander widgets.
57
- *
58
- * @param widget - The widget to get the expanded state from
59
- * @returns The expanded state or null if not applicable
60
- */
61
- export declare const getWidgetExpandedState: (widget: Gtk.Widget) => boolean | null;
62
- /**
63
- * Gets the selected state from selectable widgets.
64
- *
65
- * @param widget - The widget to get the selected state from
66
- * @returns The selected state or null if not applicable
67
- */
68
- export declare const getWidgetSelectedState: (widget: Gtk.Widget) => boolean | null;
69
- //# sourceMappingURL=widget-text.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"widget-text.d.ts","sourceRoot":"","sources":["../src/widget-text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AAwDrC;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAM3D,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAEnE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAqBrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,MAAM,GAAG,IAE3D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAcpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAQpE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAUrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,GAAG,CAAC,MAAM,KAAG,OAAO,GAAG,IAQrE,CAAC"}
@@ -1,177 +0,0 @@
1
- import { getNativeInterface } from "@gtkx/ffi";
2
- import * as Gtk from "@gtkx/ffi/gtk";
3
- const getLabelText = (widget) => {
4
- const asLabel = widget;
5
- const asInscription = widget;
6
- return asLabel.getLabel?.() ?? asInscription.getText?.() ?? null;
7
- };
8
- const getDefaultText = (widget) => {
9
- if ("getLabel" in widget && typeof widget.getLabel === "function") {
10
- return widget.getLabel() || null;
11
- }
12
- if ("getText" in widget && typeof widget.getText === "function") {
13
- return widget.getText() || null;
14
- }
15
- if ("getTitle" in widget && typeof widget.getTitle === "function") {
16
- return widget.getTitle() || null;
17
- }
18
- return getNativeInterface(widget, Gtk.Editable)?.getText() || null;
19
- };
20
- const collectDirectChildLabels = (widget) => {
21
- const labels = [];
22
- let child = widget.getFirstChild();
23
- while (child) {
24
- if (child.getAccessibleRole() === Gtk.AccessibleRole.LABEL) {
25
- const labelText = getLabelText(child);
26
- if (labelText)
27
- labels.push(labelText);
28
- }
29
- child = child.getNextSibling();
30
- }
31
- return labels;
32
- };
33
- const collectChildLabels = (widget) => {
34
- const labels = [];
35
- let child = widget.getFirstChild();
36
- while (child) {
37
- if (child.getAccessibleRole() === Gtk.AccessibleRole.LABEL) {
38
- const labelText = getLabelText(child);
39
- if (labelText)
40
- labels.push(labelText);
41
- }
42
- labels.push(...collectChildLabels(child));
43
- child = child.getNextSibling();
44
- }
45
- return labels;
46
- };
47
- /**
48
- * Returns the text content of a widget, analogous to RTL's getNodeText.
49
- *
50
- * Collects direct child GtkLabel text (treated as text nodes) and joins
51
- * them into a single string. Widget properties like getLabel(), getTitle(),
52
- * getText() are NOT included — those are attributes, not text content.
53
- *
54
- * @param widget - The widget to extract text from
55
- * @returns The joined text content or null if none found
56
- */
57
- export const getWidgetText = (widget) => {
58
- const role = widget.getAccessibleRole();
59
- if (role === undefined)
60
- return null;
61
- const childLabels = collectDirectChildLabels(widget);
62
- return childLabels.length > 0 ? childLabels.join("") : null;
63
- };
64
- /**
65
- * Returns the widget's own text from properties (getLabel, getText, getTitle).
66
- *
67
- * Used for display/debugging purposes (e.g., prettyWidget). This is
68
- * analogous to HTML attributes like aria-label, not text content.
69
- *
70
- * @param widget - The widget to extract property text from
71
- * @returns The property text or null if none found
72
- */
73
- export const getWidgetPropertyText = (widget) => {
74
- return getDefaultText(widget);
75
- };
76
- /**
77
- * Computes the accessible name of a widget for role-based queries.
78
- *
79
- * Uses the widget's own text properties first, then recursively collects
80
- * all descendant label text. This mirrors how ARIA accessible name
81
- * computation works in the DOM.
82
- *
83
- * @param widget - The widget to compute the accessible name for
84
- * @returns The accessible name or null if none found
85
- */
86
- export const getWidgetAccessibleName = (widget) => {
87
- const role = widget.getAccessibleRole();
88
- if (role === undefined)
89
- return null;
90
- if (role === Gtk.AccessibleRole.TAB_PANEL) {
91
- const parent = widget.getParent();
92
- if (parent) {
93
- const stack = parent;
94
- const page = stack.getPage?.(widget);
95
- if (page) {
96
- return page.getTitle() ?? null;
97
- }
98
- }
99
- return null;
100
- }
101
- const ownText = getDefaultText(widget);
102
- if (ownText)
103
- return ownText;
104
- const childLabels = collectChildLabels(widget);
105
- return childLabels.length > 0 ? childLabels.join(" ") : null;
106
- };
107
- /**
108
- * Gets the widget name (gtk_widget_get_name).
109
- *
110
- * @param widget - The widget to get the name from
111
- * @returns The widget name or null if not set
112
- */
113
- export const getWidgetName = (widget) => {
114
- return widget.getName();
115
- };
116
- /**
117
- * Gets the checked state from toggle-like widgets.
118
- *
119
- * @param widget - The widget to get the checked state from
120
- * @returns The checked state or null if not applicable
121
- */
122
- export const getWidgetCheckedState = (widget) => {
123
- const role = widget.getAccessibleRole();
124
- switch (role) {
125
- case Gtk.AccessibleRole.CHECKBOX:
126
- case Gtk.AccessibleRole.RADIO:
127
- return widget.getActive();
128
- case Gtk.AccessibleRole.TOGGLE_BUTTON:
129
- return widget.getActive();
130
- case Gtk.AccessibleRole.SWITCH:
131
- return widget.getActive();
132
- default:
133
- return null;
134
- }
135
- };
136
- /**
137
- * Gets the pressed state from toggle button widgets.
138
- *
139
- * @param widget - The widget to get the pressed state from
140
- * @returns The pressed state or null if not applicable
141
- */
142
- export const getWidgetPressedState = (widget) => {
143
- const role = widget.getAccessibleRole();
144
- if (role === Gtk.AccessibleRole.TOGGLE_BUTTON) {
145
- return widget.getActive();
146
- }
147
- return null;
148
- };
149
- /**
150
- * Gets the expanded state from expander widgets.
151
- *
152
- * @param widget - The widget to get the expanded state from
153
- * @returns The expanded state or null if not applicable
154
- */
155
- export const getWidgetExpandedState = (widget) => {
156
- if (widget instanceof Gtk.Expander) {
157
- return widget.getExpanded();
158
- }
159
- if (widget instanceof Gtk.TreeExpander) {
160
- return widget.getListRow()?.getExpanded() ?? null;
161
- }
162
- return null;
163
- };
164
- /**
165
- * Gets the selected state from selectable widgets.
166
- *
167
- * @param widget - The widget to get the selected state from
168
- * @returns The selected state or null if not applicable
169
- */
170
- export const getWidgetSelectedState = (widget) => {
171
- const role = widget.getAccessibleRole();
172
- if (role === Gtk.AccessibleRole.ROW) {
173
- return widget.isSelected();
174
- }
175
- return null;
176
- };
177
- //# sourceMappingURL=widget-text.js.map