@testing-library/react-native 12.2.1 → 12.3.0
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/build/config.d.ts +1 -0
- package/build/config.js.map +1 -1
- package/build/fireEvent.js +2 -1
- package/build/fireEvent.js.map +1 -1
- package/build/helpers/accessiblity.d.ts +7 -0
- package/build/helpers/accessiblity.js +73 -2
- package/build/helpers/accessiblity.js.map +1 -1
- package/build/helpers/component-tree.d.ts +7 -0
- package/build/helpers/component-tree.js +18 -0
- package/build/helpers/component-tree.js.map +1 -1
- package/build/helpers/format-default.d.ts +1 -2
- package/build/helpers/format-default.js +22 -13
- package/build/helpers/format-default.js.map +1 -1
- package/build/helpers/format.js +1 -4
- package/build/helpers/format.js.map +1 -1
- package/build/helpers/host-component-names.d.ts +5 -0
- package/build/helpers/host-component-names.js +13 -1
- package/build/helpers/host-component-names.js.map +1 -1
- package/build/helpers/matchers/accessibilityState.js +3 -3
- package/build/helpers/matchers/accessibilityState.js.map +1 -1
- package/build/helpers/matchers/accessibilityValue.js +3 -2
- package/build/helpers/matchers/accessibilityValue.js.map +1 -1
- package/build/helpers/matchers/matchLabelText.d.ts +1 -1
- package/build/helpers/matchers/matchLabelText.js +5 -8
- package/build/helpers/matchers/matchLabelText.js.map +1 -1
- package/build/helpers/matchers/matchTextContent.js +2 -2
- package/build/helpers/matchers/matchTextContent.js.map +1 -1
- package/build/helpers/{getTextContent.js → text-content.js} +1 -1
- package/build/helpers/text-content.js.map +1 -0
- package/build/helpers/text-input.d.ts +3 -0
- package/build/helpers/text-input.js +21 -0
- package/build/helpers/text-input.js.map +1 -0
- package/build/matchers/extend-expect.d.js +2 -0
- package/build/matchers/extend-expect.d.js.map +1 -0
- package/build/matchers/extend-expect.d.ts +2 -0
- package/build/matchers/extend-expect.js +26 -0
- package/build/matchers/extend-expect.js.map +1 -0
- package/build/matchers/index.d.ts +9 -0
- package/build/matchers/index.js +75 -0
- package/build/matchers/index.js.map +1 -0
- package/build/matchers/to-be-checked.d.ts +6 -0
- package/build/matchers/to-be-checked.js +31 -0
- package/build/matchers/to-be-checked.js.map +1 -0
- package/build/matchers/to-be-disabled.d.ts +10 -0
- package/build/matchers/to-be-disabled.js +52 -0
- package/build/matchers/to-be-disabled.js.map +1 -0
- package/build/matchers/to-be-empty-element.d.ts +6 -0
- package/build/matchers/to-be-empty-element.js +20 -0
- package/build/matchers/to-be-empty-element.js.map +1 -0
- package/build/matchers/to-be-on-the-screen.d.ts +6 -0
- package/build/matchers/to-be-on-the-screen.js +29 -0
- package/build/matchers/to-be-on-the-screen.js.map +1 -0
- package/build/matchers/to-be-partially-checked.d.ts +6 -0
- package/build/matchers/to-be-partially-checked.js +28 -0
- package/build/matchers/to-be-partially-checked.js.map +1 -0
- package/build/matchers/to-be-visible.d.ts +6 -0
- package/build/matchers/to-be-visible.js +56 -0
- package/build/matchers/to-be-visible.js.map +1 -0
- package/build/matchers/to-have-display-value.d.ts +7 -0
- package/build/matchers/to-have-display-value.js +26 -0
- package/build/matchers/to-have-display-value.js.map +1 -0
- package/build/matchers/to-have-prop.d.ts +6 -0
- package/build/matchers/to-have-prop.js +35 -0
- package/build/matchers/to-have-prop.js.map +1 -0
- package/build/matchers/to-have-text-content.d.ts +7 -0
- package/build/matchers/to-have-text-content.js +21 -0
- package/build/matchers/to-have-text-content.js.map +1 -0
- package/build/matchers/utils.d.ts +18 -0
- package/build/matchers/utils.js +90 -0
- package/build/matchers/utils.js.map +1 -0
- package/build/matches.d.ts +1 -1
- package/build/matches.js.map +1 -1
- package/build/queries/displayValue.js +4 -3
- package/build/queries/displayValue.js.map +1 -1
- package/build/queries/labelText.js +2 -2
- package/build/queries/labelText.js.map +1 -1
- package/build/queries/role.js +1 -1
- package/build/queries/role.js.map +1 -1
- package/build/render.d.ts +12 -48
- package/build/user-event/clear.js +2 -1
- package/build/user-event/clear.js.map +1 -1
- package/build/user-event/press/press.js +2 -1
- package/build/user-event/press/press.js.map +1 -1
- package/build/user-event/type/type.js +2 -1
- package/build/user-event/type/type.js.map +1 -1
- package/build/user-event/utils/index.d.ts +0 -1
- package/build/user-event/utils/index.js +0 -11
- package/build/user-event/utils/index.js.map +1 -1
- package/package.json +6 -23
- package/.DS_Store +0 -0
- package/.codecov.yml +0 -9
- package/.eslintcache +0 -1
- package/.eslintignore +0 -3
- package/.eslintrc +0 -19
- package/.flowconfig +0 -63
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
- package/.github/ISSUE_TEMPLATE/question.md +0 -9
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
- package/.github/actions/setup-deps/action.yml +0 -22
- package/.github/actions/setup-website-deps/action.yml +0 -22
- package/.github/dependabot.yml +0 -10
- package/.github/workflows/deploy-website.yml +0 -36
- package/.github/workflows/example-apps.yml +0 -25
- package/.github/workflows/main.yml +0 -103
- package/.gitignore +0 -11
- package/.prettierrc.js +0 -5
- package/CODE_OF_CONDUCT.md +0 -73
- package/CONTRIBUTING.md +0 -64
- package/babel.config.js +0 -22
- package/build/helpers/getTextContent.js.map +0 -1
- package/build/user-event/utils/host-components.d.ts +0 -2
- package/build/user-event/utils/host-components.js +0 -11
- package/build/user-event/utils/host-components.js.map +0 -1
- package/examples/basic/.expo/README.md +0 -15
- package/examples/basic/.expo/packager-info.json +0 -4
- package/examples/basic/.expo/settings.json +0 -10
- package/examples/basic/.expo-shared/assets.json +0 -4
- package/examples/basic/.gitignore +0 -14
- package/examples/basic/App.tsx +0 -20
- package/examples/basic/README.md +0 -11
- package/examples/basic/__tests__/App.test.tsx +0 -137
- package/examples/basic/app.json +0 -31
- package/examples/basic/assets/adaptive-icon.png +0 -0
- package/examples/basic/assets/favicon.png +0 -0
- package/examples/basic/assets/icon.png +0 -0
- package/examples/basic/assets/splash.png +0 -0
- package/examples/basic/babel.config.js +0 -6
- package/examples/basic/components/Home.tsx +0 -28
- package/examples/basic/components/LoginForm.tsx +0 -138
- package/examples/basic/jest-setup.ts +0 -7
- package/examples/basic/jest.config.js +0 -5
- package/examples/basic/package.json +0 -30
- package/examples/basic/tsconfig.json +0 -7
- package/examples/basic/yarn.lock +0 -7499
- package/examples/react-navigation/README.md +0 -16
- package/examples/react-navigation/babel.config.js +0 -4
- package/examples/react-navigation/jest-setup.js +0 -11
- package/examples/react-navigation/jest.config.js +0 -10
- package/examples/react-navigation/package.json +0 -31
- package/examples/react-navigation/src/App.js +0 -21
- package/examples/react-navigation/src/DrawerNavigator.js +0 -15
- package/examples/react-navigation/src/DrawerNavigator.test.js +0 -42
- package/examples/react-navigation/src/NativeStackNavigator.js +0 -15
- package/examples/react-navigation/src/NativeStackNavigator.test.js +0 -34
- package/examples/react-navigation/src/StackNavigator.js +0 -15
- package/examples/react-navigation/src/StackNavigator.test.js +0 -34
- package/examples/react-navigation/src/TabNavigator.js +0 -15
- package/examples/react-navigation/src/TabNavigator.test.js +0 -21
- package/examples/react-navigation/src/screens/DetailsScreen.js +0 -43
- package/examples/react-navigation/src/screens/DetailsScreen.test.js +0 -27
- package/examples/react-navigation/src/screens/DrawerHomeScreen.js +0 -26
- package/examples/react-navigation/src/screens/HomeScreen.js +0 -48
- package/examples/react-navigation/src/screens/SettingsScreen.js +0 -20
- package/examples/react-navigation/src/test-utils.js +0 -12
- package/examples/react-navigation/yarn.lock +0 -5018
- package/examples/redux/App.js +0 -27
- package/examples/redux/README.md +0 -5
- package/examples/redux/actions/todoActions.js +0 -25
- package/examples/redux/babel.config.js +0 -6
- package/examples/redux/components/AddTodo.js +0 -73
- package/examples/redux/components/AddTodo.test.js +0 -27
- package/examples/redux/components/TodoElem.js +0 -25
- package/examples/redux/components/TodoList.js +0 -29
- package/examples/redux/components/TodoList.test.js +0 -34
- package/examples/redux/index.js +0 -8
- package/examples/redux/jest-setup.js +0 -2
- package/examples/redux/jest.config.js +0 -4
- package/examples/redux/package.json +0 -23
- package/examples/redux/reducers/index.js +0 -6
- package/examples/redux/reducers/todoReducer.js +0 -27
- package/examples/redux/store.js +0 -10
- package/examples/redux/test-utils.js +0 -11
- package/examples/redux/yarn.lock +0 -4819
- package/experiments-app/.expo/README.md +0 -15
- package/experiments-app/.expo/devices.json +0 -3
- package/experiments-app/.expo/packager-info.json +0 -9
- package/experiments-app/.expo/settings.json +0 -9
- package/experiments-app/.gitignore +0 -17
- package/experiments-app/.prettierrc.js +0 -5
- package/experiments-app/app.json +0 -30
- package/experiments-app/assets/adaptive-icon.png +0 -0
- package/experiments-app/assets/favicon.png +0 -0
- package/experiments-app/assets/icon.png +0 -0
- package/experiments-app/assets/splash.png +0 -0
- package/experiments-app/babel.config.js +0 -6
- package/experiments-app/index.js +0 -4
- package/experiments-app/package.json +0 -29
- package/experiments-app/src/App.tsx +0 -31
- package/experiments-app/src/MainScreen.tsx +0 -52
- package/experiments-app/src/experiments.ts +0 -35
- package/experiments-app/src/screens/FlatListEvents.tsx +0 -57
- package/experiments-app/src/screens/ScrollViewEvents.tsx +0 -65
- package/experiments-app/src/screens/SectionListEvents.tsx +0 -91
- package/experiments-app/src/screens/TextInputEventPropagation.tsx +0 -42
- package/experiments-app/src/screens/TextInputEvents.tsx +0 -48
- package/experiments-app/src/utils/helpers.ts +0 -18
- package/experiments-app/tsconfig.json +0 -6
- package/experiments-app/yarn.lock +0 -6709
- package/experiments-rtl/.babelrc +0 -8
- package/experiments-rtl/.eslintrc.json +0 -3
- package/experiments-rtl/.gitignore +0 -35
- package/experiments-rtl/README.md +0 -34
- package/experiments-rtl/jest-setup.js +0 -1
- package/experiments-rtl/jest.config.js +0 -4
- package/experiments-rtl/next.config.js +0 -4
- package/experiments-rtl/package.json +0 -38
- package/experiments-rtl/postcss.config.js +0 -6
- package/experiments-rtl/public/next.svg +0 -1
- package/experiments-rtl/public/vercel.svg +0 -1
- package/experiments-rtl/src/app/__tests__/click.test.tsx +0 -31
- package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +0 -51
- package/experiments-rtl/src/app/globals.css +0 -27
- package/experiments-rtl/src/app/layout.tsx +0 -22
- package/experiments-rtl/src/app/page.tsx +0 -113
- package/experiments-rtl/tailwind.config.ts +0 -20
- package/experiments-rtl/tsconfig.json +0 -28
- package/experiments-rtl/yarn.lock +0 -5418
- package/flow-typed/npm/jest_v26.x.x.js +0 -1218
- package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -81
- package/jest-setup.ts +0 -10
- package/renovate.json +0 -19
- package/scripts/test_react_17 +0 -12
- package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +0 -548
- package/src/__tests__/__snapshots__/render.test.tsx.snap +0 -39
- package/src/__tests__/act.test.tsx +0 -56
- package/src/__tests__/auto-cleanup-skip.test.tsx +0 -39
- package/src/__tests__/auto-cleanup.test.tsx +0 -50
- package/src/__tests__/cleanup.test.tsx +0 -26
- package/src/__tests__/config.test.ts +0 -55
- package/src/__tests__/fireEvent-textInput.test.tsx +0 -154
- package/src/__tests__/fireEvent.test.tsx +0 -485
- package/src/__tests__/host-component-names.test.tsx +0 -109
- package/src/__tests__/host-text-nesting.test.tsx +0 -90
- package/src/__tests__/jest-native.test.tsx +0 -84
- package/src/__tests__/questionsBoard.test.tsx +0 -62
- package/src/__tests__/react-native-api.test.tsx +0 -126
- package/src/__tests__/render-debug.test.tsx +0 -207
- package/src/__tests__/render-stringValidation.test.tsx +0 -157
- package/src/__tests__/render.test.tsx +0 -256
- package/src/__tests__/renderHook.test.tsx +0 -114
- package/src/__tests__/screen.test.tsx +0 -66
- package/src/__tests__/timerUtils.ts +0 -7
- package/src/__tests__/timers.test.ts +0 -27
- package/src/__tests__/waitFor.test.tsx +0 -327
- package/src/__tests__/waitForElementToBeRemoved.test.tsx +0 -151
- package/src/__tests__/within.test.tsx +0 -96
- package/src/act.ts +0 -86
- package/src/cleanup.ts +0 -15
- package/src/config.ts +0 -72
- package/src/fireEvent.ts +0 -159
- package/src/flush-micro-tasks.ts +0 -30
- package/src/helpers/__tests__/accessiblity.test.tsx +0 -373
- package/src/helpers/__tests__/component-tree.test.tsx +0 -226
- package/src/helpers/__tests__/format-default.tsx +0 -114
- package/src/helpers/__tests__/getTextContent.test.tsx +0 -49
- package/src/helpers/__tests__/includeHiddenElements.test.tsx +0 -39
- package/src/helpers/__tests__/query-name.test.ts +0 -10
- package/src/helpers/__tests__/timers.test.ts +0 -8
- package/src/helpers/accessiblity.ts +0 -108
- package/src/helpers/component-tree.ts +0 -94
- package/src/helpers/debugDeep.ts +0 -27
- package/src/helpers/debugShallow.ts +0 -22
- package/src/helpers/deprecation.ts +0 -53
- package/src/helpers/errors.ts +0 -66
- package/src/helpers/findAll.ts +0 -70
- package/src/helpers/format-default.ts +0 -72
- package/src/helpers/format.ts +0 -47
- package/src/helpers/getTextContent.ts +0 -20
- package/src/helpers/host-component-names.tsx +0 -88
- package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +0 -34
- package/src/helpers/matchers/__tests__/matchObject.test.ts +0 -37
- package/src/helpers/matchers/__tests__/matchStringValue.test.ts +0 -15
- package/src/helpers/matchers/accessibilityState.ts +0 -48
- package/src/helpers/matchers/accessibilityValue.ts +0 -24
- package/src/helpers/matchers/matchArrayProp.ts +0 -21
- package/src/helpers/matchers/matchLabelText.ts +0 -50
- package/src/helpers/matchers/matchObjectProp.ts +0 -25
- package/src/helpers/matchers/matchStringProp.ts +0 -23
- package/src/helpers/matchers/matchTextContent.ts +0 -20
- package/src/helpers/pointer-events.ts +0 -27
- package/src/helpers/query-name.ts +0 -4
- package/src/helpers/stringValidation.ts +0 -36
- package/src/helpers/timers.ts +0 -98
- package/src/index.ts +0 -33
- package/src/matches.ts +0 -49
- package/src/pure.ts +0 -27
- package/src/queries/__tests__/a11yState.test.tsx +0 -439
- package/src/queries/__tests__/a11yValue.test.tsx +0 -309
- package/src/queries/__tests__/displayValue.test.tsx +0 -221
- package/src/queries/__tests__/hintText.test.tsx +0 -177
- package/src/queries/__tests__/labelText.test.tsx +0 -242
- package/src/queries/__tests__/makeQueries.test.tsx +0 -235
- package/src/queries/__tests__/placeholderText.test.tsx +0 -136
- package/src/queries/__tests__/role-value.test.tsx +0 -176
- package/src/queries/__tests__/role.test.tsx +0 -824
- package/src/queries/__tests__/testId.test.tsx +0 -200
- package/src/queries/__tests__/text.test.tsx +0 -556
- package/src/queries/a11yState.ts +0 -127
- package/src/queries/a11yValue.ts +0 -127
- package/src/queries/displayValue.ts +0 -71
- package/src/queries/hintText.ts +0 -107
- package/src/queries/labelText.ts +0 -57
- package/src/queries/makeQueries.ts +0 -255
- package/src/queries/options.ts +0 -14
- package/src/queries/placeholderText.ts +0 -72
- package/src/queries/role.ts +0 -131
- package/src/queries/testId.ts +0 -66
- package/src/queries/text.ts +0 -63
- package/src/queries/unsafeProps.ts +0 -76
- package/src/queries/unsafeType.ts +0 -73
- package/src/react-versions.ts +0 -11
- package/src/render-act.ts +0 -19
- package/src/render.tsx +0 -183
- package/src/renderHook.tsx +0 -56
- package/src/screen.ts +0 -123
- package/src/shallow.ts +0 -18
- package/src/test-utils/events.ts +0 -24
- package/src/test-utils/index.ts +0 -1
- package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +0 -269
- package/src/user-event/__tests__/clear.test.tsx +0 -217
- package/src/user-event/clear.ts +0 -59
- package/src/user-event/event-builder/common.ts +0 -66
- package/src/user-event/event-builder/index.ts +0 -7
- package/src/user-event/event-builder/text-input.ts +0 -86
- package/src/user-event/index.ts +0 -18
- package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +0 -117
- package/src/user-event/press/__tests__/longPress.test.tsx +0 -157
- package/src/user-event/press/__tests__/press.real-timers.test.tsx +0 -320
- package/src/user-event/press/__tests__/press.test.tsx +0 -457
- package/src/user-event/press/constants.ts +0 -7
- package/src/user-event/press/index.ts +0 -1
- package/src/user-event/press/press.ts +0 -163
- package/src/user-event/setup/index.ts +0 -2
- package/src/user-event/setup/setup.ts +0 -142
- package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +0 -339
- package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +0 -668
- package/src/user-event/type/__tests__/parseKeys.test.ts +0 -23
- package/src/user-event/type/__tests__/type-managed.test.tsx +0 -120
- package/src/user-event/type/__tests__/type.test.tsx +0 -335
- package/src/user-event/type/index.ts +0 -1
- package/src/user-event/type/parseKeys.ts +0 -41
- package/src/user-event/type/type.ts +0 -138
- package/src/user-event/utils/__tests__/dispatch-event.test.tsx +0 -41
- package/src/user-event/utils/__tests__/wait.test.ts +0 -62
- package/src/user-event/utils/content-size.ts +0 -25
- package/src/user-event/utils/dispatch-event.ts +0 -38
- package/src/user-event/utils/host-components.ts +0 -6
- package/src/user-event/utils/index.ts +0 -6
- package/src/user-event/utils/text-range.ts +0 -4
- package/src/user-event/utils/wait.ts +0 -15
- package/src/user-event/utils/warn-about-real-timers.ts +0 -13
- package/src/waitFor.ts +0 -228
- package/src/waitForElementToBeRemoved.ts +0 -42
- package/src/within.ts +0 -30
- package/tsconfig.json +0 -17
- package/tsconfig.release.json +0 -8
- package/website/.gitignore +0 -20
- package/website/README.md +0 -33
- package/website/docker/.dockerignore +0 -3
- package/website/docker/Dockerfile +0 -9
- package/website/docker/docker-compose.yml +0 -11
- package/website/docs/API.md +0 -940
- package/website/docs/EslintPLluginTestingLibrary.md +0 -28
- package/website/docs/FAQ.md +0 -44
- package/website/docs/GettingStarted.md +0 -100
- package/website/docs/HowShouldIQuery.md +0 -21
- package/website/docs/MigrationV11.md +0 -64
- package/website/docs/MigrationV12.md +0 -67
- package/website/docs/MigrationV2.md +0 -126
- package/website/docs/MigrationV7.md +0 -119
- package/website/docs/MigrationV9.md +0 -67
- package/website/docs/Queries.md +0 -572
- package/website/docs/ReactNavigation.md +0 -371
- package/website/docs/ReduxIntegration.md +0 -137
- package/website/docs/TestingEnvironment.md +0 -154
- package/website/docs/Troubleshooting.md +0 -44
- package/website/docs/UnderstandingAct.md +0 -227
- package/website/docs/UserEvent.md +0 -191
- package/website/docusaurus.config.js +0 -114
- package/website/package.json +0 -31
- package/website/sidebars.js +0 -20
- package/website/src/components/Feature.js +0 -31
- package/website/src/css/custom.css +0 -13
- package/website/src/css/index.module.css +0 -77
- package/website/src/pages/index.js +0 -82
- package/website/static/.nojekyll +0 -0
- package/website/static/css/custom.css +0 -28
- package/website/static/img/hit.png +0 -0
- package/website/static/img/locomotive.png +0 -0
- package/website/static/img/owl.png +0 -0
- package/website/static/img/tools.png +0 -0
- package/website/yarn.lock +0 -7669
- package/yarn.lock +0 -7765
- /package/build/helpers/{getTextContent.d.ts → text-content.d.ts} +0 -0
|
@@ -1,485 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
View,
|
|
4
|
-
TouchableOpacity,
|
|
5
|
-
PanResponder,
|
|
6
|
-
Pressable,
|
|
7
|
-
Text,
|
|
8
|
-
ScrollView,
|
|
9
|
-
TextInput,
|
|
10
|
-
} from 'react-native';
|
|
11
|
-
import { render, fireEvent } from '..';
|
|
12
|
-
|
|
13
|
-
type OnPressComponentProps = {
|
|
14
|
-
onPress: () => void;
|
|
15
|
-
text: string;
|
|
16
|
-
};
|
|
17
|
-
const OnPressComponent = ({ onPress, text }: OnPressComponentProps) => (
|
|
18
|
-
<View>
|
|
19
|
-
<TouchableOpacity onPress={onPress}>
|
|
20
|
-
<Text>{text}</Text>
|
|
21
|
-
</TouchableOpacity>
|
|
22
|
-
</View>
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
type WithoutEventComponentProps = { onPress: () => void };
|
|
26
|
-
const WithoutEventComponent = (_props: WithoutEventComponentProps) => (
|
|
27
|
-
<View>
|
|
28
|
-
<Text>Without event</Text>
|
|
29
|
-
</View>
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
type CustomEventComponentProps = {
|
|
33
|
-
onCustomEvent: () => void;
|
|
34
|
-
};
|
|
35
|
-
const CustomEventComponent = ({ onCustomEvent }: CustomEventComponentProps) => (
|
|
36
|
-
<TouchableOpacity onPress={onCustomEvent}>
|
|
37
|
-
<Text>Custom event component</Text>
|
|
38
|
-
</TouchableOpacity>
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
type MyCustomButtonProps = {
|
|
42
|
-
handlePress: () => void;
|
|
43
|
-
text: string;
|
|
44
|
-
};
|
|
45
|
-
const MyCustomButton = ({ handlePress, text }: MyCustomButtonProps) => (
|
|
46
|
-
<OnPressComponent onPress={handlePress} text={text} />
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
type CustomEventComponentWithCustomNameProps = {
|
|
50
|
-
handlePress: () => void;
|
|
51
|
-
};
|
|
52
|
-
const CustomEventComponentWithCustomName = ({
|
|
53
|
-
handlePress,
|
|
54
|
-
}: CustomEventComponentWithCustomNameProps) => (
|
|
55
|
-
<MyCustomButton handlePress={handlePress} text="Custom component" />
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
describe('fireEvent', () => {
|
|
59
|
-
test('should invoke specified event', () => {
|
|
60
|
-
const onPressMock = jest.fn();
|
|
61
|
-
const { getByText } = render(
|
|
62
|
-
<OnPressComponent onPress={onPressMock} text="Press me" />
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
fireEvent(getByText('Press me'), 'press');
|
|
66
|
-
|
|
67
|
-
expect(onPressMock).toHaveBeenCalled();
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
test('should invoke specified event on parent element', () => {
|
|
71
|
-
const onPressMock = jest.fn();
|
|
72
|
-
const text = 'New press text';
|
|
73
|
-
const { getByText } = render(
|
|
74
|
-
<OnPressComponent onPress={onPressMock} text={text} />
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
fireEvent(getByText(text), 'press');
|
|
78
|
-
expect(onPressMock).toHaveBeenCalled();
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
test('should not fire if the press handler is not passed to children', () => {
|
|
82
|
-
const onPressMock = jest.fn();
|
|
83
|
-
const { getByText } = render(
|
|
84
|
-
// TODO: this functionality is buggy, i.e. it will fail if we wrap this component with a View.
|
|
85
|
-
<WithoutEventComponent onPress={onPressMock} />
|
|
86
|
-
);
|
|
87
|
-
fireEvent(getByText('Without event'), 'press');
|
|
88
|
-
expect(onPressMock).not.toHaveBeenCalled();
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
test('should invoke event with custom name', () => {
|
|
92
|
-
const handlerMock = jest.fn();
|
|
93
|
-
const EVENT_DATA = 'event data';
|
|
94
|
-
|
|
95
|
-
const { getByText } = render(
|
|
96
|
-
<View>
|
|
97
|
-
<CustomEventComponent onCustomEvent={handlerMock} />
|
|
98
|
-
</View>
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
fireEvent(getByText('Custom event component'), 'customEvent', EVENT_DATA);
|
|
102
|
-
|
|
103
|
-
expect(handlerMock).toHaveBeenCalledWith(EVENT_DATA);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
test('fireEvent.press', () => {
|
|
108
|
-
const onPressMock = jest.fn();
|
|
109
|
-
const text = 'Fireevent press';
|
|
110
|
-
const eventData = {
|
|
111
|
-
nativeEvent: {
|
|
112
|
-
pageX: 20,
|
|
113
|
-
pageY: 30,
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
const { getByText } = render(
|
|
117
|
-
<OnPressComponent onPress={onPressMock} text={text} />
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
fireEvent.press(getByText(text), eventData);
|
|
121
|
-
|
|
122
|
-
expect(onPressMock).toHaveBeenCalledWith(eventData);
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test('fireEvent.scroll', () => {
|
|
126
|
-
const onScrollMock = jest.fn();
|
|
127
|
-
const eventData = {
|
|
128
|
-
nativeEvent: {
|
|
129
|
-
contentOffset: {
|
|
130
|
-
y: 200,
|
|
131
|
-
},
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const { getByText } = render(
|
|
136
|
-
<ScrollView onScroll={onScrollMock}>
|
|
137
|
-
<Text>XD</Text>
|
|
138
|
-
</ScrollView>
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
fireEvent.scroll(getByText('XD'), eventData);
|
|
142
|
-
|
|
143
|
-
expect(onScrollMock).toHaveBeenCalledWith(eventData);
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
test('fireEvent.changeText', () => {
|
|
147
|
-
const onChangeTextMock = jest.fn();
|
|
148
|
-
const CHANGE_TEXT = 'content';
|
|
149
|
-
|
|
150
|
-
const { getByPlaceholderText } = render(
|
|
151
|
-
<View>
|
|
152
|
-
<TextInput
|
|
153
|
-
placeholder="Customer placeholder"
|
|
154
|
-
onChangeText={onChangeTextMock}
|
|
155
|
-
/>
|
|
156
|
-
</View>
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
fireEvent.changeText(
|
|
160
|
-
getByPlaceholderText('Customer placeholder'),
|
|
161
|
-
CHANGE_TEXT
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
expect(onChangeTextMock).toHaveBeenCalledWith(CHANGE_TEXT);
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
test('custom component with custom event name', () => {
|
|
168
|
-
const handlePress = jest.fn();
|
|
169
|
-
|
|
170
|
-
const { getByText } = render(
|
|
171
|
-
<CustomEventComponentWithCustomName handlePress={handlePress} />
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
fireEvent(getByText('Custom component'), 'handlePress');
|
|
175
|
-
|
|
176
|
-
expect(handlePress).toHaveBeenCalled();
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
test('event with multiple handler parameters', () => {
|
|
180
|
-
const handlePress = jest.fn();
|
|
181
|
-
|
|
182
|
-
const { getByText } = render(
|
|
183
|
-
<CustomEventComponentWithCustomName handlePress={handlePress} />
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
fireEvent(getByText('Custom component'), 'handlePress', 'param1', 'param2');
|
|
187
|
-
|
|
188
|
-
expect(handlePress).toHaveBeenCalledWith('param1', 'param2');
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
test('should not fire on disabled TouchableOpacity', () => {
|
|
192
|
-
const handlePress = jest.fn();
|
|
193
|
-
const screen = render(
|
|
194
|
-
<View>
|
|
195
|
-
<TouchableOpacity onPress={handlePress} disabled={true}>
|
|
196
|
-
<Text>Trigger</Text>
|
|
197
|
-
</TouchableOpacity>
|
|
198
|
-
</View>
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
202
|
-
expect(handlePress).not.toHaveBeenCalled();
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
test('should not fire on disabled Pressable', () => {
|
|
206
|
-
const handlePress = jest.fn();
|
|
207
|
-
const screen = render(
|
|
208
|
-
<View>
|
|
209
|
-
<Pressable onPress={handlePress} disabled={true}>
|
|
210
|
-
<Text>Trigger</Text>
|
|
211
|
-
</Pressable>
|
|
212
|
-
</View>
|
|
213
|
-
);
|
|
214
|
-
|
|
215
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
216
|
-
expect(handlePress).not.toHaveBeenCalled();
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
test('should not fire inside View with pointerEvents="none"', () => {
|
|
220
|
-
const onPress = jest.fn();
|
|
221
|
-
const screen = render(
|
|
222
|
-
<View pointerEvents="none">
|
|
223
|
-
<Pressable onPress={onPress}>
|
|
224
|
-
<Text>Trigger</Text>
|
|
225
|
-
</Pressable>
|
|
226
|
-
</View>
|
|
227
|
-
);
|
|
228
|
-
|
|
229
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
230
|
-
fireEvent(screen.getByText('Trigger'), 'onPress');
|
|
231
|
-
expect(onPress).not.toHaveBeenCalled();
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
test('should not fire inside View with pointerEvents="box-only"', () => {
|
|
235
|
-
const onPress = jest.fn();
|
|
236
|
-
const screen = render(
|
|
237
|
-
<View pointerEvents="box-only">
|
|
238
|
-
<Pressable onPress={onPress}>
|
|
239
|
-
<Text>Trigger</Text>
|
|
240
|
-
</Pressable>
|
|
241
|
-
</View>
|
|
242
|
-
);
|
|
243
|
-
|
|
244
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
245
|
-
fireEvent(screen.getByText('Trigger'), 'onPress');
|
|
246
|
-
expect(onPress).not.toHaveBeenCalled();
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
test('should fire inside View with pointerEvents="box-none"', () => {
|
|
250
|
-
const onPress = jest.fn();
|
|
251
|
-
const screen = render(
|
|
252
|
-
<View pointerEvents="box-none">
|
|
253
|
-
<Pressable onPress={onPress}>
|
|
254
|
-
<Text>Trigger</Text>
|
|
255
|
-
</Pressable>
|
|
256
|
-
</View>
|
|
257
|
-
);
|
|
258
|
-
|
|
259
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
260
|
-
fireEvent(screen.getByText('Trigger'), 'onPress');
|
|
261
|
-
expect(onPress).toHaveBeenCalledTimes(2);
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
test('should fire inside View with pointerEvents="auto"', () => {
|
|
265
|
-
const onPress = jest.fn();
|
|
266
|
-
const screen = render(
|
|
267
|
-
<View pointerEvents="auto">
|
|
268
|
-
<Pressable onPress={onPress}>
|
|
269
|
-
<Text>Trigger</Text>
|
|
270
|
-
</Pressable>
|
|
271
|
-
</View>
|
|
272
|
-
);
|
|
273
|
-
|
|
274
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
275
|
-
fireEvent(screen.getByText('Trigger'), 'onPress');
|
|
276
|
-
expect(onPress).toHaveBeenCalledTimes(2);
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
test('should not fire deeply inside View with pointerEvents="box-only"', () => {
|
|
280
|
-
const onPress = jest.fn();
|
|
281
|
-
const screen = render(
|
|
282
|
-
<View pointerEvents="box-only">
|
|
283
|
-
<View>
|
|
284
|
-
<Pressable onPress={onPress}>
|
|
285
|
-
<Text>Trigger</Text>
|
|
286
|
-
</Pressable>
|
|
287
|
-
</View>
|
|
288
|
-
</View>
|
|
289
|
-
);
|
|
290
|
-
|
|
291
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
292
|
-
fireEvent(screen.getByText('Trigger'), 'onPress');
|
|
293
|
-
expect(onPress).not.toHaveBeenCalled();
|
|
294
|
-
});
|
|
295
|
-
|
|
296
|
-
test('should fire non-pointer events inside View with pointerEvents="box-none"', () => {
|
|
297
|
-
const onTouchStart = jest.fn();
|
|
298
|
-
const screen = render(
|
|
299
|
-
<View testID="view" pointerEvents="box-none" onTouchStart={onTouchStart} />
|
|
300
|
-
);
|
|
301
|
-
|
|
302
|
-
fireEvent(screen.getByTestId('view'), 'touchStart');
|
|
303
|
-
expect(onTouchStart).toHaveBeenCalled();
|
|
304
|
-
});
|
|
305
|
-
|
|
306
|
-
test('should fire non-touch events inside View with pointerEvents="box-none"', () => {
|
|
307
|
-
const onLayout = jest.fn();
|
|
308
|
-
const screen = render(
|
|
309
|
-
<View testID="view" pointerEvents="box-none" onLayout={onLayout} />
|
|
310
|
-
);
|
|
311
|
-
|
|
312
|
-
fireEvent(screen.getByTestId('view'), 'layout');
|
|
313
|
-
expect(onLayout).toHaveBeenCalled();
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
// This test if pointerEvents="box-only" on composite `Pressable` is blocking
|
|
317
|
-
// the 'press' event on host View rendered by pressable.
|
|
318
|
-
test('should fire on Pressable with pointerEvents="box-only', () => {
|
|
319
|
-
const onPress = jest.fn();
|
|
320
|
-
const screen = render(
|
|
321
|
-
<Pressable testID="pressable" pointerEvents="box-only" onPress={onPress} />
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
fireEvent.press(screen.getByTestId('pressable'));
|
|
325
|
-
expect(onPress).toHaveBeenCalled();
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
test('should pass event up on disabled TouchableOpacity', () => {
|
|
329
|
-
const handleInnerPress = jest.fn();
|
|
330
|
-
const handleOuterPress = jest.fn();
|
|
331
|
-
const screen = render(
|
|
332
|
-
<TouchableOpacity onPress={handleOuterPress}>
|
|
333
|
-
<TouchableOpacity onPress={handleInnerPress} disabled={true}>
|
|
334
|
-
<Text>Inner Trigger</Text>
|
|
335
|
-
</TouchableOpacity>
|
|
336
|
-
</TouchableOpacity>
|
|
337
|
-
);
|
|
338
|
-
|
|
339
|
-
fireEvent.press(screen.getByText('Inner Trigger'));
|
|
340
|
-
expect(handleInnerPress).not.toHaveBeenCalled();
|
|
341
|
-
expect(handleOuterPress).toHaveBeenCalledTimes(1);
|
|
342
|
-
});
|
|
343
|
-
|
|
344
|
-
test('should pass event up on disabled Pressable', () => {
|
|
345
|
-
const handleInnerPress = jest.fn();
|
|
346
|
-
const handleOuterPress = jest.fn();
|
|
347
|
-
const screen = render(
|
|
348
|
-
<Pressable onPress={handleOuterPress}>
|
|
349
|
-
<Pressable onPress={handleInnerPress} disabled={true}>
|
|
350
|
-
<Text>Inner Trigger</Text>
|
|
351
|
-
</Pressable>
|
|
352
|
-
</Pressable>
|
|
353
|
-
);
|
|
354
|
-
|
|
355
|
-
fireEvent.press(screen.getByText('Inner Trigger'));
|
|
356
|
-
expect(handleInnerPress).not.toHaveBeenCalled();
|
|
357
|
-
expect(handleOuterPress).toHaveBeenCalledTimes(1);
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
type TestComponentProps = {
|
|
361
|
-
onPress: () => void;
|
|
362
|
-
disabled?: boolean;
|
|
363
|
-
};
|
|
364
|
-
const TestComponent = ({ onPress }: TestComponentProps) => {
|
|
365
|
-
return (
|
|
366
|
-
<TouchableOpacity onPress={onPress}>
|
|
367
|
-
<Text>Trigger Test</Text>
|
|
368
|
-
</TouchableOpacity>
|
|
369
|
-
);
|
|
370
|
-
};
|
|
371
|
-
|
|
372
|
-
test('is not fooled by non-native disabled prop', () => {
|
|
373
|
-
const handlePress = jest.fn();
|
|
374
|
-
const screen = render(
|
|
375
|
-
<TestComponent onPress={handlePress} disabled={true} />
|
|
376
|
-
);
|
|
377
|
-
|
|
378
|
-
fireEvent.press(screen.getByText('Trigger Test'));
|
|
379
|
-
expect(handlePress).toHaveBeenCalledTimes(1);
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
type TestChildTouchableComponentProps = {
|
|
383
|
-
onPress: () => void;
|
|
384
|
-
someProp: boolean;
|
|
385
|
-
};
|
|
386
|
-
function TestChildTouchableComponent({
|
|
387
|
-
onPress,
|
|
388
|
-
someProp,
|
|
389
|
-
}: TestChildTouchableComponentProps) {
|
|
390
|
-
return (
|
|
391
|
-
<View>
|
|
392
|
-
<TouchableOpacity onPress={onPress} disabled={someProp}>
|
|
393
|
-
<Text>Trigger</Text>
|
|
394
|
-
</TouchableOpacity>
|
|
395
|
-
</View>
|
|
396
|
-
);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
test('is not fooled by non-responder wrapping host elements', () => {
|
|
400
|
-
const handlePress = jest.fn();
|
|
401
|
-
|
|
402
|
-
const screen = render(
|
|
403
|
-
<View>
|
|
404
|
-
<TestChildTouchableComponent onPress={handlePress} someProp={true} />
|
|
405
|
-
</View>
|
|
406
|
-
);
|
|
407
|
-
|
|
408
|
-
fireEvent.press(screen.getByText('Trigger'));
|
|
409
|
-
expect(handlePress).not.toHaveBeenCalled();
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
type TestDraggableComponentProps = { onDrag: () => void };
|
|
413
|
-
function TestDraggableComponent({ onDrag }: TestDraggableComponentProps) {
|
|
414
|
-
const responderHandlers = PanResponder.create({
|
|
415
|
-
onMoveShouldSetPanResponder: (_evt, _gestureState) => true,
|
|
416
|
-
onPanResponderMove: onDrag,
|
|
417
|
-
}).panHandlers;
|
|
418
|
-
|
|
419
|
-
return (
|
|
420
|
-
<View {...responderHandlers}>
|
|
421
|
-
<Text>Trigger</Text>
|
|
422
|
-
</View>
|
|
423
|
-
);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
test('has only onMove', () => {
|
|
427
|
-
const handleDrag = jest.fn();
|
|
428
|
-
|
|
429
|
-
const screen = render(<TestDraggableComponent onDrag={handleDrag} />);
|
|
430
|
-
|
|
431
|
-
fireEvent(screen.getByText('Trigger'), 'responderMove', {
|
|
432
|
-
touchHistory: { mostRecentTimeStamp: '2', touchBank: [] },
|
|
433
|
-
});
|
|
434
|
-
expect(handleDrag).toHaveBeenCalled();
|
|
435
|
-
});
|
|
436
|
-
|
|
437
|
-
// Those events ideally should be triggered through `fireEvent.scroll`, but they are handled at the
|
|
438
|
-
// native level, so we need to support manually triggering them
|
|
439
|
-
describe('native events', () => {
|
|
440
|
-
test('triggers onScrollBeginDrag', () => {
|
|
441
|
-
const onScrollBeginDragSpy = jest.fn();
|
|
442
|
-
const { getByTestId } = render(
|
|
443
|
-
<ScrollView testID="test-id" onScrollBeginDrag={onScrollBeginDragSpy} />
|
|
444
|
-
);
|
|
445
|
-
|
|
446
|
-
fireEvent(getByTestId('test-id'), 'onScrollBeginDrag');
|
|
447
|
-
expect(onScrollBeginDragSpy).toHaveBeenCalled();
|
|
448
|
-
});
|
|
449
|
-
|
|
450
|
-
test('triggers onScrollEndDrag', () => {
|
|
451
|
-
const onScrollEndDragSpy = jest.fn();
|
|
452
|
-
const { getByTestId } = render(
|
|
453
|
-
<ScrollView testID="test-id" onScrollEndDrag={onScrollEndDragSpy} />
|
|
454
|
-
);
|
|
455
|
-
|
|
456
|
-
fireEvent(getByTestId('test-id'), 'onScrollEndDrag');
|
|
457
|
-
expect(onScrollEndDragSpy).toHaveBeenCalled();
|
|
458
|
-
});
|
|
459
|
-
|
|
460
|
-
test('triggers onMomentumScrollBegin', () => {
|
|
461
|
-
const onMomentumScrollBeginSpy = jest.fn();
|
|
462
|
-
const { getByTestId } = render(
|
|
463
|
-
<ScrollView
|
|
464
|
-
testID="test-id"
|
|
465
|
-
onMomentumScrollBegin={onMomentumScrollBeginSpy}
|
|
466
|
-
/>
|
|
467
|
-
);
|
|
468
|
-
|
|
469
|
-
fireEvent(getByTestId('test-id'), 'onMomentumScrollBegin');
|
|
470
|
-
expect(onMomentumScrollBeginSpy).toHaveBeenCalled();
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
test('triggers onMomentumScrollEnd', () => {
|
|
474
|
-
const onMomentumScrollEndSpy = jest.fn();
|
|
475
|
-
const { getByTestId } = render(
|
|
476
|
-
<ScrollView
|
|
477
|
-
testID="test-id"
|
|
478
|
-
onMomentumScrollEnd={onMomentumScrollEndSpy}
|
|
479
|
-
/>
|
|
480
|
-
);
|
|
481
|
-
|
|
482
|
-
fireEvent(getByTestId('test-id'), 'onMomentumScrollEnd');
|
|
483
|
-
expect(onMomentumScrollEndSpy).toHaveBeenCalled();
|
|
484
|
-
});
|
|
485
|
-
});
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { View } from 'react-native';
|
|
3
|
-
import TestRenderer from 'react-test-renderer';
|
|
4
|
-
import { configureInternal, getConfig } from '../config';
|
|
5
|
-
import {
|
|
6
|
-
getHostComponentNames,
|
|
7
|
-
configureHostComponentNamesIfNeeded,
|
|
8
|
-
} from '../helpers/host-component-names';
|
|
9
|
-
import { act, render } from '..';
|
|
10
|
-
|
|
11
|
-
const mockCreate = jest.spyOn(TestRenderer, 'create') as jest.Mock;
|
|
12
|
-
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
mockCreate.mockReset();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
describe('getHostComponentNames', () => {
|
|
18
|
-
test('returns host component names from internal config', () => {
|
|
19
|
-
configureInternal({
|
|
20
|
-
hostComponentNames: {
|
|
21
|
-
text: 'banana',
|
|
22
|
-
textInput: 'banana',
|
|
23
|
-
switch: 'banana',
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
expect(getHostComponentNames()).toEqual({
|
|
28
|
-
text: 'banana',
|
|
29
|
-
textInput: 'banana',
|
|
30
|
-
switch: 'banana',
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
test('detects host component names if not present in internal config', () => {
|
|
35
|
-
expect(getConfig().hostComponentNames).toBeUndefined();
|
|
36
|
-
|
|
37
|
-
const hostComponentNames = getHostComponentNames();
|
|
38
|
-
|
|
39
|
-
expect(hostComponentNames).toEqual({
|
|
40
|
-
text: 'Text',
|
|
41
|
-
textInput: 'TextInput',
|
|
42
|
-
switch: 'RCTSwitch',
|
|
43
|
-
});
|
|
44
|
-
expect(getConfig().hostComponentNames).toBe(hostComponentNames);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Repro test for case when user indirectly triggers `getHostComponentNames` calls from
|
|
48
|
-
// explicit `act` wrapper.
|
|
49
|
-
// See: https://github.com/callstack/react-native-testing-library/issues/1302
|
|
50
|
-
// and https://github.com/callstack/react-native-testing-library/issues/1305
|
|
51
|
-
test('does not throw when wrapped in act after render has been called', () => {
|
|
52
|
-
render(<View />);
|
|
53
|
-
expect(() =>
|
|
54
|
-
act(() => {
|
|
55
|
-
getHostComponentNames();
|
|
56
|
-
})
|
|
57
|
-
).not.toThrow();
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
describe('configureHostComponentNamesIfNeeded', () => {
|
|
62
|
-
test('updates internal config with host component names when they are not defined', () => {
|
|
63
|
-
expect(getConfig().hostComponentNames).toBeUndefined();
|
|
64
|
-
|
|
65
|
-
configureHostComponentNamesIfNeeded();
|
|
66
|
-
|
|
67
|
-
expect(getConfig().hostComponentNames).toEqual({
|
|
68
|
-
text: 'Text',
|
|
69
|
-
textInput: 'TextInput',
|
|
70
|
-
switch: 'RCTSwitch',
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
test('does not update internal config when host component names are already configured', () => {
|
|
75
|
-
configureInternal({
|
|
76
|
-
hostComponentNames: {
|
|
77
|
-
text: 'banana',
|
|
78
|
-
textInput: 'banana',
|
|
79
|
-
switch: 'banana',
|
|
80
|
-
},
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
configureHostComponentNamesIfNeeded();
|
|
84
|
-
|
|
85
|
-
expect(getConfig().hostComponentNames).toEqual({
|
|
86
|
-
text: 'banana',
|
|
87
|
-
textInput: 'banana',
|
|
88
|
-
switch: 'banana',
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
test('throw an error when autodetection fails', () => {
|
|
93
|
-
const renderer = TestRenderer.create(<View />);
|
|
94
|
-
|
|
95
|
-
mockCreate.mockReturnValue({
|
|
96
|
-
root: renderer.root,
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
expect(() => configureHostComponentNamesIfNeeded())
|
|
100
|
-
.toThrowErrorMatchingInlineSnapshot(`
|
|
101
|
-
"Trying to detect host component names triggered the following error:
|
|
102
|
-
|
|
103
|
-
Unable to find an element with testID: text
|
|
104
|
-
|
|
105
|
-
There seems to be an issue with your configuration that prevents React Native Testing Library from working correctly.
|
|
106
|
-
Please check if you are using compatible versions of React Native and React Native Testing Library."
|
|
107
|
-
`);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { Text, Pressable, View } from 'react-native';
|
|
3
|
-
import { render, within } from '../pure';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Our queries interact differently with composite and host elements, and some specific cases require us
|
|
7
|
-
* to crawl up the tree to a Text composite element to be able to traverse it down again. Going up the tree
|
|
8
|
-
* is a dangerous behaviour because we could take the risk of then traversing a sibling node to the original one.
|
|
9
|
-
* This test suite is designed to be able to test as many different combinations, as a safety net.
|
|
10
|
-
* Specific cases should still be tested within the relevant file (for instance an edge case with `within` should have
|
|
11
|
-
* an explicit test in the within test suite)
|
|
12
|
-
*/
|
|
13
|
-
describe('nested text handling', () => {
|
|
14
|
-
test('within same node', () => {
|
|
15
|
-
const view = render(<Text testID="subject">Hello</Text>);
|
|
16
|
-
expect(within(view.getByTestId('subject')).getByText('Hello')).toBeTruthy();
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
test('role with direct text children', () => {
|
|
20
|
-
const view = render(<Text accessibilityRole="header">About</Text>);
|
|
21
|
-
|
|
22
|
-
expect(view.getByRole('header', { name: 'About' })).toBeTruthy();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test('nested text with child with role', () => {
|
|
26
|
-
const view = render(
|
|
27
|
-
<Text>
|
|
28
|
-
<Text testID="child" accessibilityRole="header">
|
|
29
|
-
About
|
|
30
|
-
</Text>
|
|
31
|
-
</Text>
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
expect(view.getByRole('header', { name: 'About' }).props.testID).toBe(
|
|
35
|
-
'child'
|
|
36
|
-
);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('pressable within View, with text child', () => {
|
|
40
|
-
const view = render(
|
|
41
|
-
<View>
|
|
42
|
-
<Pressable testID="pressable" accessibilityRole="button">
|
|
43
|
-
<Text>Save</Text>
|
|
44
|
-
</Pressable>
|
|
45
|
-
</View>
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
expect(view.getByRole('button', { name: 'Save' }).props.testID).toBe(
|
|
49
|
-
'pressable'
|
|
50
|
-
);
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test('pressable within View, with text child within view', () => {
|
|
54
|
-
const view = render(
|
|
55
|
-
<View>
|
|
56
|
-
<Pressable testID="pressable" accessibilityRole="button">
|
|
57
|
-
<View>
|
|
58
|
-
<Text>Save</Text>
|
|
59
|
-
</View>
|
|
60
|
-
</Pressable>
|
|
61
|
-
</View>
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
expect(view.getByRole('button', { name: 'Save' }).props.testID).toBe(
|
|
65
|
-
'pressable'
|
|
66
|
-
);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test('Text within pressable', () => {
|
|
70
|
-
const view = render(
|
|
71
|
-
<Pressable testID="pressable" accessibilityRole="button">
|
|
72
|
-
<Text testID="text">Save</Text>
|
|
73
|
-
</Pressable>
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
expect(view.getByText('Save').props.testID).toBe('text');
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test('Text within view within pressable', () => {
|
|
80
|
-
const view = render(
|
|
81
|
-
<Pressable testID="pressable" accessibilityRole="button">
|
|
82
|
-
<View>
|
|
83
|
-
<Text testID="text">Save</Text>
|
|
84
|
-
</View>
|
|
85
|
-
</Pressable>
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
expect(view.getByText('Save').props.testID).toBe('text');
|
|
89
|
-
});
|
|
90
|
-
});
|