Skip to content

Commit 9508b15

Browse files
authored
feat: Test utils API audit, additional feature coverage (RTL, grid nav, etc) in prep for RC/1.0 (#9998)
* add proper keyboard navigation to combobox * mutiple select for combobox, api rename for consitency, table keyboard select all * add tests for deselect * get rid of timer warnings cuz user gives a default if not provided * change getters into method calls for consistency also gives us the option of adding args in the future * update instances of old getters to new function calls * update instances of old getters to new function calls * switch to dom testing library this is a lower level than using react testing library of which we wernt really using anything unique from that library. trade off is that we need to wrap act so it works for other react versions, still not 100% sure if we wanna do this * support missing RTL for expand and keyboard nav * standardize indexOrText option naming * throw when attempting to interact with disabled rows and make error messages more descriptive * update readmes and docs to reflect change to testing-library/dom * more audit items * add tests to cover error messages * cleanup todos that we are punting on/not doing * add grid navigation to listbox test util and fix browser tests * add grid nav to gridlist too * add browser tests for each pattern to make sure utils work with it * adding midding dialog testing pages to RAC * add rough skills for the test utils * forgot to save * improvements to skill guidence and utils from attempt to use skill to convert tests * more improvements from second pass * add getter for table footer * formatting * update getter naming * update table util for rowgroups and table footer, update formatTargetNode, fix missing menu tests from bad merge * formatting * fix test from bad merge * add missing aria labels to browser tests * how did this not auto format * get rid of extraneous typing * review comments * update tests from main to new api
1 parent f178bc6 commit 9508b15

110 files changed

Lines changed: 3473 additions & 1847 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/@adobe/react-spectrum/docs/combobox/ComboBox.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,12 +1020,12 @@ it('ComboBox can select an option via keyboard', async function () {
10201020
let comboboxTester = testUtilUser.createTester('ComboBox', {root: getByTestId('test-combobox'), interactionType: 'keyboard'});
10211021

10221022
await comboboxTester.open();
1023-
expect(comboboxTester.listbox).toBeInTheDocument();
1023+
expect(comboboxTester.getListbox()).toBeInTheDocument();
10241024

1025-
let options = comboboxTester.options();
1026-
await comboboxTester.selectOption({option: options[0]});
1027-
expect(comboboxTester.combobox.value).toBe('One');
1028-
expect(comboboxTester.listbox).not.toBeInTheDocument();
1025+
let options = comboboxTester.getOptions();
1026+
await comboboxTester.toggleOptionSelection({option: options[0]});
1027+
expect(comboboxTester.getCombobox().value).toBe('One');
1028+
expect(comboboxTester.getListbox()).not.toBeInTheDocument();
10291029
});
10301030
```
10311031

packages/@adobe/react-spectrum/docs/list/ListView.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,17 +1218,17 @@ it('ListView can select a row via keyboard', async function () {
12181218
);
12191219
let gridListTester = testUtilUser.createTester('GridList', {root: getByTestId('test-gridlist'), interactionType: 'keyboard'});
12201220

1221-
let row = gridListTester.rows[0];
1221+
let row = gridListTester.getRows()[0];
12221222
expect(within(row).getByRole('checkbox')).not.toBeChecked();
1223-
expect(gridListTester.selectedRows).toHaveLength(0);
1223+
expect(gridListTester.getSelectedRows()).toHaveLength(0);
12241224

12251225
await gridListTester.toggleRowSelection({row: 0});
12261226
expect(within(row).getByRole('checkbox')).toBeChecked();
1227-
expect(gridListTester.selectedRows).toHaveLength(1);
1227+
expect(gridListTester.getSelectedRows()).toHaveLength(1);
12281228

12291229
await gridListTester.toggleRowSelection({row: 0});
12301230
expect(within(row).getByRole('checkbox')).not.toBeChecked();
1231-
expect(gridListTester.selectedRows).toHaveLength(0);
1231+
expect(gridListTester.getSelectedRows()).toHaveLength(0);
12321232
});
12331233
```
12341234

packages/@adobe/react-spectrum/docs/listbox/ListBox.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,7 @@ it('ListBox can select an option via keyboard', async function () {
437437
let listboxTester = testUtilUser.createTester('ListBox', {root: getByTestId('test-listbox'), interactionType: 'keyboard'});
438438

439439
await listboxTester.toggleOptionSelection({option: 4});
440-
expect(listboxTester.options()[4]).toHaveAttribute('aria-selected', 'true');
440+
expect(listboxTester.getOptions()[4]).toHaveAttribute('aria-selected', 'true');
441441
});
442442
```
443443

packages/@adobe/react-spectrum/docs/menu/MenuTrigger.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,16 +285,16 @@ it('Menu can open its submenu via keyboard', async function () {
285285
let menuTester = testUtilUser.createTester('Menu', {root: getByTestId('test-menutrigger'), interactionType: 'keyboard'});
286286

287287
await menuTester.open();
288-
expect(menuTester.menu).toBeInTheDocument();
289-
let submenuTriggers = menuTester.submenuTriggers;
288+
expect(menuTester.getMenu()).toBeInTheDocument();
289+
let submenuTriggers = menuTester.getSubmenuTriggers();
290290
expect(submenuTriggers).toHaveLength(1);
291291

292292
let submenuTester = await menuTester.openSubmenu({submenuTrigger: 'Share…'});
293-
expect(submenuTester.menu).toBeInTheDocument();
293+
expect(submenuTester.getMenu()).toBeInTheDocument();
294294

295-
await submenuTester.selectOption({option: submenuTester.options()[0]});
296-
expect(submenuTester.menu).not.toBeInTheDocument();
297-
expect(menuTester.menu).not.toBeInTheDocument();
295+
await submenuTester.toggleOptionSelection({option: submenuTester.getOptions()[0]});
296+
expect(submenuTester.getMenu()).not.toBeInTheDocument();
297+
expect(menuTester.getMenu()).not.toBeInTheDocument();
298298
});
299299
```
300300

packages/@adobe/react-spectrum/docs/picker/Picker.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -600,10 +600,10 @@ it('Picker can select an option via keyboard', async function () {
600600
</Provider>
601601
);
602602
let selectTester = testUtilUser.createTester('Select', {root: getByTestId('test-select'), interactionType: 'keyboard'});
603-
let trigger = selectTester.trigger;
603+
let trigger = selectTester.getTrigger();
604604
expect(trigger).toHaveTextContent('Select…');
605605

606-
await selectTester.selectOption({option: 'Cat'});
606+
await selectTester.toggleOptionSelection({option: 'Cat'});
607607
expect(trigger).toHaveTextContent('Cat');
608608
});
609609
```

packages/@adobe/react-spectrum/docs/table/TableView.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1986,22 +1986,22 @@ it('TableView can toggle row selection', async function () {
19861986
</Provider>
19871987
);
19881988
let tableTester = testUtilUser.createTester('Table', {root: getByTestId('test-table')});
1989-
expect(tableTester.selectedRows).toHaveLength(0);
1989+
expect(tableTester.getSelectedRows()).toHaveLength(0);
19901990

19911991
await tableTester.toggleSelectAll();
1992-
expect(tableTester.selectedRows).toHaveLength(10);
1992+
expect(tableTester.getSelectedRows()).toHaveLength(10);
19931993

19941994
await tableTester.toggleRowSelection({row: 2});
1995-
expect(tableTester.selectedRows).toHaveLength(9);
1996-
let checkbox = within(tableTester.rows[2]).getByRole('checkbox');
1995+
expect(tableTester.getSelectedRows()).toHaveLength(9);
1996+
let checkbox = within(tableTester.getRows()[2]).getByRole('checkbox');
19971997
expect(checkbox).not.toBeChecked();
19981998

19991999
await tableTester.toggleSelectAll();
2000-
expect(tableTester.selectedRows).toHaveLength(10);
2000+
expect(tableTester.getSelectedRows()).toHaveLength(10);
20012001
expect(checkbox).toBeChecked();
20022002

20032003
await tableTester.toggleSelectAll();
2004-
expect(tableTester.selectedRows).toHaveLength(0);
2004+
expect(tableTester.getSelectedRows()).toHaveLength(0);
20052005
});
20062006
```
20072007

