Skip to content

Commit 9edcd16

Browse files
authored
feat: byA11yValue matcher (#262)
1 parent 960080d commit 9edcd16

File tree

5 files changed

+77
-1
lines changed

5 files changed

+77
-1
lines changed

src/__tests__/a11yAPI.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Button extends React.Component<any> {
3333
accessibilityRole={TEXT_ROLE}
3434
accessibilityStates={['selected']}
3535
accessibilityState={{ expanded: false, selected: true }}
36+
accessibilityValue={{ min: 40, max: 60 }}
3637
>
3738
{this.props.children}
3839
</Typography>
@@ -50,6 +51,7 @@ function Section() {
5051
accessibilityRole={TEXT_ROLE}
5152
accessibilityStates={['selected', 'disabled']}
5253
accessibilityState={{ expanded: false }}
54+
accessibilityValue={{ max: 60 }}
5355
>
5456
Title
5557
</Typography>
@@ -202,3 +204,35 @@ test('getAllByA11yState, queryAllByA11yState', () => {
202204
expect(getAllByA11yState({ expanded: false }).length).toEqual(2);
203205
expect(queryAllByA11yState({ expanded: false }).length).toEqual(2);
204206
});
207+
208+
test('getByA11yValue, queryByA11yValue', () => {
209+
const { getByA11yValue, queryByA11yValue } = render(<Section />);
210+
211+
expect(getByA11yValue({ min: 40 }).props.accessibilityValue).toEqual({
212+
min: 40,
213+
max: 60,
214+
});
215+
expect(queryByA11yValue({ min: 40 })?.props.accessibilityValue).toEqual({
216+
min: 40,
217+
max: 60,
218+
});
219+
220+
expect(() => getByA11yValue({ min: 50 })).toThrow(NO_INSTANCES_FOUND);
221+
expect(queryByA11yValue({ min: 50 })).toEqual(null);
222+
223+
expect(() => getByA11yValue({ max: 60 })).toThrow(FOUND_TWO_INSTANCES);
224+
expect(() => queryByA11yValue({ max: 60 })).toThrow(FOUND_TWO_INSTANCES);
225+
});
226+
227+
test('getAllByA11yValue, queryAllByA11yValue', () => {
228+
const { getAllByA11yValue, queryAllByA11yValue } = render(<Section />);
229+
230+
expect(getAllByA11yValue({ min: 40 }).length).toEqual(1);
231+
expect(queryAllByA11yValue({ min: 40 }).length).toEqual(1);
232+
233+
expect(() => getAllByA11yValue({ min: 50 })).toThrow(NO_INSTANCES_FOUND);
234+
expect(queryAllByA11yValue({ min: 50 })).toEqual([]);
235+
236+
expect(getAllByA11yValue({ max: 60 }).length).toEqual(2);
237+
expect(queryAllByA11yValue({ max: 60 }).length).toEqual(2);
238+
});

src/helpers/a11yAPI.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// @flow
22
import makeQuery from './makeQuery';
3-
import type { A11yRole, A11yStates, A11yState } from '../types.flow';
3+
import type { A11yRole, A11yStates, A11yState, A11yValue } from '../types.flow';
44

55
type GetReturn = ReactTestInstance;
66
type GetAllReturn = Array<ReactTestInstance>;
@@ -37,6 +37,12 @@ type A11yAPI = {|
3737
getAllByA11yState: A11yState => GetAllReturn,
3838
queryByA11yState: A11yState => QueryReturn,
3939
queryAllByA11yState: A11yState => QueryAllReturn,
40+
41+
// Value
42+
getByA11yValue: A11yValue => GetReturn,
43+
getAllByA11yValue: A11yValue => GetAllReturn,
44+
queryByA11yValue: A11yValue => QueryReturn,
45+
queryAllByA11yValue: A11yValue => QueryAllReturn,
4046
|};
4147

4248
export function matchStringValue(
@@ -129,6 +135,16 @@ const a11yAPI = (instance: ReactTestInstance): A11yAPI =>
129135
},
130136
matchObject
131137
)(instance),
138+
...makeQuery(
139+
'accessibilityValue',
140+
{
141+
getBy: ['getByA11yValue', 'getByAccessibilityValue'],
142+
getAllBy: ['getAllByA11yValue', 'getAllByAccessibilityValue'],
143+
queryBy: ['queryByA11yValue', 'queryByAccessibilityValue'],
144+
queryAllBy: ['queryAllByA11yValue', 'queryAllByAccessibilityValue'],
145+
},
146+
matchObject
147+
)(instance),
132148
}: any);
133149

134150
export default a11yAPI;

src/types.flow.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,10 @@ export type A11yStates =
4646
| 'expanded'
4747
| 'collapsed'
4848
| 'hasPopup';
49+
50+
export type A11yValue = {
51+
min?: number,
52+
max?: number,
53+
now?: number,
54+
text?: string,
55+
};

typings/__tests__/index.test.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,11 @@ const getAllByA11yState: Array<ReactTestInstance> = tree.getAllByA11yState({ bus
169169
const queryByA11yState: ReactTestInstance = tree.queryByA11yState({ busy: true });
170170
const queryAllByA11yState: Array<ReactTestInstance> = tree.queryAllByA11yState({ busy: true });
171171

172+
const getByA11yValue: ReactTestInstance = tree.getByA11yValue({ min: 10 });
173+
const getAllByA11yValue: Array<ReactTestInstance> = tree.getAllByA11yValue({ min: 10 });
174+
const queryByA11yValue: ReactTestInstance = tree.queryByA11yValue({ min: 10 });
175+
const queryAllByA11yValue: Array<ReactTestInstance> = tree.queryAllByA11yValue({ min: 10 });
176+
172177
const debugFn = tree.debug();
173178
const debugFnWithMessage = tree.debug('my message');
174179

typings/index.d.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ type GetAllReturn = Array<ReactTestInstance>;
6868
type QueryReturn = ReactTestInstance | null;
6969
type QueryAllReturn = Array<ReactTestInstance> | [];
7070

71+
// Not yet available in DefinitelyTyped
72+
export type A11yValue = {
73+
min?: number,
74+
max?: number,
75+
now?: number,
76+
text?: string,
77+
};
78+
7179
type A11yAPI = {
7280
// Label
7381
getByA11yLabel: (matcher: string | RegExp) => GetReturn,
@@ -98,6 +106,12 @@ type A11yAPI = {
98106
getAllByA11yState: (matcher: AccessibilityState) => GetAllReturn,
99107
queryByA11yState: (matcher: AccessibilityState) => QueryReturn,
100108
queryAllByA11yState: (matcher: AccessibilityState) => QueryAllReturn,
109+
110+
// Value
111+
getByA11yValue: (matcher: A11yValue) => GetReturn,
112+
getAllByA11yValue: (matcher: A11yValue) => GetAllReturn,
113+
queryByA11yValue: (matcher: A11yValue) => QueryReturn,
114+
queryAllByA11yValue: (matcher: A11yValue) => QueryAllReturn,
101115
};
102116

103117
export interface Thenable {

0 commit comments

Comments
 (0)