@testing-library/react-native 12.1.3 → 12.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintcache +1 -1
- package/.eslintignore +1 -0
- package/build/fireEvent.js +2 -5
- package/build/fireEvent.js.map +1 -1
- package/build/helpers/component-tree.d.ts +11 -5
- package/build/helpers/component-tree.js +5 -1
- package/build/helpers/component-tree.js.map +1 -1
- package/build/helpers/deprecation.js +1 -1
- package/build/helpers/deprecation.js.map +1 -1
- package/build/helpers/findAll.d.ts +2 -1
- package/build/helpers/findAll.js +2 -1
- package/build/helpers/findAll.js.map +1 -1
- package/build/helpers/host-component-names.d.ts +12 -0
- package/build/helpers/host-component-names.js +18 -0
- package/build/helpers/host-component-names.js.map +1 -1
- package/build/helpers/matchers/matchLabelText.js +1 -1
- package/build/helpers/matchers/matchLabelText.js.map +1 -1
- package/build/pure.d.ts +2 -0
- package/build/pure.js +7 -0
- package/build/pure.js.map +1 -1
- package/build/queries/a11yState.js +1 -1
- package/build/queries/a11yState.js.map +1 -1
- package/build/queries/a11yValue.js +1 -1
- package/build/queries/a11yValue.js.map +1 -1
- package/build/queries/displayValue.js +5 -6
- package/build/queries/displayValue.js.map +1 -1
- package/build/queries/hintText.js +1 -1
- package/build/queries/hintText.js.map +1 -1
- package/build/queries/labelText.js +1 -1
- package/build/queries/labelText.js.map +1 -1
- package/build/queries/placeholderText.js +3 -4
- package/build/queries/placeholderText.js.map +1 -1
- package/build/queries/role.js +1 -1
- package/build/queries/role.js.map +1 -1
- package/build/queries/testId.js +3 -3
- package/build/queries/testId.js.map +1 -1
- package/build/queries/text.js +1 -2
- package/build/queries/text.js.map +1 -1
- package/build/render.js.map +1 -1
- package/build/user-event/clear.d.ts +3 -0
- package/build/user-event/clear.js +41 -0
- package/build/user-event/clear.js.map +1 -0
- package/build/user-event/event-builder/common.d.ts +48 -6
- package/build/user-event/event-builder/common.js +37 -20
- package/build/user-event/event-builder/common.js.map +1 -1
- package/build/user-event/event-builder/index.d.ts +94 -0
- package/build/user-event/event-builder/index.js +3 -1
- package/build/user-event/event-builder/index.js.map +1 -1
- package/build/user-event/event-builder/text-input.d.ts +91 -0
- package/build/user-event/event-builder/text-input.js +117 -0
- package/build/user-event/event-builder/text-input.js.map +1 -0
- package/build/user-event/index.d.ts +5 -2
- package/build/user-event/index.js +8 -1
- package/build/user-event/index.js.map +1 -1
- package/build/user-event/press/index.d.ts +1 -1
- package/build/user-event/press/index.js +6 -0
- package/build/user-event/press/index.js.map +1 -1
- package/build/user-event/press/press.d.ts +3 -3
- package/build/user-event/press/press.js +54 -64
- package/build/user-event/press/press.js.map +1 -1
- package/build/user-event/setup/setup.d.ts +45 -3
- package/build/user-event/setup/setup.js +17 -2
- package/build/user-event/setup/setup.js.map +1 -1
- package/build/user-event/type/index.d.ts +1 -1
- package/build/user-event/type/index.js +6 -0
- package/build/user-event/type/index.js.map +1 -1
- package/build/user-event/type/parseKeys.d.ts +1 -0
- package/build/user-event/type/parseKeys.js +40 -0
- package/build/user-event/type/parseKeys.js.map +1 -0
- package/build/user-event/type/type.d.ts +7 -2
- package/build/user-event/type/type.js +70 -8
- package/build/user-event/type/type.js.map +1 -1
- package/build/user-event/utils/content-size.d.ts +15 -0
- package/build/user-event/utils/content-size.js +26 -0
- package/build/user-event/utils/content-size.js.map +1 -0
- package/build/user-event/utils/{events.d.ts → dispatch-event.d.ts} +2 -2
- package/build/user-event/utils/dispatch-event.js +36 -0
- package/build/user-event/utils/dispatch-event.js.map +1 -0
- package/build/user-event/utils/host-components.d.ts +2 -0
- package/build/user-event/utils/host-components.js +11 -0
- package/build/user-event/utils/host-components.js.map +1 -0
- package/build/user-event/utils/index.d.ts +5 -1
- package/build/user-event/utils/index.js +48 -4
- package/build/user-event/utils/index.js.map +1 -1
- package/build/user-event/utils/text-range.d.ts +4 -0
- package/build/user-event/utils/text-range.js +2 -0
- package/build/user-event/utils/text-range.js.map +1 -0
- package/build/user-event/utils/warn-about-real-timers.d.ts +1 -0
- package/build/user-event/utils/warn-about-real-timers.js +20 -0
- package/build/user-event/utils/warn-about-real-timers.js.map +1 -0
- package/examples/basic/.expo/README.md +15 -0
- package/examples/basic/.expo/packager-info.json +4 -0
- package/examples/basic/.expo/settings.json +10 -0
- package/examples/basic/__tests__/App.test.tsx +30 -12
- package/examples/basic/package.json +7 -7
- package/examples/basic/yarn.lock +7499 -0
- package/examples/react-navigation/README.md +2 -0
- package/examples/react-navigation/package.json +5 -5
- package/examples/react-navigation/yarn.lock +5018 -0
- package/examples/redux/README.md +5 -0
- package/examples/redux/package.json +7 -7
- package/examples/redux/yarn.lock +4819 -0
- package/experiments-app/.expo/packager-info.json +2 -2
- package/experiments-app/package.json +7 -9
- package/experiments-app/src/MainScreen.tsx +1 -0
- package/experiments-app/src/experiments.ts +20 -2
- package/experiments-app/src/screens/FlatListEvents.tsx +57 -0
- package/experiments-app/src/screens/ScrollViewEvents.tsx +65 -0
- package/experiments-app/src/screens/SectionListEvents.tsx +91 -0
- package/experiments-app/src/screens/TextInputEventPropagation.tsx +5 -17
- package/experiments-app/src/screens/TextInputEvents.tsx +13 -15
- package/experiments-app/src/utils/helpers.ts +13 -3
- package/experiments-app/yarn.lock +901 -1105
- package/experiments-rtl/.babelrc +8 -0
- package/experiments-rtl/.eslintrc.json +3 -0
- package/experiments-rtl/.gitignore +35 -0
- package/experiments-rtl/README.md +34 -0
- package/experiments-rtl/jest-setup.js +1 -0
- package/experiments-rtl/jest.config.js +4 -0
- package/experiments-rtl/next.config.js +4 -0
- package/experiments-rtl/package.json +38 -0
- package/experiments-rtl/postcss.config.js +6 -0
- package/experiments-rtl/public/next.svg +1 -0
- package/experiments-rtl/public/vercel.svg +1 -0
- package/experiments-rtl/src/app/__tests__/click.test.tsx +31 -0
- package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +51 -0
- package/experiments-rtl/src/app/globals.css +27 -0
- package/experiments-rtl/src/app/layout.tsx +22 -0
- package/experiments-rtl/src/app/page.tsx +113 -0
- package/experiments-rtl/tailwind.config.ts +20 -0
- package/experiments-rtl/tsconfig.json +28 -0
- package/experiments-rtl/yarn.lock +5418 -0
- package/package.json +4 -2
- package/src/__tests__/act.test.tsx +4 -0
- package/src/fireEvent.ts +1 -5
- package/src/helpers/component-tree.ts +14 -9
- package/src/helpers/deprecation.ts +1 -1
- package/src/helpers/findAll.ts +6 -4
- package/src/helpers/host-component-names.tsx +21 -0
- package/src/helpers/matchers/matchLabelText.ts +0 -1
- package/src/pure.ts +2 -0
- package/src/queries/a11yState.ts +2 -6
- package/src/queries/a11yValue.ts +2 -6
- package/src/queries/displayValue.ts +7 -14
- package/src/queries/hintText.ts +2 -7
- package/src/queries/labelText.ts +1 -3
- package/src/queries/placeholderText.ts +6 -13
- package/src/queries/role.ts +1 -2
- package/src/queries/testId.ts +5 -10
- package/src/queries/text.ts +3 -6
- package/src/render.tsx +1 -1
- package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +269 -0
- package/src/user-event/__tests__/clear.test.tsx +217 -0
- package/src/user-event/clear.ts +59 -0
- package/src/user-event/event-builder/common.ts +35 -19
- package/src/user-event/event-builder/index.ts +2 -0
- package/src/user-event/event-builder/text-input.ts +86 -0
- package/src/user-event/index.ts +7 -3
- package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +4 -2
- package/src/user-event/press/__tests__/press.real-timers.test.tsx +4 -2
- package/src/user-event/press/__tests__/press.test.tsx +40 -5
- package/src/user-event/press/index.ts +1 -1
- package/src/user-event/press/press.ts +93 -64
- package/src/user-event/setup/setup.ts +54 -5
- package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +339 -0
- package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +644 -2
- package/src/user-event/type/__tests__/parseKeys.test.ts +23 -0
- package/src/user-event/type/__tests__/type-managed.test.tsx +120 -0
- package/src/user-event/type/__tests__/type.test.tsx +299 -27
- package/src/user-event/type/index.ts +1 -1
- package/src/user-event/type/parseKeys.ts +41 -0
- package/src/user-event/type/type.ts +128 -10
- package/src/user-event/utils/__tests__/dispatch-event.test.tsx +41 -0
- package/src/user-event/utils/__tests__/wait.test.ts +0 -1
- package/src/user-event/utils/content-size.ts +25 -0
- package/src/user-event/utils/dispatch-event.ts +38 -0
- package/src/user-event/utils/host-components.ts +6 -0
- package/src/user-event/utils/index.ts +5 -1
- package/src/user-event/utils/text-range.ts +4 -0
- package/src/user-event/{press/utils/warnAboutRealTimers.ts → utils/warn-about-real-timers.ts} +8 -1
- package/website/docs/API.md +19 -25
- package/website/docs/Queries.md +64 -59
- package/website/docs/UserEvent.md +134 -9
- package/website/sidebars.js +1 -1
- package/build/helpers/filterNodeByType.d.ts +0 -3
- package/build/helpers/filterNodeByType.js +0 -9
- package/build/helpers/filterNodeByType.js.map +0 -1
- package/build/user-event/press/utils/warnAboutRealTimers.d.ts +0 -1
- package/build/user-event/press/utils/warnAboutRealTimers.js +0 -14
- package/build/user-event/press/utils/warnAboutRealTimers.js.map +0 -1
- package/build/user-event/utils/events.js +0 -44
- package/build/user-event/utils/events.js.map +0 -1
- package/src/helpers/filterNodeByType.ts +0 -7
- package/src/user-event/utils/events.ts +0 -54
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testing-library/react-native",
|
|
3
|
-
"version": "12.1
|
|
3
|
+
"version": "12.2.1",
|
|
4
4
|
"description": "Simple and complete React Native testing utilities that encourage good testing practices.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -97,7 +97,9 @@
|
|
|
97
97
|
],
|
|
98
98
|
"testPathIgnorePatterns": [
|
|
99
99
|
"timerUtils",
|
|
100
|
-
"examples/"
|
|
100
|
+
"examples/",
|
|
101
|
+
"experiments-app/",
|
|
102
|
+
"experiments-rtl/"
|
|
101
103
|
],
|
|
102
104
|
"testTimeout": 60000,
|
|
103
105
|
"transformIgnorePatterns": [
|
|
@@ -50,3 +50,7 @@ test('should be able to await act', async () => {
|
|
|
50
50
|
const result = await act(async () => {});
|
|
51
51
|
expect(result).toBe(undefined);
|
|
52
52
|
});
|
|
53
|
+
|
|
54
|
+
test('should be able to await act when promise rejects', async () => {
|
|
55
|
+
await expect(act(async () => Promise.reject('error'))).rejects.toBe('error');
|
|
56
|
+
});
|
package/src/fireEvent.ts
CHANGED
|
@@ -8,15 +8,11 @@ import {
|
|
|
8
8
|
} from 'react-native';
|
|
9
9
|
import act from './act';
|
|
10
10
|
import { isHostElement } from './helpers/component-tree';
|
|
11
|
-
import {
|
|
11
|
+
import { isHostTextInput } from './helpers/host-component-names';
|
|
12
12
|
import { isPointerEventEnabled } from './helpers/pointer-events';
|
|
13
13
|
|
|
14
14
|
type EventHandler = (...args: unknown[]) => unknown;
|
|
15
15
|
|
|
16
|
-
const isHostTextInput = (element?: ReactTestInstance) => {
|
|
17
|
-
return element?.type === getHostComponentNames().textInput;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
16
|
export function isTouchResponder(element: ReactTestInstance) {
|
|
21
17
|
if (!isHostElement(element)) {
|
|
22
18
|
return false;
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* ReactTestInstance referring to host element.
|
|
5
|
+
*/
|
|
6
|
+
export type HostTestInstance = ReactTestInstance & { type: string };
|
|
7
|
+
|
|
3
8
|
/**
|
|
4
9
|
* Checks if the given element is a host element.
|
|
5
10
|
* @param element The element to check.
|
|
6
11
|
*/
|
|
7
|
-
export function isHostElement(
|
|
12
|
+
export function isHostElement(
|
|
13
|
+
element?: ReactTestInstance | null
|
|
14
|
+
): element is HostTestInstance {
|
|
8
15
|
return typeof element?.type === 'string';
|
|
9
16
|
}
|
|
10
17
|
|
|
@@ -14,7 +21,7 @@ export function isHostElement(element?: ReactTestInstance | null) {
|
|
|
14
21
|
*/
|
|
15
22
|
export function getHostParent(
|
|
16
23
|
element: ReactTestInstance | null
|
|
17
|
-
):
|
|
24
|
+
): HostTestInstance | null {
|
|
18
25
|
if (element == null) {
|
|
19
26
|
return null;
|
|
20
27
|
}
|
|
@@ -37,12 +44,12 @@ export function getHostParent(
|
|
|
37
44
|
*/
|
|
38
45
|
export function getHostChildren(
|
|
39
46
|
element: ReactTestInstance | null
|
|
40
|
-
):
|
|
47
|
+
): HostTestInstance[] {
|
|
41
48
|
if (element == null) {
|
|
42
49
|
return [];
|
|
43
50
|
}
|
|
44
51
|
|
|
45
|
-
const hostChildren:
|
|
52
|
+
const hostChildren: HostTestInstance[] = [];
|
|
46
53
|
|
|
47
54
|
element.children.forEach((child) => {
|
|
48
55
|
if (typeof child !== 'object') {
|
|
@@ -68,10 +75,8 @@ export function getHostChildren(
|
|
|
68
75
|
*/
|
|
69
76
|
export function getHostSelves(
|
|
70
77
|
element: ReactTestInstance | null
|
|
71
|
-
):
|
|
72
|
-
return
|
|
73
|
-
? [element]
|
|
74
|
-
: getHostChildren(element);
|
|
78
|
+
): HostTestInstance[] {
|
|
79
|
+
return isHostElement(element) ? [element] : getHostChildren(element);
|
|
75
80
|
}
|
|
76
81
|
|
|
77
82
|
/**
|
|
@@ -80,7 +85,7 @@ export function getHostSelves(
|
|
|
80
85
|
*/
|
|
81
86
|
export function getHostSiblings(
|
|
82
87
|
element: ReactTestInstance | null
|
|
83
|
-
):
|
|
88
|
+
): HostTestInstance[] {
|
|
84
89
|
const hostParent = getHostParent(element);
|
|
85
90
|
const hostSelves = getHostSelves(element);
|
|
86
91
|
return getHostChildren(hostParent).filter(
|
|
@@ -37,7 +37,7 @@ function deprecateQuery<QueryFn extends (...args: any) => any>(
|
|
|
37
37
|
|
|
38
38
|
const warned: { [functionName: string]: boolean } = {};
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
/* istanbul ignore next: occasionally used */
|
|
41
41
|
export function printDeprecationWarning(functionName: string) {
|
|
42
42
|
if (warned[functionName]) {
|
|
43
43
|
return;
|
package/src/helpers/findAll.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
2
|
import { getConfig } from '../config';
|
|
3
3
|
import { isHiddenFromAccessibility } from './accessiblity';
|
|
4
|
+
import { HostTestInstance, isHostElement } from './component-tree';
|
|
4
5
|
|
|
5
6
|
interface FindAllOptions {
|
|
6
7
|
/** Match elements hidden from accessibility */
|
|
@@ -17,7 +18,7 @@ export function findAll(
|
|
|
17
18
|
root: ReactTestInstance,
|
|
18
19
|
predicate: (element: ReactTestInstance) => boolean,
|
|
19
20
|
options?: FindAllOptions
|
|
20
|
-
) {
|
|
21
|
+
): HostTestInstance[] {
|
|
21
22
|
const results = findAllInternal(root, predicate, options);
|
|
22
23
|
|
|
23
24
|
const includeHiddenElements =
|
|
@@ -41,11 +42,11 @@ function findAllInternal(
|
|
|
41
42
|
root: ReactTestInstance,
|
|
42
43
|
predicate: (element: ReactTestInstance) => boolean,
|
|
43
44
|
options?: FindAllOptions
|
|
44
|
-
):
|
|
45
|
-
const results:
|
|
45
|
+
): HostTestInstance[] {
|
|
46
|
+
const results: HostTestInstance[] = [];
|
|
46
47
|
|
|
47
48
|
// Match descendants first but do not add them to results yet.
|
|
48
|
-
const matchingDescendants:
|
|
49
|
+
const matchingDescendants: HostTestInstance[] = [];
|
|
49
50
|
root.children.forEach((child) => {
|
|
50
51
|
if (typeof child === 'string') {
|
|
51
52
|
return;
|
|
@@ -56,6 +57,7 @@ function findAllInternal(
|
|
|
56
57
|
if (
|
|
57
58
|
// When matchDeepestOnly = true: add current element only if no descendants match
|
|
58
59
|
(!options?.matchDeepestOnly || matchingDescendants.length === 0) &&
|
|
60
|
+
isHostElement(root) &&
|
|
59
61
|
predicate(root)
|
|
60
62
|
) {
|
|
61
63
|
results.push(root);
|
|
@@ -3,6 +3,7 @@ import { ReactTestInstance } from 'react-test-renderer';
|
|
|
3
3
|
import { Switch, Text, TextInput, View } from 'react-native';
|
|
4
4
|
import { configureInternal, getConfig, HostComponentNames } from '../config';
|
|
5
5
|
import { renderWithAct } from '../render-act';
|
|
6
|
+
import { HostTestInstance } from './component-tree';
|
|
6
7
|
|
|
7
8
|
const userConfigErrorMessage = `There seems to be an issue with your configuration that prevents React Native Testing Library from working correctly.
|
|
8
9
|
Please check if you are using compatible versions of React Native and React Native Testing Library.`;
|
|
@@ -65,3 +66,23 @@ function getByTestId(instance: ReactTestInstance, testID: string) {
|
|
|
65
66
|
|
|
66
67
|
return nodes[0];
|
|
67
68
|
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Checks if the given element is a host Text.
|
|
72
|
+
* @param element The element to check.
|
|
73
|
+
*/
|
|
74
|
+
export function isHostText(
|
|
75
|
+
element?: ReactTestInstance | null
|
|
76
|
+
): element is HostTestInstance {
|
|
77
|
+
return element?.type === getHostComponentNames().text;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Checks if the given element is a host TextInput.
|
|
82
|
+
* @param element The element to check.
|
|
83
|
+
*/
|
|
84
|
+
export function isHostTextInput(
|
|
85
|
+
element?: ReactTestInstance | null
|
|
86
|
+
): element is HostTestInstance {
|
|
87
|
+
return element?.type === getHostComponentNames().textInput;
|
|
88
|
+
}
|
package/src/pure.ts
CHANGED
|
@@ -14,6 +14,7 @@ export {
|
|
|
14
14
|
export { getDefaultNormalizer } from './matches';
|
|
15
15
|
export { renderHook } from './renderHook';
|
|
16
16
|
export { screen } from './screen';
|
|
17
|
+
export { userEvent } from './user-event';
|
|
17
18
|
|
|
18
19
|
export type {
|
|
19
20
|
RenderOptions,
|
|
@@ -23,3 +24,4 @@ export type {
|
|
|
23
24
|
} from './render';
|
|
24
25
|
export type { RenderHookOptions, RenderHookResult } from './renderHook';
|
|
25
26
|
export type { Config } from './config';
|
|
27
|
+
export type { UserEventConfig } from './user-event';
|
package/src/queries/a11yState.ts
CHANGED
|
@@ -19,15 +19,11 @@ import { CommonQueryOptions } from './options';
|
|
|
19
19
|
|
|
20
20
|
const queryAllByA11yState = (
|
|
21
21
|
instance: ReactTestInstance
|
|
22
|
-
):
|
|
23
|
-
matcher: AccessibilityStateMatcher,
|
|
24
|
-
queryOptions?: CommonQueryOptions
|
|
25
|
-
) => Array<ReactTestInstance>) =>
|
|
22
|
+
): QueryAllByQuery<AccessibilityStateMatcher, CommonQueryOptions> =>
|
|
26
23
|
function queryAllByA11yStateFn(matcher, queryOptions) {
|
|
27
24
|
return findAll(
|
|
28
25
|
instance,
|
|
29
|
-
(node) =>
|
|
30
|
-
typeof node.type === 'string' && matchAccessibilityState(node, matcher),
|
|
26
|
+
(node) => matchAccessibilityState(node, matcher),
|
|
31
27
|
queryOptions
|
|
32
28
|
);
|
|
33
29
|
};
|
package/src/queries/a11yValue.ts
CHANGED
|
@@ -19,15 +19,11 @@ import { CommonQueryOptions } from './options';
|
|
|
19
19
|
|
|
20
20
|
const queryAllByA11yValue = (
|
|
21
21
|
instance: ReactTestInstance
|
|
22
|
-
):
|
|
23
|
-
value: AccessibilityValueMatcher,
|
|
24
|
-
queryOptions?: CommonQueryOptions
|
|
25
|
-
) => Array<ReactTestInstance>) =>
|
|
22
|
+
): QueryAllByQuery<AccessibilityValueMatcher, CommonQueryOptions> =>
|
|
26
23
|
function queryAllByA11yValueFn(value, queryOptions) {
|
|
27
24
|
return findAll(
|
|
28
25
|
instance,
|
|
29
|
-
(node) =>
|
|
30
|
-
typeof node.type === 'string' && matchAccessibilityValue(node, value),
|
|
26
|
+
(node) => matchAccessibilityValue(node, value),
|
|
31
27
|
queryOptions
|
|
32
28
|
);
|
|
33
29
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
|
-
import { filterNodeByType } from '../helpers/filterNodeByType';
|
|
3
2
|
import { findAll } from '../helpers/findAll';
|
|
3
|
+
import { isHostTextInput } from '../helpers/host-component-names';
|
|
4
4
|
import { matches, TextMatch, TextMatchOptions } from '../matches';
|
|
5
|
-
import { getHostComponentNames } from '../helpers/host-component-names';
|
|
6
5
|
import { makeQueries } from './makeQueries';
|
|
7
6
|
import type {
|
|
8
7
|
FindAllByQuery,
|
|
@@ -16,32 +15,26 @@ import type { CommonQueryOptions } from './options';
|
|
|
16
15
|
|
|
17
16
|
type ByDisplayValueOptions = CommonQueryOptions & TextMatchOptions;
|
|
18
17
|
|
|
19
|
-
const
|
|
18
|
+
const matchDisplayValue = (
|
|
20
19
|
node: ReactTestInstance,
|
|
21
20
|
value: TextMatch,
|
|
22
21
|
options: TextMatchOptions = {}
|
|
23
22
|
) => {
|
|
24
23
|
const { exact, normalizer } = options;
|
|
25
|
-
const nodeValue =
|
|
26
|
-
node.props.value !== undefined ? node.props.value : node.props.defaultValue;
|
|
24
|
+
const nodeValue = node.props.value ?? node.props.defaultValue;
|
|
27
25
|
|
|
28
|
-
return (
|
|
29
|
-
filterNodeByType(node, getHostComponentNames().textInput) &&
|
|
30
|
-
matches(value, nodeValue, normalizer, exact)
|
|
31
|
-
);
|
|
26
|
+
return matches(value, nodeValue, normalizer, exact);
|
|
32
27
|
};
|
|
33
28
|
|
|
34
29
|
const queryAllByDisplayValue = (
|
|
35
30
|
instance: ReactTestInstance
|
|
36
|
-
):
|
|
37
|
-
displayValue: TextMatch,
|
|
38
|
-
queryOptions?: ByDisplayValueOptions
|
|
39
|
-
) => Array<ReactTestInstance>) =>
|
|
31
|
+
): QueryAllByQuery<TextMatch, ByDisplayValueOptions> =>
|
|
40
32
|
function queryAllByDisplayValueFn(displayValue, queryOptions) {
|
|
41
33
|
return findAll(
|
|
42
34
|
instance,
|
|
43
35
|
(node) =>
|
|
44
|
-
|
|
36
|
+
isHostTextInput(node) &&
|
|
37
|
+
matchDisplayValue(node, displayValue, queryOptions),
|
|
45
38
|
queryOptions
|
|
46
39
|
);
|
|
47
40
|
};
|
package/src/queries/hintText.ts
CHANGED
|
@@ -25,16 +25,11 @@ const getNodeByHintText = (
|
|
|
25
25
|
|
|
26
26
|
const queryAllByHintText = (
|
|
27
27
|
instance: ReactTestInstance
|
|
28
|
-
):
|
|
29
|
-
hint: TextMatch,
|
|
30
|
-
queryOptions?: ByHintTextOptions
|
|
31
|
-
) => Array<ReactTestInstance>) =>
|
|
28
|
+
): QueryAllByQuery<TextMatch, ByHintTextOptions> =>
|
|
32
29
|
function queryAllByA11yHintFn(hint, queryOptions) {
|
|
33
30
|
return findAll(
|
|
34
31
|
instance,
|
|
35
|
-
(node) =>
|
|
36
|
-
typeof node.type === 'string' &&
|
|
37
|
-
getNodeByHintText(node, hint, queryOptions),
|
|
32
|
+
(node) => getNodeByHintText(node, hint, queryOptions),
|
|
38
33
|
queryOptions
|
|
39
34
|
);
|
|
40
35
|
};
|
package/src/queries/labelText.ts
CHANGED
|
@@ -19,9 +19,7 @@ function queryAllByLabelText(instance: ReactTestInstance) {
|
|
|
19
19
|
return (text: TextMatch, queryOptions?: ByLabelTextOptions) => {
|
|
20
20
|
return findAll(
|
|
21
21
|
instance,
|
|
22
|
-
(node) =>
|
|
23
|
-
typeof node.type === 'string' &&
|
|
24
|
-
matchLabelText(instance, node, text, queryOptions),
|
|
22
|
+
(node) => matchLabelText(instance, node, text, queryOptions),
|
|
25
23
|
queryOptions
|
|
26
24
|
);
|
|
27
25
|
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
2
|
import { findAll } from '../helpers/findAll';
|
|
3
3
|
import { matches, TextMatch, TextMatchOptions } from '../matches';
|
|
4
|
-
import {
|
|
5
|
-
import { getHostComponentNames } from '../helpers/host-component-names';
|
|
4
|
+
import { isHostTextInput } from '../helpers/host-component-names';
|
|
6
5
|
import { makeQueries } from './makeQueries';
|
|
7
6
|
import type {
|
|
8
7
|
FindAllByQuery,
|
|
@@ -16,30 +15,24 @@ import type { CommonQueryOptions } from './options';
|
|
|
16
15
|
|
|
17
16
|
type ByPlaceholderTextOptions = CommonQueryOptions & TextMatchOptions;
|
|
18
17
|
|
|
19
|
-
const
|
|
18
|
+
const matchPlaceholderText = (
|
|
20
19
|
node: ReactTestInstance,
|
|
21
20
|
placeholder: TextMatch,
|
|
22
21
|
options: TextMatchOptions = {}
|
|
23
22
|
) => {
|
|
24
23
|
const { exact, normalizer } = options;
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
filterNodeByType(node, getHostComponentNames().textInput) &&
|
|
28
|
-
matches(placeholder, node.props.placeholder, normalizer, exact)
|
|
29
|
-
);
|
|
24
|
+
return matches(placeholder, node.props.placeholder, normalizer, exact);
|
|
30
25
|
};
|
|
31
26
|
|
|
32
27
|
const queryAllByPlaceholderText = (
|
|
33
28
|
instance: ReactTestInstance
|
|
34
|
-
):
|
|
35
|
-
placeholder: TextMatch,
|
|
36
|
-
queryOptions?: ByPlaceholderTextOptions
|
|
37
|
-
) => Array<ReactTestInstance>) =>
|
|
29
|
+
): QueryAllByQuery<TextMatch, ByPlaceholderTextOptions> =>
|
|
38
30
|
function queryAllByPlaceholderFn(placeholder, queryOptions) {
|
|
39
31
|
return findAll(
|
|
40
32
|
instance,
|
|
41
33
|
(node) =>
|
|
42
|
-
|
|
34
|
+
isHostTextInput(node) &&
|
|
35
|
+
matchPlaceholderText(node, placeholder, queryOptions),
|
|
43
36
|
queryOptions
|
|
44
37
|
);
|
|
45
38
|
};
|
package/src/queries/role.ts
CHANGED
|
@@ -61,13 +61,12 @@ const matchAccessibilityValueIfNeeded = (
|
|
|
61
61
|
|
|
62
62
|
const queryAllByRole = (
|
|
63
63
|
instance: ReactTestInstance
|
|
64
|
-
):
|
|
64
|
+
): QueryAllByQuery<TextMatch, ByRoleOptions> =>
|
|
65
65
|
function queryAllByRoleFn(role, options) {
|
|
66
66
|
return findAll(
|
|
67
67
|
instance,
|
|
68
68
|
(node) =>
|
|
69
69
|
// run the cheapest checks first, and early exit to avoid unneeded computations
|
|
70
|
-
typeof node.type === 'string' &&
|
|
71
70
|
isAccessibilityElement(node) &&
|
|
72
71
|
matchStringProp(node.props.accessibilityRole, role) &&
|
|
73
72
|
matchAccessibleStateIfNeeded(node, options) &&
|
package/src/queries/testId.ts
CHANGED
|
@@ -14,27 +14,22 @@ import type { CommonQueryOptions } from './options';
|
|
|
14
14
|
|
|
15
15
|
type ByTestIdOptions = CommonQueryOptions & TextMatchOptions;
|
|
16
16
|
|
|
17
|
-
const
|
|
17
|
+
const matchTestId = (
|
|
18
18
|
node: ReactTestInstance,
|
|
19
|
-
|
|
19
|
+
testId: TextMatch,
|
|
20
20
|
options: TextMatchOptions = {}
|
|
21
21
|
) => {
|
|
22
22
|
const { exact, normalizer } = options;
|
|
23
|
-
return matches(
|
|
23
|
+
return matches(testId, node.props.testID, normalizer, exact);
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const queryAllByTestId = (
|
|
27
27
|
instance: ReactTestInstance
|
|
28
|
-
):
|
|
29
|
-
testId: TextMatch,
|
|
30
|
-
queryOptions?: ByTestIdOptions
|
|
31
|
-
) => Array<ReactTestInstance>) =>
|
|
28
|
+
): QueryAllByQuery<TextMatch, ByTestIdOptions> =>
|
|
32
29
|
function queryAllByTestIdFn(testId, queryOptions) {
|
|
33
30
|
return findAll(
|
|
34
31
|
instance,
|
|
35
|
-
(node) =>
|
|
36
|
-
typeof node.type === 'string' &&
|
|
37
|
-
getNodeByTestId(node, testId, queryOptions),
|
|
32
|
+
(node) => matchTestId(node, testId, queryOptions),
|
|
38
33
|
queryOptions
|
|
39
34
|
);
|
|
40
35
|
};
|
package/src/queries/text.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ReactTestInstance } from 'react-test-renderer';
|
|
2
|
-
import { filterNodeByType } from '../helpers/filterNodeByType';
|
|
3
2
|
import { findAll } from '../helpers/findAll';
|
|
4
|
-
import {
|
|
3
|
+
import { isHostText } from '../helpers/host-component-names';
|
|
5
4
|
import { matchTextContent } from '../helpers/matchers/matchTextContent';
|
|
6
5
|
import { TextMatch, TextMatchOptions } from '../matches';
|
|
7
6
|
import { makeQueries } from './makeQueries';
|
|
@@ -19,13 +18,11 @@ type ByTextOptions = CommonQueryOptions & TextMatchOptions;
|
|
|
19
18
|
|
|
20
19
|
const queryAllByText = (
|
|
21
20
|
instance: ReactTestInstance
|
|
22
|
-
):
|
|
21
|
+
): QueryAllByQuery<TextMatch, ByTextOptions> =>
|
|
23
22
|
function queryAllByTextFn(text, options = {}) {
|
|
24
23
|
return findAll(
|
|
25
24
|
instance,
|
|
26
|
-
(node) =>
|
|
27
|
-
filterNodeByType(node, getHostComponentNames().text) &&
|
|
28
|
-
matchTextContent(node, text, options),
|
|
25
|
+
(node) => isHostText(node) && matchTextContent(node, text, options),
|
|
29
26
|
{
|
|
30
27
|
...options,
|
|
31
28
|
matchDeepestOnly: true,
|
package/src/render.tsx
CHANGED
|
@@ -117,7 +117,7 @@ function buildRenderResult(
|
|
|
117
117
|
rerender: update, // alias for `update`
|
|
118
118
|
toJSON: renderer.toJSON,
|
|
119
119
|
debug: debug(instance, renderer),
|
|
120
|
-
get root() {
|
|
120
|
+
get root(): ReactTestInstance {
|
|
121
121
|
return getHostChildren(instance)[0];
|
|
122
122
|
},
|
|
123
123
|
UNSAFE_root: instance,
|