-
Notifications
You must be signed in to change notification settings - Fork 273
/
Copy patha11yStates.ts
86 lines (77 loc) · 2.93 KB
/
a11yStates.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
import type { ReactTestInstance } from 'react-test-renderer';
import { AccessibilityState } from 'react-native';
import { matchArrayProp } from '../helpers/matchers/matchArrayProp';
import { makeQueries } from './makeQueries';
import type {
FindAllByQuery,
FindByQuery,
GetAllByQuery,
GetByQuery,
QueryAllByQuery,
QueryByQuery,
} from './makeQueries';
type AccessibilityStateKey = keyof AccessibilityState;
type AccessibilityStateKeys =
| AccessibilityStateKey
| Array<AccessibilityStateKey>;
const queryAllByA11yStates = (
instance: ReactTestInstance
): ((
accessibilityStates: AccessibilityStateKeys
) => Array<ReactTestInstance>) =>
function queryAllByA11yStatesFn(accessibilityStates) {
return instance.findAll(
(node) =>
typeof node.type === 'string' &&
matchArrayProp(node.props.accessibilityState, accessibilityStates)
);
};
const getMultipleError = (states: AccessibilityStateKeys) =>
`Found multiple elements with accessibilityState: ${JSON.stringify(states)}`;
const getMissingError = (states: AccessibilityStateKeys) =>
`Unable to find an element with accessibilityState: ${JSON.stringify(
states
)}`;
const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
queryAllByA11yStates,
getMissingError,
getMultipleError
);
export type ByA11yStatesQueries = {
getByA11yStates: GetByQuery<AccessibilityStateKeys>;
getAllByA11yStates: GetAllByQuery<AccessibilityStateKeys>;
queryByA11yStates: QueryByQuery<AccessibilityStateKeys>;
queryAllByA11yStates: QueryAllByQuery<AccessibilityStateKeys>;
findByA11yStates: FindByQuery<AccessibilityStateKeys>;
findAllByA11yStates: FindAllByQuery<AccessibilityStateKeys>;
getByAccessibilityStates: GetByQuery<AccessibilityStateKeys>;
getAllByAccessibilityStates: GetAllByQuery<AccessibilityStateKeys>;
queryByAccessibilityStates: QueryByQuery<AccessibilityStateKeys>;
queryAllByAccessibilityStates: QueryAllByQuery<AccessibilityStateKeys>;
findByAccessibilityStates: FindByQuery<AccessibilityStateKeys>;
findAllByAccessibilityStates: FindAllByQuery<AccessibilityStateKeys>;
};
export const bindByA11yStatesQueries = (
instance: ReactTestInstance
): ByA11yStatesQueries => {
const getByA11yStates = getBy(instance);
const getAllByA11yStates = getAllBy(instance);
const queryByA11yStates = queryBy(instance);
const queryAllByA11yStates = queryAllBy(instance);
const findByA11yStates = findBy(instance);
const findAllByA11yStates = findAllBy(instance);
return {
getByA11yStates,
getAllByA11yStates,
queryByA11yStates,
queryAllByA11yStates,
findByA11yStates,
findAllByA11yStates,
getByAccessibilityStates: getByA11yStates,
getAllByAccessibilityStates: getAllByA11yStates,
queryByAccessibilityStates: queryByA11yStates,
queryAllByAccessibilityStates: queryAllByA11yStates,
findByAccessibilityStates: findByA11yStates,
findAllByAccessibilityStates: findAllByA11yStates,
};
};