-
Notifications
You must be signed in to change notification settings - Fork 272
/
Copy patha11yState.ts
109 lines (97 loc) · 3.4 KB
/
a11yState.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import type { ReactTestInstance } from 'react-test-renderer';
import { AccessibilityState } from 'react-native';
import { accessibilityStateKeys } from '../helpers/accessiblity';
import { findAll } from '../helpers/findAll';
import { matchAccessibilityState } from '../helpers/matchers/accessibilityState';
import { makeQueries } from './makeQueries';
import type {
FindAllByQuery,
FindByQuery,
GetAllByQuery,
GetByQuery,
QueryAllByQuery,
QueryByQuery,
} from './makeQueries';
import { CommonQueryOptions } from './options';
const queryAllByA11yState = (
instance: ReactTestInstance
): ((
matcher: AccessibilityState,
queryOptions?: CommonQueryOptions
) => Array<ReactTestInstance>) =>
function queryAllByA11yStateFn(matcher, queryOptions) {
return findAll(
instance,
(node) =>
typeof node.type === 'string' && matchAccessibilityState(node, matcher),
queryOptions
);
};
const buildErrorMessage = (state: AccessibilityState = {}) => {
const errors: string[] = [];
accessibilityStateKeys.forEach((stateKey) => {
if (state[stateKey] !== undefined) {
errors.push(`${stateKey} state: ${state[stateKey]}`);
}
});
return errors.join(', ');
};
const getMultipleError = (state: AccessibilityState) =>
`Found multiple elements with ${buildErrorMessage(state)}`;
const getMissingError = (state: AccessibilityState) =>
`Unable to find an element with ${buildErrorMessage(state)}`;
const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
queryAllByA11yState,
getMissingError,
getMultipleError
);
export type ByA11yStateQueries = {
getByA11yState: GetByQuery<AccessibilityState, CommonQueryOptions>;
getAllByA11yState: GetAllByQuery<AccessibilityState, CommonQueryOptions>;
queryByA11yState: QueryByQuery<AccessibilityState, CommonQueryOptions>;
queryAllByA11yState: QueryAllByQuery<AccessibilityState, CommonQueryOptions>;
findByA11yState: FindByQuery<AccessibilityState, CommonQueryOptions>;
findAllByA11yState: FindAllByQuery<AccessibilityState, CommonQueryOptions>;
getByAccessibilityState: GetByQuery<AccessibilityState, CommonQueryOptions>;
getAllByAccessibilityState: GetAllByQuery<
AccessibilityState,
CommonQueryOptions
>;
queryByAccessibilityState: QueryByQuery<
AccessibilityState,
CommonQueryOptions
>;
queryAllByAccessibilityState: QueryAllByQuery<
AccessibilityState,
CommonQueryOptions
>;
findByAccessibilityState: FindByQuery<AccessibilityState, CommonQueryOptions>;
findAllByAccessibilityState: FindAllByQuery<
AccessibilityState,
CommonQueryOptions
>;
};
export const bindByA11yStateQueries = (
instance: ReactTestInstance
): ByA11yStateQueries => {
const getByA11yState = getBy(instance);
const getAllByA11yState = getAllBy(instance);
const queryByA11yState = queryBy(instance);
const queryAllByA11yState = queryAllBy(instance);
const findByA11yState = findBy(instance);
const findAllByA11yState = findAllBy(instance);
return {
getByA11yState,
getAllByA11yState,
queryByA11yState,
queryAllByA11yState,
findByA11yState,
findAllByA11yState,
getByAccessibilityState: getByA11yState,
getAllByAccessibilityState: getAllByA11yState,
queryByAccessibilityState: queryByA11yState,
queryAllByAccessibilityState: queryAllByA11yState,
findByAccessibilityState: findByA11yState,
findAllByAccessibilityState: findAllByA11yState,
};
};