packages/@adobe/react-spectrum/docs/tabs/Tabs.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -662,11 +662,11 @@ it('Tabs can change selection via keyboard', async function () {
662662
);
663663
let tabsTester = testUtilUser.createTester('Tabs', {root: getByTestId('test-tabs'), interactionType: 'keyboard'});
664664

665-
let tabs = tabsTester.tabs;
666-
expect(tabsTester.selectedTab).toBe(tabs[0]);
665+
let tabs = tabsTester.getTabs();
666+
expect(tabsTester.getSelectedTab()).toBe(tabs[0]);
667667

668668
await tabsTester.triggerTab({tab: 1});
669-
expect(tabsTester.selectedTab).toBe(tabs[1]);
669+
expect(tabsTester.getSelectedTab()).toBe(tabs[1]);
670670
});
671671
```
672672

packages/@adobe/react-spectrum/docs/tree/TreeView.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -557,16 +557,16 @@ it('TreeView can select a row via keyboard', async function () {
557557
let treeTester = testUtilUser.createTester('Tree', {root: getByTestId('test-tree'), interactionType: 'keyboard'});
558558

559559
await treeTester.toggleRowSelection({row: 0});
560-
expect(treeTester.selectedRows).toHaveLength(1);
561-
expect(within(treeTester.rows[0]).getByRole('checkbox')).toBeChecked();
560+
expect(treeTester.getSelectedRows()).toHaveLength(1);
561+
expect(within(treeTester.getRows()[0]).getByRole('checkbox')).toBeChecked();
562562

563563
await treeTester.toggleRowSelection({row: 1});
564-
expect(treeTester.selectedRows).toHaveLength(2);
565-
expect(within(treeTester.rows[1]).getByRole('checkbox')).toBeChecked();
564+
expect(treeTester.getSelectedRows()).toHaveLength(2);
565+
expect(within(treeTester.getRows()[1]).getByRole('checkbox')).toBeChecked();
566566

567567
await treeTester.toggleRowSelection({row: 0});
568-
expect(treeTester.selectedRows).toHaveLength(1);
569-
expect(within(treeTester.rows[0]).getByRole('checkbox')).not.toBeChecked();
568+
expect(treeTester.getSelectedRows()).toHaveLength(1);
569+
expect(within(treeTester.getRows()[0]).getByRole('checkbox')).not.toBeChecked();
570570
});
571571
```
572572

