-
Notifications
You must be signed in to change notification settings - Fork 272
/
Copy pathdisplayValue.ts
78 lines (70 loc) · 2.6 KB
/
displayValue.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
import type { ReactTestInstance } from 'react-test-renderer';
import { filterNodeByType } from '../helpers/filterNodeByType';
import { findAll } from '../helpers/findAll';
import { matches, TextMatch, TextMatchOptions } from '../matches';
import { getHostComponentNames } from '../helpers/host-component-names';
import { makeQueries } from './makeQueries';
import type {
FindAllByQuery,
FindByQuery,
GetAllByQuery,
GetByQuery,
QueryAllByQuery,
QueryByQuery,
} from './makeQueries';
import type { CommonQueryOptions } from './options';
type ByDisplayValueOptions = CommonQueryOptions & TextMatchOptions;
const getTextInputNodeByDisplayValue = (
node: ReactTestInstance,
value: TextMatch,
options: TextMatchOptions = {}
) => {
const { exact, normalizer } = options;
const nodeValue =
node.props.value !== undefined ? node.props.value : node.props.defaultValue;
return (
filterNodeByType(node, getHostComponentNames().textInput) &&
matches(value, nodeValue, normalizer, exact)
);
};
const queryAllByDisplayValue = (
instance: ReactTestInstance
): ((
displayValue: TextMatch,
queryOptions?: ByDisplayValueOptions
) => Array<ReactTestInstance>) =>
function queryAllByDisplayValueFn(displayValue, queryOptions) {
return findAll(
instance,
(node) =>
getTextInputNodeByDisplayValue(node, displayValue, queryOptions),
queryOptions
);
};
const getMultipleError = (displayValue: TextMatch) =>
`Found multiple elements with display value: ${String(displayValue)} `;
const getMissingError = (displayValue: TextMatch) =>
`Unable to find an element with displayValue: ${String(displayValue)}`;
const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
queryAllByDisplayValue,
getMissingError,
getMultipleError
);
export type ByDisplayValueQueries = {
getByDisplayValue: GetByQuery<TextMatch, ByDisplayValueOptions>;
getAllByDisplayValue: GetAllByQuery<TextMatch, ByDisplayValueOptions>;
queryByDisplayValue: QueryByQuery<TextMatch, ByDisplayValueOptions>;
queryAllByDisplayValue: QueryAllByQuery<TextMatch, ByDisplayValueOptions>;
findByDisplayValue: FindByQuery<TextMatch, ByDisplayValueOptions>;
findAllByDisplayValue: FindAllByQuery<TextMatch, ByDisplayValueOptions>;
};
export const bindByDisplayValueQueries = (
instance: ReactTestInstance
): ByDisplayValueQueries => ({
getByDisplayValue: getBy(instance),
getAllByDisplayValue: getAllBy(instance),
queryByDisplayValue: queryBy(instance),
queryAllByDisplayValue: queryAllBy(instance),
findByDisplayValue: findBy(instance),
findAllByDisplayValue: findAllBy(instance),
});