-
Notifications
You must be signed in to change notification settings - Fork 273
/
Copy pathplaceholder-text.ts
69 lines (61 loc) · 2.43 KB
/
placeholder-text.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
import type { ReactTestInstance } from 'react-test-renderer';
import { findAll } from '../helpers/find-all';
import { isHostTextInput } from '../helpers/host-component-names';
import type { TextMatch, TextMatchOptions } from '../matches';
import { matches } from '../matches';
import type {
FindAllByQuery,
FindByQuery,
GetAllByQuery,
GetByQuery,
QueryAllByQuery,
QueryByQuery,
} from './make-queries';
import { makeQueries } from './make-queries';
import type { CommonQueryOptions } from './options';
type ByPlaceholderTextOptions = CommonQueryOptions & TextMatchOptions;
const matchPlaceholderText = (
node: ReactTestInstance,
placeholder: TextMatch,
options: TextMatchOptions = {},
) => {
const { exact, normalizer } = options;
return matches(placeholder, node.props.placeholder, normalizer, exact);
};
const queryAllByPlaceholderText = (
instance: ReactTestInstance,
): QueryAllByQuery<TextMatch, ByPlaceholderTextOptions> =>
function queryAllByPlaceholderFn(placeholder, queryOptions) {
return findAll(
instance,
(node) => isHostTextInput(node) && matchPlaceholderText(node, placeholder, queryOptions),
queryOptions,
);
};
const getMultipleError = (placeholder: TextMatch) =>
`Found multiple elements with placeholder: ${String(placeholder)} `;
const getMissingError = (placeholder: TextMatch) =>
`Unable to find an element with placeholder: ${String(placeholder)}`;
const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
queryAllByPlaceholderText,
getMissingError,
getMultipleError,
);
export type ByPlaceholderTextQueries = {
getByPlaceholderText: GetByQuery<TextMatch, ByPlaceholderTextOptions>;
getAllByPlaceholderText: GetAllByQuery<TextMatch, ByPlaceholderTextOptions>;
queryByPlaceholderText: QueryByQuery<TextMatch, ByPlaceholderTextOptions>;
queryAllByPlaceholderText: QueryAllByQuery<TextMatch, ByPlaceholderTextOptions>;
findByPlaceholderText: FindByQuery<TextMatch, ByPlaceholderTextOptions>;
findAllByPlaceholderText: FindAllByQuery<TextMatch, ByPlaceholderTextOptions>;
};
export const bindByPlaceholderTextQueries = (
instance: ReactTestInstance,
): ByPlaceholderTextQueries => ({
getByPlaceholderText: getBy(instance),
getAllByPlaceholderText: getAllBy(instance),
queryByPlaceholderText: queryBy(instance),
queryAllByPlaceholderText: queryAllBy(instance),
findByPlaceholderText: findBy(instance),
findAllByPlaceholderText: findAllBy(instance),
});