packages/@adobe/react-spectrum/test/checkbox/CheckboxGroup.test.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -889,32 +889,32 @@ describe('CheckboxGroup', () => {
889889
let checkboxGroupTester = testUtilUser.createTester('CheckboxGroup', {
890890
root: getByRole('group')
891891
});
892-
expect(checkboxGroupTester.checkboxgroup).toHaveAttribute('role');
893-
let checkboxes = checkboxGroupTester.checkboxes;
892+
expect(checkboxGroupTester.getCheckboxGroup()).toHaveAttribute('role');
893+
let checkboxes = checkboxGroupTester.getCheckboxes();
894894
await checkboxGroupTester.toggleCheckbox({checkbox: checkboxes[0]});
895895
expect(checkboxes[0]).toBeChecked();
896-
expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(1);
896+
expect(checkboxGroupTester.getSelectedCheckboxes()).toHaveLength(1);
897897

898898
await checkboxGroupTester.toggleCheckbox({checkbox: 4, interactionType: 'keyboard'});
899899
expect(checkboxes[4]).toBeChecked();
900-
expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(2);
900+
expect(checkboxGroupTester.getSelectedCheckboxes()).toHaveLength(2);
901901

902-
let checkbox4 = checkboxGroupTester.findCheckbox({checkboxIndexOrText: 3});
902+
let checkbox4 = checkboxGroupTester.findCheckbox({indexOrText: 3});
903903
await checkboxGroupTester.toggleCheckbox({
904904
checkbox: checkbox4,
905905
interactionType: 'keyboard'
906906
});
907907
expect(checkboxes[3]).toBeChecked();
908-
expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(3);
908+
expect(checkboxGroupTester.getSelectedCheckboxes()).toHaveLength(3);
909909

910910
await checkboxGroupTester.toggleCheckbox({checkbox: 'Soccer', interactionType: 'keyboard'});
911911
expect(checkboxes[0]).not.toBeChecked();
912-
expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(2);
912+
expect(checkboxGroupTester.getSelectedCheckboxes()).toHaveLength(2);
913913

914-
let checkbox5 = checkboxGroupTester.findCheckbox({checkboxIndexOrText: 'Rugby'});
914+
let checkbox5 = checkboxGroupTester.findCheckbox({indexOrText: 'Rugby'});
915915
await checkboxGroupTester.toggleCheckbox({checkbox: checkbox5, interactionType: 'mouse'});
916916
expect(checkboxes[4]).not.toBeChecked();
917-
expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(1);
917+
expect(checkboxGroupTester.getSelectedCheckboxes()).toHaveLength(1);
918918
}
919919
);
920920
});

0 commit comments

Comments
 (0)