aria-ease 6.11.0 → 6.12.1
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.
- package/README.md +3 -3
- package/dist/{ComboboxComponentStrategy-OGRVZXAF.js → ComboboxComponentStrategy-DU342VMB.js} +7 -7
- package/dist/RelativeTargetResolver-DJAITO6D.js +7 -0
- package/dist/{audit-RM6TCZ5C.js → audit-JYEPKLHR.js} +5 -0
- package/dist/{chunk-XERMSYEH.js → chunk-4DU5Z5BR.js} +0 -23
- package/dist/{chunk-NI3MQCAS.js → chunk-GJGUY643.js} +2 -2
- package/dist/chunk-GLT43UVH.js +43 -0
- package/dist/cli.cjs +147 -84
- package/dist/cli.js +5 -5
- package/dist/{configLoader-DWHOHXHL.js → configLoader-Q7N5XV4P.js} +2 -2
- package/dist/{configLoader-UJZHQBYS.js → configLoader-REHK3S3Q.js} +1 -1
- package/dist/{contractTestRunnerPlaywright-QDXSK3FE.js → contractTestRunnerPlaywright-H24LQ45R.js} +113 -72
- package/dist/{contractTestRunnerPlaywright-WNWQYSXZ.js → contractTestRunnerPlaywright-NL3JNJYH.js} +113 -72
- package/dist/index.cjs +248 -112
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +124 -41
- package/dist/src/combobox/index.cjs +1 -0
- package/dist/src/combobox/index.js +1 -0
- package/dist/src/utils/test/{ComboboxComponentStrategy-5AECQSRN.js → ComboboxComponentStrategy-XKQ72RFD.js} +7 -7
- package/dist/src/utils/test/RelativeTargetResolver-G2XDN2VV.js +1 -0
- package/dist/src/utils/test/{chunk-XERMSYEH.js → chunk-4DU5Z5BR.js} +1 -23
- package/dist/src/utils/test/chunk-GLT43UVH.js +41 -0
- package/dist/src/utils/test/{configLoader-SHJSRG2A.js → configLoader-NA7IBCS3.js} +2 -2
- package/dist/src/utils/test/{contractTestRunnerPlaywright-Z2AHXSNM.js → contractTestRunnerPlaywright-5FT6K2WN.js} +111 -71
- package/dist/src/utils/test/dsl/index.cjs +106 -29
- package/dist/src/utils/test/dsl/index.d.cts +3 -0
- package/dist/src/utils/test/dsl/index.d.ts +3 -0
- package/dist/src/utils/test/dsl/index.js +106 -29
- package/dist/src/utils/test/index.cjs +135 -76
- package/dist/src/utils/test/index.js +17 -11
- package/dist/{test-O3J4ZPQR.js → test-FYSJXQWO.js} +17 -12
- package/package.json +3 -4
- package/dist/src/utils/test/aria-contracts/accordion/accordion.contract.json +0 -290
- package/dist/src/utils/test/aria-contracts/combobox/combobox.listbox.contract.json +0 -463
- package/dist/src/utils/test/aria-contracts/menu/menu.contract.json +0 -562
- package/dist/src/utils/test/aria-contracts/tabs/tabs.contract.json +0 -361
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"meta": {
|
|
3
|
-
"id": "aria-ease.contract.combobox.listbox",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"created": "11-02-2026",
|
|
6
|
-
"lastUpdated": "19-03-2026",
|
|
7
|
-
"description": "ARIA Combobox with Listbox popup interaction contract. Validates the ARIA and interaction contract for a custom combobox with listbox component following the ARIA Authoring Practices Guide combobox with listbox popup pattern.",
|
|
8
|
-
"source": {
|
|
9
|
-
"apg": "https://www.w3.org/WAI/ARIA/apg/patterns/combobox/",
|
|
10
|
-
"wcag": ["2.2 AA"]
|
|
11
|
-
},
|
|
12
|
-
"W3CName": "Combobox Listbox Popup"
|
|
13
|
-
},
|
|
14
|
-
|
|
15
|
-
"selectors": {
|
|
16
|
-
"input": "[role=combobox]",
|
|
17
|
-
"button": "button[tabindex='-1'], [role=button][tabindex='-1']",
|
|
18
|
-
"listbox": "[role=listbox]",
|
|
19
|
-
"options": "[role=option]",
|
|
20
|
-
"focusable": "[role=combobox]",
|
|
21
|
-
"relative": "[role=option]",
|
|
22
|
-
"popup": "[role=listbox]"
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
"observables": {
|
|
26
|
-
"observable": "focus | visible | attribute | role",
|
|
27
|
-
"target": "input | button | listbox | options | relative",
|
|
28
|
-
"relative": "first | last | next | previous"
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
"relationships": [
|
|
32
|
-
{
|
|
33
|
-
"type": "aria-reference",
|
|
34
|
-
"from": "input",
|
|
35
|
-
"attribute": "aria-controls",
|
|
36
|
-
"to": "listbox"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"type": "contains",
|
|
40
|
-
"parent": "listbox",
|
|
41
|
-
"child": "options"
|
|
42
|
-
}
|
|
43
|
-
],
|
|
44
|
-
|
|
45
|
-
"static": [
|
|
46
|
-
{
|
|
47
|
-
"assertions": [
|
|
48
|
-
{
|
|
49
|
-
"target": "input",
|
|
50
|
-
"assertion": "toHaveAttribute",
|
|
51
|
-
"attribute": "role",
|
|
52
|
-
"expectedValue": "combobox",
|
|
53
|
-
"failureMessage": "Combobox input doesn't conform to the ARIA Combobox pattern as specified in APG 1.2. Input element should have 'role=combobox' attribute."
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"target": "input",
|
|
57
|
-
"assertion": "toHaveAttribute",
|
|
58
|
-
"attribute": "aria-autocomplete",
|
|
59
|
-
"expectedValue": "list | both | inline | none",
|
|
60
|
-
"failureMessage": "Combobox input doesn't conform to the ARIA Combobox pattern. Input should have 'aria-autocomplete' attribute to indicate the type of autocomplete interaction."
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"target": "input",
|
|
64
|
-
"assertion": "toHaveAttribute",
|
|
65
|
-
"attribute": "aria-controls",
|
|
66
|
-
"expectedValue": "!empty",
|
|
67
|
-
"failureMessage": "Combobox input doesn't conform to the ARIA Combobox pattern. Input should have 'aria-controls' attribute that points to the id of the listbox it controls."
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"target": "input",
|
|
71
|
-
"assertion": "toHaveAttribute",
|
|
72
|
-
"attribute": "aria-expanded",
|
|
73
|
-
"expectedValue": "true | false",
|
|
74
|
-
"failureMessage": "Combobox input doesn't conform to the ARIA Combobox pattern. Input should have 'aria-expanded' attribute to indicate whether the listbox is displayed."
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"target": "input",
|
|
78
|
-
"assertion": "toHaveAttribute",
|
|
79
|
-
"attribute": "aria-haspopup",
|
|
80
|
-
"expectedValue": "listbox",
|
|
81
|
-
"failureMessage": "Combobox input should have 'aria-haspopup=listbox' to indicate that it can trigger a listbox popup."
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"target": "options",
|
|
85
|
-
"assertion": "toHaveAttribute",
|
|
86
|
-
"attribute": "aria-selected",
|
|
87
|
-
"expectedValue": "true | false",
|
|
88
|
-
"failureMessage": "Each listbox option should have 'aria-selected' attribute to indicate selection state."
|
|
89
|
-
}
|
|
90
|
-
]
|
|
91
|
-
}
|
|
92
|
-
],
|
|
93
|
-
|
|
94
|
-
"dynamic": [
|
|
95
|
-
{
|
|
96
|
-
"description": "Pressing Down Arrow on closed combobox opens the listbox without selecting first item.",
|
|
97
|
-
"action": [
|
|
98
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" }
|
|
99
|
-
],
|
|
100
|
-
"assertions": [
|
|
101
|
-
{
|
|
102
|
-
"target": "listbox",
|
|
103
|
-
"assertion": "toBeVisible",
|
|
104
|
-
"failureMessage": "Listbox should be visible after pressing Down Arrow on closed combobox."
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
"target": "input",
|
|
108
|
-
"assertion": "toHaveAttribute",
|
|
109
|
-
"attribute": "aria-expanded",
|
|
110
|
-
"expectedValue": "true",
|
|
111
|
-
"failureMessage": "Combobox input's should have aria-expanded=true after pressing Down Arrow."
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"target": "input",
|
|
115
|
-
"assertion": "toHaveAttribute",
|
|
116
|
-
"attribute": "aria-activedescendant",
|
|
117
|
-
"expectedValue": "",
|
|
118
|
-
"failureMessage": "First Down Arrow should open listbox without setting active descendant (no item selected yet)."
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"description": "Second Down Arrow press navigates to first listbox option.",
|
|
124
|
-
"action": [
|
|
125
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
126
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" }
|
|
127
|
-
],
|
|
128
|
-
"assertions": [
|
|
129
|
-
{
|
|
130
|
-
"target": "input",
|
|
131
|
-
"assertion": "toHaveAttribute",
|
|
132
|
-
"attribute": "aria-activedescendant",
|
|
133
|
-
"expectedValue": "!empty",
|
|
134
|
-
"failureMessage": "Second Down Arrow should set first listbox option as active descendant."
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
"target": "relative",
|
|
138
|
-
"assertion": "toHaveAttribute",
|
|
139
|
-
"attribute": "aria-selected",
|
|
140
|
-
"expectedValue": "true",
|
|
141
|
-
"relativeTarget": "first",
|
|
142
|
-
"failureMessage": "First listbox option should have aria-selected=true after second Down Arrow."
|
|
143
|
-
}
|
|
144
|
-
]
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
"description": "Down Arrow navigates to next listbox option with wrapping.",
|
|
148
|
-
"action": [
|
|
149
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
150
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
151
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" }
|
|
152
|
-
],
|
|
153
|
-
"assertions": [
|
|
154
|
-
{
|
|
155
|
-
"target": "relative",
|
|
156
|
-
"assertion": "toHaveAttribute",
|
|
157
|
-
"attribute": "aria-selected",
|
|
158
|
-
"expectedValue": "true",
|
|
159
|
-
"relativeTarget": "second",
|
|
160
|
-
"failureMessage": "Second listbox option should be selected after third Down Arrow."
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
"description": "Up Arrow does not open closed listbox.",
|
|
166
|
-
"action": [
|
|
167
|
-
{ "type": "keypress", "target": "input", "key": "ArrowUp" }
|
|
168
|
-
],
|
|
169
|
-
"assertions": [
|
|
170
|
-
{
|
|
171
|
-
"target": "input",
|
|
172
|
-
"assertion": "toHaveAttribute",
|
|
173
|
-
"attribute": "aria-expanded",
|
|
174
|
-
"expectedValue": "false",
|
|
175
|
-
"failureMessage": "Up Arrow should not open a closed listbox. Combobox input should have aria-expanded=false."
|
|
176
|
-
}
|
|
177
|
-
]
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
"description": "Up Arrow navigates to previous option when listbox is open.",
|
|
181
|
-
"action": [
|
|
182
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
183
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
184
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
185
|
-
{ "type": "keypress", "target": "input", "key": "ArrowUp" }
|
|
186
|
-
],
|
|
187
|
-
"assertions": [
|
|
188
|
-
{
|
|
189
|
-
"target": "relative",
|
|
190
|
-
"assertion": "toHaveAttribute",
|
|
191
|
-
"attribute": "aria-selected",
|
|
192
|
-
"expectedValue": "true",
|
|
193
|
-
"relativeTarget": "first",
|
|
194
|
-
"failureMessage": "First listbox option should be selected after navigating down then up."
|
|
195
|
-
}
|
|
196
|
-
]
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
"description": "Home navigates to first listbox option.",
|
|
200
|
-
"level": "optional",
|
|
201
|
-
"action": [
|
|
202
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
203
|
-
{ "type": "keypress", "target": "input", "key": "End" },
|
|
204
|
-
{ "type": "keypress", "target": "input", "key": "Home" }
|
|
205
|
-
],
|
|
206
|
-
"assertions": [
|
|
207
|
-
{
|
|
208
|
-
"target": "relative",
|
|
209
|
-
"assertion": "toHaveAttribute",
|
|
210
|
-
"attribute": "aria-selected",
|
|
211
|
-
"expectedValue": "true",
|
|
212
|
-
"relativeTarget": "first",
|
|
213
|
-
"failureMessage": "Home should navigate to first listbox option."
|
|
214
|
-
}
|
|
215
|
-
]
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
"description": "End navigates to last listbox option.",
|
|
219
|
-
"level": "optional",
|
|
220
|
-
"action": [
|
|
221
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
222
|
-
{ "type": "keypress", "target": "input", "key": "End" }
|
|
223
|
-
],
|
|
224
|
-
"assertions": [
|
|
225
|
-
{
|
|
226
|
-
"target": "relative",
|
|
227
|
-
"assertion": "toHaveAttribute",
|
|
228
|
-
"attribute": "aria-selected",
|
|
229
|
-
"expectedValue": "true",
|
|
230
|
-
"relativeTarget": "last",
|
|
231
|
-
"failureMessage": "End should navigate to last listbox option."
|
|
232
|
-
}
|
|
233
|
-
]
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
"description": "Enter selects active option and closes listbox.",
|
|
237
|
-
"action": [
|
|
238
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
239
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
240
|
-
{ "type": "keypress", "target": "input", "key": "Enter" }
|
|
241
|
-
],
|
|
242
|
-
"assertions": [
|
|
243
|
-
{
|
|
244
|
-
"target": "listbox",
|
|
245
|
-
"assertion": "notToBeVisible",
|
|
246
|
-
"failureMessage": "Listbox should close after selecting option with Enter."
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
"target": "input",
|
|
250
|
-
"assertion": "toHaveAttribute",
|
|
251
|
-
"attribute": "aria-expanded",
|
|
252
|
-
"expectedValue": "false",
|
|
253
|
-
"failureMessage": "Combobox input's should have aria-expanded=false after selection."
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
"target": "input",
|
|
257
|
-
"assertion": "toHaveValue",
|
|
258
|
-
"expectedValue": "!empty",
|
|
259
|
-
"failureMessage": "Combobox input should contain the selected option's text."
|
|
260
|
-
}
|
|
261
|
-
]
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
"description": "Escape closes open listbox.",
|
|
265
|
-
"action": [
|
|
266
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
267
|
-
{ "type": "keypress", "target": "input", "key": "Escape" }
|
|
268
|
-
],
|
|
269
|
-
"assertions": [
|
|
270
|
-
{
|
|
271
|
-
"target": "listbox",
|
|
272
|
-
"assertion": "notToBeVisible",
|
|
273
|
-
"failureMessage": "Listbox should close after pressing Escape."
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
"target": "input",
|
|
277
|
-
"assertion": "toHaveAttribute",
|
|
278
|
-
"attribute": "aria-expanded",
|
|
279
|
-
"expectedValue": "false",
|
|
280
|
-
"failureMessage": "Combobox input's should have aria-expanded=false after Escape."
|
|
281
|
-
}
|
|
282
|
-
]
|
|
283
|
-
},
|
|
284
|
-
{
|
|
285
|
-
"description": "Escape clears input value when listbox is closed.",
|
|
286
|
-
"action": [
|
|
287
|
-
{ "type": "type", "target": "input", "value": "test" },
|
|
288
|
-
{ "type": "keypress", "target": "input", "key": "Escape" }
|
|
289
|
-
],
|
|
290
|
-
"assertions": [
|
|
291
|
-
{
|
|
292
|
-
"target": "input",
|
|
293
|
-
"assertion": "toHaveValue",
|
|
294
|
-
"expectedValue": "",
|
|
295
|
-
"failureMessage": "Escape should clear Combobox input value when listbox is closed."
|
|
296
|
-
}
|
|
297
|
-
]
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
"description": "Tab closes the listbox.",
|
|
301
|
-
"action": [
|
|
302
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
303
|
-
{ "type": "keypress", "target": "input", "key": "Tab" }
|
|
304
|
-
],
|
|
305
|
-
"assertions": [
|
|
306
|
-
{
|
|
307
|
-
"target": "input",
|
|
308
|
-
"assertion": "toHaveAttribute",
|
|
309
|
-
"attribute": "aria-expanded",
|
|
310
|
-
"expectedValue": "false",
|
|
311
|
-
"failureMessage": "Tab should close the listbox, and should have aria-expanded=false."
|
|
312
|
-
}
|
|
313
|
-
]
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
"description": "Clicking option selects it and closes listbox.",
|
|
317
|
-
"action": [
|
|
318
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
319
|
-
{ "type": "click", "target": "relative", "relativeTarget": "first" }
|
|
320
|
-
],
|
|
321
|
-
"assertions": [
|
|
322
|
-
{
|
|
323
|
-
"target": "listbox",
|
|
324
|
-
"assertion": "notToBeVisible",
|
|
325
|
-
"failureMessage": "Listbox should close after clicking an option."
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
"target": "input",
|
|
329
|
-
"assertion": "toHaveAttribute",
|
|
330
|
-
"attribute": "aria-expanded",
|
|
331
|
-
"expectedValue": "false",
|
|
332
|
-
"failureMessage": "Combobox input's should have aria-expanded=false after clicking option."
|
|
333
|
-
},
|
|
334
|
-
{
|
|
335
|
-
"target": "input",
|
|
336
|
-
"assertion": "toHaveValue",
|
|
337
|
-
"expectedValue": "!empty",
|
|
338
|
-
"failureMessage": "Combobox input should contain the clicked option's text."
|
|
339
|
-
}
|
|
340
|
-
]
|
|
341
|
-
},
|
|
342
|
-
{
|
|
343
|
-
"description": "Mouse hover sets aria-selected on hovered listbox option.",
|
|
344
|
-
"action": [
|
|
345
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
346
|
-
{ "type": "hover", "target": "relative", "relativeTarget": "second" }
|
|
347
|
-
],
|
|
348
|
-
"assertions": [
|
|
349
|
-
{
|
|
350
|
-
"target": "relative",
|
|
351
|
-
"assertion": "toHaveAttribute",
|
|
352
|
-
"attribute": "aria-selected",
|
|
353
|
-
"expectedValue": "true",
|
|
354
|
-
"relativeTarget": "second",
|
|
355
|
-
"failureMessage": "Hovered listbox option should have aria-selected=true."
|
|
356
|
-
}
|
|
357
|
-
]
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
"description": "Clicking outside closes the listbox.",
|
|
361
|
-
"action": [
|
|
362
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
363
|
-
{ "type": "click", "target": "document" }
|
|
364
|
-
],
|
|
365
|
-
"assertions": [
|
|
366
|
-
{
|
|
367
|
-
"target": "listbox",
|
|
368
|
-
"assertion": "notToBeVisible",
|
|
369
|
-
"failureMessage": "Listbox should close after clicking outside."
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
"target": "input",
|
|
373
|
-
"assertion": "toHaveAttribute",
|
|
374
|
-
"attribute": "aria-expanded",
|
|
375
|
-
"expectedValue": "false",
|
|
376
|
-
"failureMessage": "Combobox input's should have aria-expanded=false after clicking outside."
|
|
377
|
-
}
|
|
378
|
-
]
|
|
379
|
-
},
|
|
380
|
-
{
|
|
381
|
-
"description": "Toggle button opens and closes listbox.",
|
|
382
|
-
"action": [
|
|
383
|
-
{ "type": "click", "target": "button" }
|
|
384
|
-
],
|
|
385
|
-
"assertions": [
|
|
386
|
-
{
|
|
387
|
-
"target": "listbox",
|
|
388
|
-
"assertion": "toBeVisible",
|
|
389
|
-
"failureMessage": "Listbox should be visible after clicking toggle button."
|
|
390
|
-
},
|
|
391
|
-
{
|
|
392
|
-
"target": "input",
|
|
393
|
-
"assertion": "toHaveAttribute",
|
|
394
|
-
"attribute": "aria-expanded",
|
|
395
|
-
"expectedValue": "true",
|
|
396
|
-
"failureMessage": "Combobox input's should have aria-expanded=true after clicking button."
|
|
397
|
-
},
|
|
398
|
-
{
|
|
399
|
-
"target": "input",
|
|
400
|
-
"assertion": "toHaveFocus",
|
|
401
|
-
"failureMessage": "Combobox input should have focus after clicking toggle button."
|
|
402
|
-
}
|
|
403
|
-
]
|
|
404
|
-
},
|
|
405
|
-
{
|
|
406
|
-
"description": "Toggle button closes open listbox when clicked again.",
|
|
407
|
-
"action": [
|
|
408
|
-
{ "type": "click", "target": "button" },
|
|
409
|
-
{ "type": "click", "target": "button" }
|
|
410
|
-
],
|
|
411
|
-
"assertions": [
|
|
412
|
-
{
|
|
413
|
-
"target": "listbox",
|
|
414
|
-
"assertion": "notToBeVisible",
|
|
415
|
-
"failureMessage": "Listbox should close after clicking toggle button twice."
|
|
416
|
-
},
|
|
417
|
-
{
|
|
418
|
-
"target": "input",
|
|
419
|
-
"assertion": "toHaveAttribute",
|
|
420
|
-
"attribute": "aria-expanded",
|
|
421
|
-
"expectedValue": "false",
|
|
422
|
-
"failureMessage": "Combobox input's should have aria-expanded=false after toggling closed."
|
|
423
|
-
}
|
|
424
|
-
]
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
"description": "Navigation wraps from last to first listbox option on Down Arrow.",
|
|
428
|
-
"action": [
|
|
429
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
430
|
-
{ "type": "keypress", "target": "input", "key": "End" },
|
|
431
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" }
|
|
432
|
-
],
|
|
433
|
-
"assertions": [
|
|
434
|
-
{
|
|
435
|
-
"target": "relative",
|
|
436
|
-
"assertion": "toHaveAttribute",
|
|
437
|
-
"attribute": "aria-selected",
|
|
438
|
-
"expectedValue": "true",
|
|
439
|
-
"relativeTarget": "first",
|
|
440
|
-
"failureMessage": "Navigation should wrap from last to first listbox option on Down Arrow."
|
|
441
|
-
}
|
|
442
|
-
]
|
|
443
|
-
},
|
|
444
|
-
{
|
|
445
|
-
"description": "Navigation wraps from first to last listbox option on Up Arrow.",
|
|
446
|
-
"action": [
|
|
447
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
448
|
-
{ "type": "keypress", "target": "input", "key": "ArrowDown" },
|
|
449
|
-
{ "type": "keypress", "target": "input", "key": "ArrowUp" }
|
|
450
|
-
],
|
|
451
|
-
"assertions": [
|
|
452
|
-
{
|
|
453
|
-
"target": "relative",
|
|
454
|
-
"assertion": "toHaveAttribute",
|
|
455
|
-
"attribute": "aria-selected",
|
|
456
|
-
"expectedValue": "true",
|
|
457
|
-
"relativeTarget": "last",
|
|
458
|
-
"failureMessage": "Navigation should wrap from first to last listbox option on Up Arrow."
|
|
459
|
-
}
|
|
460
|
-
]
|
|
461
|
-
}
|
|
462
|
-
]
|
|
463
|
-
}
|