|
| 1 | +import {render} from './helpers/test-utils' |
| 2 | + |
| 3 | +test('`selected` throws on unsupported roles', () => { |
| 4 | + const {getByRole} = render(`<input aria-selected="true" type="text">`) |
| 5 | + expect(() => |
| 6 | + getByRole('textbox', {selected: true}), |
| 7 | + ).toThrowErrorMatchingInlineSnapshot( |
| 8 | + `"\\"aria-selected\\" is not supported on role \\"textbox\\"."`, |
| 9 | + ) |
| 10 | +}) |
| 11 | + |
| 12 | +test('`selected: true` matches `aria-selected="true"` on supported roles', () => { |
| 13 | + const {getAllByRole} = render(` |
| 14 | +<select> |
| 15 | + <option selected id="selected-native-option" /> |
| 16 | + <option id="unselected-native-option" /> |
| 17 | +</select> |
| 18 | +<div role="listbox"> |
| 19 | + <div role="option" aria-selected="true" id="selected-listbox-option" /> |
| 20 | + <div role="option" aria-selected="false" id="unselected-listbox-option" /> |
| 21 | + <div role="option" id="not-selectable-listbox-option" /> |
| 22 | +</div> |
| 23 | +<div role="tree"> |
| 24 | + <div role="treeitem" aria-selected="true" id="selected-treeitem" /> |
| 25 | + <div role="treeitem" aria-selected="false" id="unselected-treeitem" /> |
| 26 | + <div role="treeitem" id="not-selectable-treeitem" /> |
| 27 | +</div> |
| 28 | +<table> |
| 29 | + <thead> |
| 30 | + <tr> |
| 31 | + <th scope="col" aria-selected="true" id="selected-native-columnheader" /> |
| 32 | + <div role="columnheader" aria-selected="true" id="selected-columnheader" /> |
| 33 | + <th scope="col" id="unselected-native-columnheader" /> |
| 34 | + </tr> |
| 35 | + </thead> |
| 36 | + <tbody> |
| 37 | + <tr> |
| 38 | + <th scope="row" aria-selected="true" id="selected-native-rowheader" /> |
| 39 | + <td /> |
| 40 | + <td /> |
| 41 | + </tr> |
| 42 | + <tr> |
| 43 | + <div role="rowheader" aria-selected="true" id="selected-rowheader" /> |
| 44 | + <td /> |
| 45 | + <td /> |
| 46 | + </tr> |
| 47 | + </tbody> |
| 48 | +</table> |
| 49 | +<div role="grid"> |
| 50 | + <div role="gridcell" aria-selected="true" id="selected-gridcell" /> |
| 51 | + <div role="gridcell" aria-selected="false" id="unselected-gridcell" /> |
| 52 | + <div role="gridcell" id="not-selectable-gridcell" /> |
| 53 | +</div> |
| 54 | +<div role="tablist"> |
| 55 | + <div role="tab" aria-selected="true" id="selected-tab" /> |
| 56 | + <div role="tab" aria-selected="false" id= "unselected-tab" /> |
| 57 | + <div role="tab" id="unselectable-tab" /> |
| 58 | +</div> |
| 59 | +`) |
| 60 | + |
| 61 | + expect( |
| 62 | + getAllByRole('columnheader', {selected: true}).map(({id}) => id), |
| 63 | + ).toEqual(['selected-native-columnheader', 'selected-columnheader']) |
| 64 | + |
| 65 | + expect(getAllByRole('gridcell', {selected: true}).map(({id}) => id)).toEqual([ |
| 66 | + 'selected-gridcell', |
| 67 | + ]) |
| 68 | + |
| 69 | + expect(getAllByRole('option', {selected: true}).map(({id}) => id)).toEqual([ |
| 70 | + 'selected-native-option', |
| 71 | + 'selected-listbox-option', |
| 72 | + ]) |
| 73 | + |
| 74 | + expect( |
| 75 | + getAllByRole('rowheader', {selected: true}).map(({id}) => id), |
| 76 | + ).toEqual(['selected-rowheader', 'selected-native-rowheader']) |
| 77 | + |
| 78 | + expect(getAllByRole('treeitem', {selected: true}).map(({id}) => id)).toEqual([ |
| 79 | + 'selected-treeitem', |
| 80 | + ]) |
| 81 | + |
| 82 | + expect(getAllByRole('tab', {selected: true}).map(({id}) => id)).toEqual([ |
| 83 | + 'selected-tab', |
| 84 | + ]) |
| 85 | +}) |
0 commit comments