@testing-library/react-native 12.1.1 → 12.1.3
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/.DS_Store +0 -0
- package/.codecov.yml +9 -0
- package/.eslintcache +1 -0
- package/.eslintignore +2 -0
- package/.eslintrc +19 -0
- package/.flowconfig +63 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
- package/.github/ISSUE_TEMPLATE/question.md +9 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +10 -0
- package/.github/actions/setup-deps/action.yml +22 -0
- package/.github/actions/setup-website-deps/action.yml +22 -0
- package/.github/dependabot.yml +10 -0
- package/.github/workflows/deploy-website.yml +36 -0
- package/.github/workflows/example-apps.yml +25 -0
- package/.github/workflows/main.yml +103 -0
- package/.gitignore +11 -0
- package/.prettierrc.js +5 -0
- package/CODE_OF_CONDUCT.md +73 -0
- package/CONTRIBUTING.md +64 -0
- package/README.md +8 -7
- package/babel.config.js +22 -0
- package/build/act.js.map +1 -1
- package/build/cleanup.js.map +1 -1
- package/build/config.d.ts +1 -0
- package/build/config.js.map +1 -1
- package/build/fireEvent.d.ts +13 -5
- package/build/fireEvent.js +57 -48
- package/build/fireEvent.js.map +1 -1
- package/build/flush-micro-tasks.d.ts +19 -0
- package/build/flush-micro-tasks.js +36 -0
- package/build/flush-micro-tasks.js.map +1 -0
- package/build/helpers/accessiblity.js +3 -1
- package/build/helpers/accessiblity.js.map +1 -1
- package/build/helpers/component-tree.d.ts +0 -15
- package/build/helpers/component-tree.js +0 -45
- package/build/helpers/component-tree.js.map +1 -1
- package/build/helpers/deprecation.d.ts +1 -0
- package/build/helpers/deprecation.js +16 -0
- package/build/helpers/deprecation.js.map +1 -1
- package/build/helpers/errors.d.ts +0 -4
- package/build/helpers/errors.js +1 -25
- package/build/helpers/errors.js.map +1 -1
- package/build/helpers/findAll.js.map +1 -1
- package/build/helpers/format-default.js.map +1 -1
- package/build/helpers/format.js.map +1 -1
- package/build/helpers/host-component-names.js +4 -1
- package/build/helpers/host-component-names.js.map +1 -1
- package/build/helpers/matchers/matchLabelText.js.map +1 -1
- package/build/helpers/pointer-events.d.ts +9 -0
- package/build/helpers/pointer-events.js +25 -0
- package/build/helpers/pointer-events.js.map +1 -0
- package/build/helpers/stringValidation.js.map +1 -1
- package/build/helpers/timers.js.map +1 -1
- package/build/index.js +2 -2
- package/build/index.js.map +1 -1
- package/build/matches.js.map +1 -1
- package/build/pure.d.ts +1 -1
- package/build/pure.js.map +1 -1
- package/build/queries/a11yState.js.map +1 -1
- package/build/queries/a11yValue.js.map +1 -1
- package/build/queries/displayValue.js.map +1 -1
- package/build/queries/hintText.js.map +1 -1
- package/build/queries/labelText.js.map +1 -1
- package/build/queries/makeQueries.js.map +1 -1
- package/build/queries/placeholderText.js.map +1 -1
- package/build/queries/role.js.map +1 -1
- package/build/queries/testId.js.map +1 -1
- package/build/queries/text.js.map +1 -1
- package/build/queries/unsafeProps.js.map +1 -1
- package/build/render.d.ts +171 -12
- package/build/render.js +11 -4
- package/build/render.js.map +1 -1
- package/build/renderHook.d.ts +3 -6
- package/build/renderHook.js +4 -3
- package/build/renderHook.js.map +1 -1
- package/build/shallow.js.map +1 -1
- package/build/test-utils/events.d.ts +10 -0
- package/build/test-utils/events.js +27 -0
- package/build/test-utils/events.js.map +1 -0
- package/build/test-utils/index.d.ts +1 -0
- package/build/test-utils/index.js +17 -0
- package/build/test-utils/index.js.map +1 -0
- package/build/user-event/event-builder/common.d.ts +45 -0
- package/build/user-event/event-builder/common.js +58 -0
- package/build/user-event/event-builder/common.js.map +1 -0
- package/build/user-event/event-builder/index.d.ts +32 -0
- package/build/user-event/event-builder/index.js +12 -0
- package/build/user-event/event-builder/index.js.map +1 -0
- package/build/user-event/index.d.ts +9 -0
- package/build/user-event/index.js +16 -0
- package/build/user-event/index.js.map +1 -0
- package/build/user-event/press/constants.d.ts +2 -0
- package/build/user-event/press/constants.js +16 -0
- package/build/user-event/press/constants.js.map +1 -0
- package/build/user-event/press/index.d.ts +1 -0
- package/build/user-event/press/index.js +19 -0
- package/build/user-event/press/index.js.map +1 -0
- package/build/user-event/press/press.d.ts +7 -0
- package/build/user-event/press/press.js +106 -0
- package/build/user-event/press/press.js.map +1 -0
- package/build/user-event/press/utils/warnAboutRealTimers.d.ts +1 -0
- package/build/user-event/press/utils/warnAboutRealTimers.js +14 -0
- package/build/user-event/press/utils/warnAboutRealTimers.js.map +1 -0
- package/build/user-event/setup/index.d.ts +2 -0
- package/build/user-event/setup/index.js +13 -0
- package/build/user-event/setup/index.js.map +1 -0
- package/build/user-event/setup/setup.d.ts +39 -0
- package/build/user-event/setup/setup.js +56 -0
- package/build/user-event/setup/setup.js.map +1 -0
- package/build/user-event/type/index.d.ts +1 -0
- package/build/user-event/type/index.js +13 -0
- package/build/user-event/type/index.js.map +1 -0
- package/build/user-event/type/type.d.ts +3 -0
- package/build/user-event/type/type.js +18 -0
- package/build/user-event/type/type.js.map +1 -0
- package/build/user-event/utils/events.d.ts +9 -0
- package/build/user-event/utils/events.js +44 -0
- package/build/user-event/utils/events.js.map +1 -0
- package/build/user-event/utils/index.d.ts +2 -0
- package/build/user-event/utils/index.js +28 -0
- package/build/user-event/utils/index.js.map +1 -0
- package/build/user-event/utils/wait.d.ts +2 -0
- package/build/user-event/utils/wait.js +14 -0
- package/build/user-event/utils/wait.js.map +1 -0
- package/build/waitFor.js +3 -3
- package/build/waitFor.js.map +1 -1
- package/build/waitForElementToBeRemoved.js.map +1 -1
- package/examples/basic/.expo-shared/assets.json +4 -0
- package/examples/basic/.gitignore +14 -0
- package/examples/basic/App.tsx +20 -0
- package/examples/basic/README.md +11 -0
- package/examples/basic/__tests__/App.test.tsx +119 -0
- package/examples/basic/app.json +31 -0
- 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 +6 -0
- package/examples/basic/components/Home.tsx +28 -0
- package/examples/basic/components/LoginForm.tsx +138 -0
- package/examples/basic/jest-setup.ts +7 -0
- package/examples/basic/jest.config.js +5 -0
- package/examples/basic/package.json +30 -0
- package/examples/basic/tsconfig.json +7 -0
- package/examples/react-navigation/README.md +14 -0
- package/examples/react-navigation/babel.config.js +4 -0
- package/examples/react-navigation/jest-setup.js +11 -0
- package/examples/react-navigation/jest.config.js +10 -0
- package/examples/react-navigation/package.json +31 -0
- package/examples/react-navigation/src/App.js +21 -0
- package/examples/react-navigation/src/DrawerNavigator.js +15 -0
- package/examples/react-navigation/src/DrawerNavigator.test.js +42 -0
- package/examples/react-navigation/src/NativeStackNavigator.js +15 -0
- package/examples/react-navigation/src/NativeStackNavigator.test.js +34 -0
- package/examples/react-navigation/src/StackNavigator.js +15 -0
- package/examples/react-navigation/src/StackNavigator.test.js +34 -0
- package/examples/react-navigation/src/TabNavigator.js +15 -0
- package/examples/react-navigation/src/TabNavigator.test.js +21 -0
- package/examples/react-navigation/src/screens/DetailsScreen.js +43 -0
- package/examples/react-navigation/src/screens/DetailsScreen.test.js +27 -0
- package/examples/react-navigation/src/screens/DrawerHomeScreen.js +26 -0
- package/examples/react-navigation/src/screens/HomeScreen.js +48 -0
- package/examples/react-navigation/src/screens/SettingsScreen.js +20 -0
- package/examples/react-navigation/src/test-utils.js +12 -0
- package/examples/redux/App.js +27 -0
- package/examples/redux/actions/todoActions.js +25 -0
- package/examples/redux/babel.config.js +6 -0
- package/examples/redux/components/AddTodo.js +73 -0
- package/examples/redux/components/AddTodo.test.js +27 -0
- package/examples/redux/components/TodoElem.js +25 -0
- package/examples/redux/components/TodoList.js +29 -0
- package/examples/redux/components/TodoList.test.js +34 -0
- package/examples/redux/index.js +8 -0
- package/examples/redux/jest-setup.js +2 -0
- package/examples/redux/jest.config.js +4 -0
- package/examples/redux/package.json +23 -0
- package/examples/redux/reducers/index.js +6 -0
- package/examples/redux/reducers/todoReducer.js +27 -0
- package/examples/redux/store.js +10 -0
- package/examples/redux/test-utils.js +11 -0
- package/experiments-app/.expo/README.md +15 -0
- package/experiments-app/.expo/devices.json +3 -0
- package/experiments-app/.expo/packager-info.json +9 -0
- package/experiments-app/.expo/settings.json +9 -0
- package/experiments-app/.gitignore +17 -0
- package/experiments-app/.prettierrc.js +5 -0
- package/experiments-app/app.json +30 -0
- 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 +6 -0
- package/experiments-app/index.js +4 -0
- package/experiments-app/package.json +31 -0
- package/experiments-app/src/App.tsx +31 -0
- package/experiments-app/src/MainScreen.tsx +51 -0
- package/experiments-app/src/experiments.ts +17 -0
- package/experiments-app/src/screens/TextInputEventPropagation.tsx +54 -0
- package/experiments-app/src/screens/TextInputEvents.tsx +50 -0
- package/experiments-app/src/utils/helpers.ts +8 -0
- package/experiments-app/tsconfig.json +6 -0
- package/experiments-app/yarn.lock +6913 -0
- package/flow-typed/npm/jest_v26.x.x.js +1218 -0
- package/flow-typed/npm/react-test-renderer_v16.x.x.js +81 -0
- package/jest-setup.ts +10 -0
- package/package.json +6 -6
- package/renovate.json +19 -0
- package/scripts/test_react_17 +12 -0
- package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +548 -0
- package/src/__tests__/__snapshots__/render.test.tsx.snap +39 -0
- package/src/__tests__/act.test.tsx +52 -0
- package/src/__tests__/auto-cleanup-skip.test.tsx +39 -0
- package/src/__tests__/auto-cleanup.test.tsx +50 -0
- package/src/__tests__/cleanup.test.tsx +26 -0
- package/src/__tests__/config.test.ts +55 -0
- package/src/__tests__/fireEvent-textInput.test.tsx +154 -0
- package/src/__tests__/fireEvent.test.tsx +485 -0
- package/src/__tests__/host-component-names.test.tsx +109 -0
- package/src/__tests__/host-text-nesting.test.tsx +90 -0
- package/src/__tests__/jest-native.test.tsx +84 -0
- package/src/__tests__/questionsBoard.test.tsx +62 -0
- package/src/__tests__/react-native-api.test.tsx +126 -0
- package/src/__tests__/render-debug.test.tsx +207 -0
- package/src/__tests__/render-stringValidation.test.tsx +157 -0
- package/src/__tests__/render.test.tsx +256 -0
- package/src/__tests__/renderHook.test.tsx +114 -0
- package/src/__tests__/screen.test.tsx +66 -0
- package/src/__tests__/timerUtils.ts +7 -0
- package/src/__tests__/timers.test.ts +27 -0
- package/src/__tests__/waitFor.test.tsx +327 -0
- package/src/__tests__/waitForElementToBeRemoved.test.tsx +151 -0
- package/src/__tests__/within.test.tsx +96 -0
- package/src/act.ts +86 -0
- package/src/cleanup.ts +15 -0
- package/src/config.ts +72 -0
- package/src/fireEvent.ts +163 -0
- package/src/flush-micro-tasks.ts +30 -0
- package/src/helpers/__tests__/accessiblity.test.tsx +373 -0
- package/src/helpers/__tests__/component-tree.test.tsx +226 -0
- package/src/helpers/__tests__/format-default.tsx +114 -0
- package/src/helpers/__tests__/getTextContent.test.tsx +49 -0
- package/src/helpers/__tests__/includeHiddenElements.test.tsx +39 -0
- package/src/helpers/__tests__/query-name.test.ts +10 -0
- package/src/helpers/__tests__/timers.test.ts +8 -0
- package/src/helpers/accessiblity.ts +108 -0
- package/src/helpers/component-tree.ts +89 -0
- package/src/helpers/debugDeep.ts +27 -0
- package/src/helpers/debugShallow.ts +22 -0
- package/src/helpers/deprecation.ts +53 -0
- package/src/helpers/errors.ts +66 -0
- package/src/helpers/filterNodeByType.ts +7 -0
- package/src/helpers/findAll.ts +68 -0
- package/src/helpers/format-default.ts +72 -0
- package/src/helpers/format.ts +47 -0
- package/src/helpers/getTextContent.ts +20 -0
- package/src/helpers/host-component-names.tsx +67 -0
- package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +34 -0
- package/src/helpers/matchers/__tests__/matchObject.test.ts +37 -0
- package/src/helpers/matchers/__tests__/matchStringValue.test.ts +15 -0
- package/src/helpers/matchers/accessibilityState.ts +48 -0
- package/src/helpers/matchers/accessibilityValue.ts +24 -0
- package/src/helpers/matchers/matchArrayProp.ts +21 -0
- package/src/helpers/matchers/matchLabelText.ts +51 -0
- package/src/helpers/matchers/matchObjectProp.ts +25 -0
- package/src/helpers/matchers/matchStringProp.ts +23 -0
- package/src/helpers/matchers/matchTextContent.ts +20 -0
- package/src/helpers/pointer-events.ts +27 -0
- package/src/helpers/query-name.ts +4 -0
- package/src/helpers/stringValidation.ts +36 -0
- package/src/helpers/timers.ts +98 -0
- package/src/index.ts +33 -0
- package/src/matches.ts +49 -0
- package/src/pure.ts +25 -0
- package/src/queries/__tests__/a11yState.test.tsx +439 -0
- package/src/queries/__tests__/a11yValue.test.tsx +309 -0
- package/src/queries/__tests__/displayValue.test.tsx +221 -0
- package/src/queries/__tests__/hintText.test.tsx +177 -0
- package/src/queries/__tests__/labelText.test.tsx +242 -0
- package/src/queries/__tests__/makeQueries.test.tsx +235 -0
- package/src/queries/__tests__/placeholderText.test.tsx +136 -0
- package/src/queries/__tests__/role-value.test.tsx +176 -0
- package/src/queries/__tests__/role.test.tsx +824 -0
- package/src/queries/__tests__/testId.test.tsx +200 -0
- package/src/queries/__tests__/text.test.tsx +556 -0
- package/src/queries/a11yState.ts +131 -0
- package/src/queries/a11yValue.ts +131 -0
- package/src/queries/displayValue.ts +78 -0
- package/src/queries/hintText.ts +112 -0
- package/src/queries/labelText.ts +59 -0
- package/src/queries/makeQueries.ts +255 -0
- package/src/queries/options.ts +14 -0
- package/src/queries/placeholderText.ts +79 -0
- package/src/queries/role.ts +132 -0
- package/src/queries/testId.ts +71 -0
- package/src/queries/text.ts +66 -0
- package/src/queries/unsafeProps.ts +76 -0
- package/src/queries/unsafeType.ts +73 -0
- package/src/react-versions.ts +11 -0
- package/src/render-act.ts +19 -0
- package/src/render.tsx +183 -0
- package/src/renderHook.tsx +56 -0
- package/src/screen.ts +123 -0
- package/src/shallow.ts +18 -0
- package/src/test-utils/events.ts +24 -0
- package/src/test-utils/index.ts +1 -0
- package/src/user-event/event-builder/common.ts +50 -0
- package/src/user-event/event-builder/index.ts +5 -0
- package/src/user-event/index.ts +14 -0
- package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +115 -0
- package/src/user-event/press/__tests__/longPress.test.tsx +157 -0
- package/src/user-event/press/__tests__/press.real-timers.test.tsx +318 -0
- package/src/user-event/press/__tests__/press.test.tsx +422 -0
- package/src/user-event/press/constants.ts +7 -0
- package/src/user-event/press/index.ts +1 -0
- package/src/user-event/press/press.ts +134 -0
- package/src/user-event/press/utils/warnAboutRealTimers.ts +6 -0
- package/src/user-event/setup/index.ts +2 -0
- package/src/user-event/setup/setup.ts +93 -0
- package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +26 -0
- package/src/user-event/type/__tests__/type.test.tsx +63 -0
- package/src/user-event/type/index.ts +1 -0
- package/src/user-event/type/type.ts +20 -0
- package/src/user-event/utils/__tests__/wait.test.ts +63 -0
- package/src/user-event/utils/events.ts +54 -0
- package/src/user-event/utils/index.ts +2 -0
- package/src/user-event/utils/wait.ts +15 -0
- package/src/waitFor.ts +228 -0
- package/src/waitForElementToBeRemoved.ts +42 -0
- package/src/within.ts +30 -0
- package/tsconfig.json +17 -0
- package/tsconfig.release.json +8 -0
- package/website/.gitignore +20 -0
- package/website/README.md +33 -0
- package/website/docker/.dockerignore +3 -0
- package/website/docker/Dockerfile +9 -0
- package/website/docker/docker-compose.yml +11 -0
- package/website/docs/API.md +946 -0
- package/website/docs/EslintPLluginTestingLibrary.md +28 -0
- package/website/docs/FAQ.md +44 -0
- package/website/docs/GettingStarted.md +100 -0
- package/website/docs/HowShouldIQuery.md +21 -0
- package/website/docs/MigrationV11.md +64 -0
- package/website/docs/MigrationV12.md +67 -0
- package/website/docs/MigrationV2.md +126 -0
- package/website/docs/MigrationV7.md +119 -0
- package/website/docs/MigrationV9.md +67 -0
- package/website/docs/Queries.md +567 -0
- package/website/docs/ReactNavigation.md +371 -0
- package/website/docs/ReduxIntegration.md +137 -0
- package/website/docs/TestingEnvironment.md +154 -0
- package/website/docs/Troubleshooting.md +44 -0
- package/website/docs/UnderstandingAct.md +227 -0
- package/website/docs/UserEvent.md +66 -0
- package/website/docusaurus.config.js +114 -0
- package/website/package.json +31 -0
- package/website/sidebars.js +20 -0
- package/website/src/components/Feature.js +31 -0
- package/website/src/css/custom.css +13 -0
- package/website/src/css/index.module.css +77 -0
- package/website/src/pages/index.js +82 -0
- package/website/static/.nojekyll +0 -0
- package/website/static/css/custom.css +28 -0
- 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 +7669 -0
- package/yarn.lock +7765 -0
- package/build/flushMicroTasks.d.ts +0 -5
- package/build/flushMicroTasks.js +0 -17
- package/build/flushMicroTasks.js.map +0 -1
package/src/config.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { DebugOptions } from './helpers/debugDeep';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Global configuration options for React Native Testing Library.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export type Config = {
|
|
8
|
+
/** Default timeout, in ms, for `waitFor` and `findBy*` queries. */
|
|
9
|
+
asyncUtilTimeout: number;
|
|
10
|
+
|
|
11
|
+
/** Default value for `includeHiddenElements` query option. */
|
|
12
|
+
defaultIncludeHiddenElements: boolean;
|
|
13
|
+
|
|
14
|
+
/** Default options for `debug` helper. */
|
|
15
|
+
defaultDebugOptions?: Partial<DebugOptions>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ConfigAliasOptions = {
|
|
19
|
+
/** RTL-compatibility alias to `defaultIncludeHiddenElements` */
|
|
20
|
+
defaultHidden: boolean;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type HostComponentNames = {
|
|
24
|
+
text: string;
|
|
25
|
+
textInput: string;
|
|
26
|
+
switch: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type InternalConfig = Config & {
|
|
30
|
+
/** Names for key React Native host components. */
|
|
31
|
+
hostComponentNames?: HostComponentNames;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const defaultConfig: InternalConfig = {
|
|
35
|
+
asyncUtilTimeout: 1000,
|
|
36
|
+
defaultIncludeHiddenElements: false,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
let config = { ...defaultConfig };
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Configure global options for React Native Testing Library.
|
|
43
|
+
*/
|
|
44
|
+
export function configure(options: Partial<Config & ConfigAliasOptions>) {
|
|
45
|
+
const { defaultHidden, ...restOptions } = options;
|
|
46
|
+
|
|
47
|
+
const defaultIncludeHiddenElements =
|
|
48
|
+
restOptions.defaultIncludeHiddenElements ??
|
|
49
|
+
defaultHidden ??
|
|
50
|
+
config.defaultIncludeHiddenElements;
|
|
51
|
+
|
|
52
|
+
config = {
|
|
53
|
+
...config,
|
|
54
|
+
...restOptions,
|
|
55
|
+
defaultIncludeHiddenElements,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function configureInternal(option: Partial<InternalConfig>) {
|
|
60
|
+
config = {
|
|
61
|
+
...config,
|
|
62
|
+
...option,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function resetToDefaults() {
|
|
67
|
+
config = { ...defaultConfig };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function getConfig() {
|
|
71
|
+
return config;
|
|
72
|
+
}
|
package/src/fireEvent.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { ReactTestInstance } from 'react-test-renderer';
|
|
2
|
+
import {
|
|
3
|
+
ViewProps,
|
|
4
|
+
TextProps,
|
|
5
|
+
TextInputProps,
|
|
6
|
+
PressableProps,
|
|
7
|
+
ScrollViewProps,
|
|
8
|
+
} from 'react-native';
|
|
9
|
+
import act from './act';
|
|
10
|
+
import { isHostElement } from './helpers/component-tree';
|
|
11
|
+
import { getHostComponentNames } from './helpers/host-component-names';
|
|
12
|
+
import { isPointerEventEnabled } from './helpers/pointer-events';
|
|
13
|
+
|
|
14
|
+
type EventHandler = (...args: unknown[]) => unknown;
|
|
15
|
+
|
|
16
|
+
const isHostTextInput = (element?: ReactTestInstance) => {
|
|
17
|
+
return element?.type === getHostComponentNames().textInput;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export function isTouchResponder(element: ReactTestInstance) {
|
|
21
|
+
if (!isHostElement(element)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
Boolean(element.props.onStartShouldSetResponder) || isHostTextInput(element)
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* List of events affected by `pointerEvents` prop.
|
|
32
|
+
*
|
|
33
|
+
* Note: `fireEvent` is accepting both `press` and `onPress` for event names,
|
|
34
|
+
* so we need cover both forms.
|
|
35
|
+
*/
|
|
36
|
+
const eventsAffectedByPointerEventsProp = new Set(['press', 'onPress']);
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* List of `TextInput` events not affected by `editable` prop.
|
|
40
|
+
*
|
|
41
|
+
* Note: `fireEvent` is accepting both `press` and `onPress` for event names,
|
|
42
|
+
* so we need cover both forms.
|
|
43
|
+
*/
|
|
44
|
+
const textInputEventsIgnoringEditableProp = new Set([
|
|
45
|
+
'contentSizeChange',
|
|
46
|
+
'onContentSizeChange',
|
|
47
|
+
'layout',
|
|
48
|
+
'onLayout',
|
|
49
|
+
'scroll',
|
|
50
|
+
'onScroll',
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
export function isEventEnabled(
|
|
54
|
+
element: ReactTestInstance,
|
|
55
|
+
eventName: string,
|
|
56
|
+
nearestTouchResponder?: ReactTestInstance
|
|
57
|
+
) {
|
|
58
|
+
if (isHostTextInput(nearestTouchResponder)) {
|
|
59
|
+
return (
|
|
60
|
+
nearestTouchResponder?.props.editable !== false ||
|
|
61
|
+
textInputEventsIgnoringEditableProp.has(eventName)
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (
|
|
66
|
+
eventsAffectedByPointerEventsProp.has(eventName) &&
|
|
67
|
+
!isPointerEventEnabled(element)
|
|
68
|
+
) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const touchStart = nearestTouchResponder?.props.onStartShouldSetResponder?.();
|
|
73
|
+
const touchMove = nearestTouchResponder?.props.onMoveShouldSetResponder?.();
|
|
74
|
+
if (touchStart || touchMove) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return touchStart === undefined && touchMove === undefined;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function findEventHandler(
|
|
82
|
+
element: ReactTestInstance,
|
|
83
|
+
eventName: string,
|
|
84
|
+
nearestTouchResponder?: ReactTestInstance
|
|
85
|
+
): EventHandler | null {
|
|
86
|
+
const touchResponder = isTouchResponder(element)
|
|
87
|
+
? element
|
|
88
|
+
: nearestTouchResponder;
|
|
89
|
+
|
|
90
|
+
const handler = getEventHandler(element, eventName);
|
|
91
|
+
if (handler && isEventEnabled(element, eventName, touchResponder))
|
|
92
|
+
return handler;
|
|
93
|
+
|
|
94
|
+
if (element.parent === null || element.parent.parent === null) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return findEventHandler(element.parent, eventName, touchResponder);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function getEventHandler(element: ReactTestInstance, eventName: string) {
|
|
102
|
+
const eventHandlerName = getEventHandlerName(eventName);
|
|
103
|
+
if (typeof element.props[eventHandlerName] === 'function') {
|
|
104
|
+
return element.props[eventHandlerName];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (typeof element.props[eventName] === 'function') {
|
|
108
|
+
return element.props[eventName];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function getEventHandlerName(eventName: string) {
|
|
115
|
+
return `on${eventName.charAt(0).toUpperCase()}${eventName.slice(1)}`;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Allows any string but will provide autocomplete for type T
|
|
119
|
+
type StringWithAutoComplete<T> = T | (string & Record<never, never>);
|
|
120
|
+
|
|
121
|
+
// String union type of keys of T that start with on, stripped from on
|
|
122
|
+
type OnKeys<T> = keyof {
|
|
123
|
+
[K in keyof T as K extends `on${infer Rest}`
|
|
124
|
+
? Uncapitalize<Rest>
|
|
125
|
+
: never]: T[K];
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
type EventName = StringWithAutoComplete<
|
|
129
|
+
| OnKeys<ViewProps>
|
|
130
|
+
| OnKeys<TextProps>
|
|
131
|
+
| OnKeys<TextInputProps>
|
|
132
|
+
| OnKeys<PressableProps>
|
|
133
|
+
| OnKeys<ScrollViewProps>
|
|
134
|
+
>;
|
|
135
|
+
|
|
136
|
+
function fireEvent(
|
|
137
|
+
element: ReactTestInstance,
|
|
138
|
+
eventName: EventName,
|
|
139
|
+
...data: unknown[]
|
|
140
|
+
) {
|
|
141
|
+
const handler = findEventHandler(element, eventName);
|
|
142
|
+
if (!handler) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
let returnValue;
|
|
147
|
+
act(() => {
|
|
148
|
+
returnValue = handler(...data);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
return returnValue;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
fireEvent.press = (element: ReactTestInstance, ...data: unknown[]) =>
|
|
155
|
+
fireEvent(element, 'press', ...data);
|
|
156
|
+
|
|
157
|
+
fireEvent.changeText = (element: ReactTestInstance, ...data: unknown[]) =>
|
|
158
|
+
fireEvent(element, 'changeText', ...data);
|
|
159
|
+
|
|
160
|
+
fireEvent.scroll = (element: ReactTestInstance, ...data: unknown[]) =>
|
|
161
|
+
fireEvent(element, 'scroll', ...data);
|
|
162
|
+
|
|
163
|
+
export default fireEvent;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { setImmediate } from './helpers/timers';
|
|
2
|
+
|
|
3
|
+
export function flushMicroTasks() {
|
|
4
|
+
return new Promise((resolve) => setImmediate(resolve));
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated To be removed in the next major release.
|
|
9
|
+
*/
|
|
10
|
+
type Thenable<T> = { then: (callback: () => T) => unknown };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* This legacy implementation of `flushMicroTasks` is used for compatibility with
|
|
14
|
+
* older versions of React Native (pre 0.71) which uses Promise polyfil.
|
|
15
|
+
*
|
|
16
|
+
* For users with older version of React Native there is a workaround of using our own
|
|
17
|
+
* Jest preset instead the `react-native` one, but requiring such change would be a
|
|
18
|
+
* breaking change for existing users.
|
|
19
|
+
*
|
|
20
|
+
* @deprecated To be removed in the next major release.
|
|
21
|
+
*/
|
|
22
|
+
export function flushMicroTasksLegacy(): Thenable<void> {
|
|
23
|
+
return {
|
|
24
|
+
// using "thenable" instead of a Promise, because otherwise it breaks when
|
|
25
|
+
// using "modern" fake timers
|
|
26
|
+
then(resolve) {
|
|
27
|
+
setImmediate(resolve);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
View,
|
|
4
|
+
Text,
|
|
5
|
+
TextInput,
|
|
6
|
+
Pressable,
|
|
7
|
+
Switch,
|
|
8
|
+
TouchableOpacity,
|
|
9
|
+
} from 'react-native';
|
|
10
|
+
import { render, isHiddenFromAccessibility, isInaccessible } from '../..';
|
|
11
|
+
import { isAccessibilityElement } from '../accessiblity';
|
|
12
|
+
|
|
13
|
+
describe('isHiddenFromAccessibility', () => {
|
|
14
|
+
test('returns false for accessible elements', () => {
|
|
15
|
+
expect(
|
|
16
|
+
isHiddenFromAccessibility(
|
|
17
|
+
render(<View testID="subject" />).getByTestId('subject', {
|
|
18
|
+
includeHiddenElements: true,
|
|
19
|
+
})
|
|
20
|
+
)
|
|
21
|
+
).toBe(false);
|
|
22
|
+
|
|
23
|
+
expect(
|
|
24
|
+
isHiddenFromAccessibility(
|
|
25
|
+
render(<Text testID="subject">Hello</Text>).getByTestId('subject', {
|
|
26
|
+
includeHiddenElements: true,
|
|
27
|
+
})
|
|
28
|
+
)
|
|
29
|
+
).toBe(false);
|
|
30
|
+
|
|
31
|
+
expect(
|
|
32
|
+
isHiddenFromAccessibility(
|
|
33
|
+
render(<TextInput testID="subject" />).getByTestId('subject', {
|
|
34
|
+
includeHiddenElements: true,
|
|
35
|
+
})
|
|
36
|
+
)
|
|
37
|
+
).toBe(false);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('returns true for null elements', () => {
|
|
41
|
+
expect(isHiddenFromAccessibility(null)).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test('detects elements with accessibilityElementsHidden prop', () => {
|
|
45
|
+
const view = render(<View testID="subject" accessibilityElementsHidden />);
|
|
46
|
+
expect(
|
|
47
|
+
isHiddenFromAccessibility(
|
|
48
|
+
view.getByTestId('subject', {
|
|
49
|
+
includeHiddenElements: true,
|
|
50
|
+
})
|
|
51
|
+
)
|
|
52
|
+
).toBe(true);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('detects nested elements with accessibilityElementsHidden prop', () => {
|
|
56
|
+
const view = render(
|
|
57
|
+
<View accessibilityElementsHidden>
|
|
58
|
+
<View testID="subject" />
|
|
59
|
+
</View>
|
|
60
|
+
);
|
|
61
|
+
expect(
|
|
62
|
+
isHiddenFromAccessibility(
|
|
63
|
+
view.getByTestId('subject', {
|
|
64
|
+
includeHiddenElements: true,
|
|
65
|
+
})
|
|
66
|
+
)
|
|
67
|
+
).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('detects deeply nested elements with accessibilityElementsHidden prop', () => {
|
|
71
|
+
const view = render(
|
|
72
|
+
<View accessibilityElementsHidden>
|
|
73
|
+
<View>
|
|
74
|
+
<View>
|
|
75
|
+
<View testID="subject" />
|
|
76
|
+
</View>
|
|
77
|
+
</View>
|
|
78
|
+
</View>
|
|
79
|
+
);
|
|
80
|
+
expect(
|
|
81
|
+
isHiddenFromAccessibility(
|
|
82
|
+
view.getByTestId('subject', {
|
|
83
|
+
includeHiddenElements: true,
|
|
84
|
+
})
|
|
85
|
+
)
|
|
86
|
+
).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test('detects elements with importantForAccessibility="no-hide-descendants" prop', () => {
|
|
90
|
+
const view = render(
|
|
91
|
+
<View testID="subject" importantForAccessibility="no-hide-descendants" />
|
|
92
|
+
);
|
|
93
|
+
expect(
|
|
94
|
+
isHiddenFromAccessibility(
|
|
95
|
+
view.getByTestId('subject', {
|
|
96
|
+
includeHiddenElements: true,
|
|
97
|
+
})
|
|
98
|
+
)
|
|
99
|
+
).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test('detects nested elements with importantForAccessibility="no-hide-descendants" prop', () => {
|
|
103
|
+
const view = render(
|
|
104
|
+
<View importantForAccessibility="no-hide-descendants">
|
|
105
|
+
<View testID="subject" />
|
|
106
|
+
</View>
|
|
107
|
+
);
|
|
108
|
+
expect(
|
|
109
|
+
isHiddenFromAccessibility(
|
|
110
|
+
view.getByTestId('subject', {
|
|
111
|
+
includeHiddenElements: true,
|
|
112
|
+
})
|
|
113
|
+
)
|
|
114
|
+
).toBe(true);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('detects elements with display=none', () => {
|
|
118
|
+
const view = render(<View testID="subject" style={{ display: 'none' }} />);
|
|
119
|
+
expect(
|
|
120
|
+
isHiddenFromAccessibility(
|
|
121
|
+
view.getByTestId('subject', {
|
|
122
|
+
includeHiddenElements: true,
|
|
123
|
+
})
|
|
124
|
+
)
|
|
125
|
+
).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
test('detects nested elements with display=none', () => {
|
|
129
|
+
const view = render(
|
|
130
|
+
<View style={{ display: 'none' }}>
|
|
131
|
+
<View testID="subject" />
|
|
132
|
+
</View>
|
|
133
|
+
);
|
|
134
|
+
expect(
|
|
135
|
+
isHiddenFromAccessibility(
|
|
136
|
+
view.getByTestId('subject', {
|
|
137
|
+
includeHiddenElements: true,
|
|
138
|
+
})
|
|
139
|
+
)
|
|
140
|
+
).toBe(true);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test('detects deeply nested elements with display=none', () => {
|
|
144
|
+
const view = render(
|
|
145
|
+
<View style={{ display: 'none' }}>
|
|
146
|
+
<View>
|
|
147
|
+
<View>
|
|
148
|
+
<View testID="subject" />
|
|
149
|
+
</View>
|
|
150
|
+
</View>
|
|
151
|
+
</View>
|
|
152
|
+
);
|
|
153
|
+
expect(
|
|
154
|
+
isHiddenFromAccessibility(
|
|
155
|
+
view.getByTestId('subject', {
|
|
156
|
+
includeHiddenElements: true,
|
|
157
|
+
})
|
|
158
|
+
)
|
|
159
|
+
).toBe(true);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test('detects elements with display=none with complex style', () => {
|
|
163
|
+
const view = render(
|
|
164
|
+
<View
|
|
165
|
+
testID="subject"
|
|
166
|
+
style={[
|
|
167
|
+
{ display: 'flex' },
|
|
168
|
+
[{ display: 'flex' }],
|
|
169
|
+
{ display: 'none' },
|
|
170
|
+
]}
|
|
171
|
+
/>
|
|
172
|
+
);
|
|
173
|
+
expect(
|
|
174
|
+
isHiddenFromAccessibility(
|
|
175
|
+
view.getByTestId('subject', {
|
|
176
|
+
includeHiddenElements: true,
|
|
177
|
+
})
|
|
178
|
+
)
|
|
179
|
+
).toBe(true);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test('is not trigged by opacity = 0', () => {
|
|
183
|
+
const view = render(<View testID="subject" style={{ opacity: 0 }} />);
|
|
184
|
+
expect(
|
|
185
|
+
isHiddenFromAccessibility(
|
|
186
|
+
view.getByTestId('subject', {
|
|
187
|
+
includeHiddenElements: true,
|
|
188
|
+
})
|
|
189
|
+
)
|
|
190
|
+
).toBe(false);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('detects siblings of element with accessibilityViewIsModal prop', () => {
|
|
194
|
+
const view = render(
|
|
195
|
+
<View>
|
|
196
|
+
<View accessibilityViewIsModal />
|
|
197
|
+
<View testID="subject" />
|
|
198
|
+
</View>
|
|
199
|
+
);
|
|
200
|
+
expect(
|
|
201
|
+
isHiddenFromAccessibility(
|
|
202
|
+
view.getByTestId('subject', {
|
|
203
|
+
includeHiddenElements: true,
|
|
204
|
+
})
|
|
205
|
+
)
|
|
206
|
+
).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test('detects deeply nested siblings of element with accessibilityViewIsModal prop', () => {
|
|
210
|
+
const view = render(
|
|
211
|
+
<View>
|
|
212
|
+
<View accessibilityViewIsModal />
|
|
213
|
+
<View>
|
|
214
|
+
<View>
|
|
215
|
+
<View testID="subject" />
|
|
216
|
+
</View>
|
|
217
|
+
</View>
|
|
218
|
+
</View>
|
|
219
|
+
);
|
|
220
|
+
expect(
|
|
221
|
+
isHiddenFromAccessibility(
|
|
222
|
+
view.getByTestId('subject', {
|
|
223
|
+
includeHiddenElements: true,
|
|
224
|
+
})
|
|
225
|
+
)
|
|
226
|
+
).toBe(true);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
test('is not triggered for element with accessibilityViewIsModal prop', () => {
|
|
230
|
+
const view = render(
|
|
231
|
+
<View>
|
|
232
|
+
<View accessibilityViewIsModal testID="subject" />
|
|
233
|
+
</View>
|
|
234
|
+
);
|
|
235
|
+
expect(
|
|
236
|
+
isHiddenFromAccessibility(
|
|
237
|
+
view.getByTestId('subject', {
|
|
238
|
+
includeHiddenElements: true,
|
|
239
|
+
})
|
|
240
|
+
)
|
|
241
|
+
).toBe(false);
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test('is not triggered for child of element with accessibilityViewIsModal prop', () => {
|
|
245
|
+
const view = render(
|
|
246
|
+
<View>
|
|
247
|
+
<View accessibilityViewIsModal>
|
|
248
|
+
<View testID="subject" />
|
|
249
|
+
</View>
|
|
250
|
+
</View>
|
|
251
|
+
);
|
|
252
|
+
expect(
|
|
253
|
+
isHiddenFromAccessibility(
|
|
254
|
+
view.getByTestId('subject', {
|
|
255
|
+
includeHiddenElements: true,
|
|
256
|
+
})
|
|
257
|
+
)
|
|
258
|
+
).toBe(false);
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
test('is not triggered for descendent of element with accessibilityViewIsModal prop', () => {
|
|
262
|
+
const view = render(
|
|
263
|
+
<View>
|
|
264
|
+
<View accessibilityViewIsModal>
|
|
265
|
+
<View>
|
|
266
|
+
<View>
|
|
267
|
+
<View testID="subject" />
|
|
268
|
+
</View>
|
|
269
|
+
</View>
|
|
270
|
+
</View>
|
|
271
|
+
</View>
|
|
272
|
+
);
|
|
273
|
+
expect(
|
|
274
|
+
isHiddenFromAccessibility(
|
|
275
|
+
view.getByTestId('subject', {
|
|
276
|
+
includeHiddenElements: true,
|
|
277
|
+
})
|
|
278
|
+
)
|
|
279
|
+
).toBe(false);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
test('has isInaccessible alias', () => {
|
|
283
|
+
expect(isInaccessible).toBe(isHiddenFromAccessibility);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
describe('isAccessibilityElement', () => {
|
|
288
|
+
test('matches View component properly', () => {
|
|
289
|
+
const { getByTestId } = render(
|
|
290
|
+
<View>
|
|
291
|
+
<View testID="default" />
|
|
292
|
+
<View testID="true" accessible />
|
|
293
|
+
<View testID="false" accessible={false} />
|
|
294
|
+
</View>
|
|
295
|
+
);
|
|
296
|
+
expect(isAccessibilityElement(getByTestId('default'))).toBeFalsy();
|
|
297
|
+
expect(isAccessibilityElement(getByTestId('true'))).toBeTruthy();
|
|
298
|
+
expect(isAccessibilityElement(getByTestId('false'))).toBeFalsy();
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
test('matches TextInput component properly', () => {
|
|
302
|
+
const { getByTestId } = render(
|
|
303
|
+
<View>
|
|
304
|
+
<TextInput testID="default" />
|
|
305
|
+
<TextInput testID="true" accessible />
|
|
306
|
+
<TextInput testID="false" accessible={false} />
|
|
307
|
+
</View>
|
|
308
|
+
);
|
|
309
|
+
expect(isAccessibilityElement(getByTestId('default'))).toBeTruthy();
|
|
310
|
+
expect(isAccessibilityElement(getByTestId('true'))).toBeTruthy();
|
|
311
|
+
expect(isAccessibilityElement(getByTestId('false'))).toBeFalsy();
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
test('matches Text component properly', () => {
|
|
315
|
+
const { getByTestId } = render(
|
|
316
|
+
<View>
|
|
317
|
+
<Text testID="default">Default</Text>
|
|
318
|
+
<Text testID="true" accessible>
|
|
319
|
+
True
|
|
320
|
+
</Text>
|
|
321
|
+
<Text testID="false" accessible={false}>
|
|
322
|
+
False
|
|
323
|
+
</Text>
|
|
324
|
+
</View>
|
|
325
|
+
);
|
|
326
|
+
expect(isAccessibilityElement(getByTestId('default'))).toBeTruthy();
|
|
327
|
+
expect(isAccessibilityElement(getByTestId('true'))).toBeTruthy();
|
|
328
|
+
expect(isAccessibilityElement(getByTestId('false'))).toBeFalsy();
|
|
329
|
+
});
|
|
330
|
+
|
|
331
|
+
test('matches Switch component properly', () => {
|
|
332
|
+
const { getByTestId } = render(
|
|
333
|
+
<View>
|
|
334
|
+
<Switch testID="default" />
|
|
335
|
+
<Switch testID="true" accessible />
|
|
336
|
+
<Switch testID="false" accessible={false} />
|
|
337
|
+
</View>
|
|
338
|
+
);
|
|
339
|
+
expect(isAccessibilityElement(getByTestId('default'))).toBeTruthy();
|
|
340
|
+
expect(isAccessibilityElement(getByTestId('true'))).toBeTruthy();
|
|
341
|
+
expect(isAccessibilityElement(getByTestId('false'))).toBeFalsy();
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
test('matches Pressable component properly', () => {
|
|
345
|
+
const { getByTestId } = render(
|
|
346
|
+
<View>
|
|
347
|
+
<Pressable testID="default" />
|
|
348
|
+
<Pressable testID="true" accessible />
|
|
349
|
+
<Pressable testID="false" accessible={false} />
|
|
350
|
+
</View>
|
|
351
|
+
);
|
|
352
|
+
expect(isAccessibilityElement(getByTestId('default'))).toBeTruthy();
|
|
353
|
+
expect(isAccessibilityElement(getByTestId('true'))).toBeTruthy();
|
|
354
|
+
expect(isAccessibilityElement(getByTestId('false'))).toBeFalsy();
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
test('matches TouchableOpacity component properly', () => {
|
|
358
|
+
const { getByTestId } = render(
|
|
359
|
+
<View>
|
|
360
|
+
<TouchableOpacity testID="default" />
|
|
361
|
+
<TouchableOpacity testID="true" accessible />
|
|
362
|
+
<TouchableOpacity testID="false" accessible={false} />
|
|
363
|
+
</View>
|
|
364
|
+
);
|
|
365
|
+
expect(isAccessibilityElement(getByTestId('default'))).toBeTruthy();
|
|
366
|
+
expect(isAccessibilityElement(getByTestId('true'))).toBeTruthy();
|
|
367
|
+
expect(isAccessibilityElement(getByTestId('false'))).toBeFalsy();
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
test('returns false when given null', () => {
|
|
371
|
+
expect(isAccessibilityElement(null)).toEqual(false);
|
|
372
|
+
});
|
|
373
|
+
});
|