@testing-library/react-native 12.2.1 → 12.2.2

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.
Files changed (302) hide show
  1. package/package.json +2 -3
  2. package/.DS_Store +0 -0
  3. package/.codecov.yml +0 -9
  4. package/.eslintcache +0 -1
  5. package/.eslintignore +0 -3
  6. package/.eslintrc +0 -19
  7. package/.flowconfig +0 -63
  8. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  9. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
  10. package/.github/ISSUE_TEMPLATE/question.md +0 -9
  11. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  12. package/.github/actions/setup-deps/action.yml +0 -22
  13. package/.github/actions/setup-website-deps/action.yml +0 -22
  14. package/.github/dependabot.yml +0 -10
  15. package/.github/workflows/deploy-website.yml +0 -36
  16. package/.github/workflows/example-apps.yml +0 -25
  17. package/.github/workflows/main.yml +0 -103
  18. package/.gitignore +0 -11
  19. package/.prettierrc.js +0 -5
  20. package/CODE_OF_CONDUCT.md +0 -73
  21. package/CONTRIBUTING.md +0 -64
  22. package/babel.config.js +0 -22
  23. package/examples/basic/.expo/README.md +0 -15
  24. package/examples/basic/.expo/packager-info.json +0 -4
  25. package/examples/basic/.expo/settings.json +0 -10
  26. package/examples/basic/.expo-shared/assets.json +0 -4
  27. package/examples/basic/.gitignore +0 -14
  28. package/examples/basic/App.tsx +0 -20
  29. package/examples/basic/README.md +0 -11
  30. package/examples/basic/__tests__/App.test.tsx +0 -137
  31. package/examples/basic/app.json +0 -31
  32. package/examples/basic/assets/adaptive-icon.png +0 -0
  33. package/examples/basic/assets/favicon.png +0 -0
  34. package/examples/basic/assets/icon.png +0 -0
  35. package/examples/basic/assets/splash.png +0 -0
  36. package/examples/basic/babel.config.js +0 -6
  37. package/examples/basic/components/Home.tsx +0 -28
  38. package/examples/basic/components/LoginForm.tsx +0 -138
  39. package/examples/basic/jest-setup.ts +0 -7
  40. package/examples/basic/jest.config.js +0 -5
  41. package/examples/basic/package.json +0 -30
  42. package/examples/basic/tsconfig.json +0 -7
  43. package/examples/basic/yarn.lock +0 -7499
  44. package/examples/react-navigation/README.md +0 -16
  45. package/examples/react-navigation/babel.config.js +0 -4
  46. package/examples/react-navigation/jest-setup.js +0 -11
  47. package/examples/react-navigation/jest.config.js +0 -10
  48. package/examples/react-navigation/package.json +0 -31
  49. package/examples/react-navigation/src/App.js +0 -21
  50. package/examples/react-navigation/src/DrawerNavigator.js +0 -15
  51. package/examples/react-navigation/src/DrawerNavigator.test.js +0 -42
  52. package/examples/react-navigation/src/NativeStackNavigator.js +0 -15
  53. package/examples/react-navigation/src/NativeStackNavigator.test.js +0 -34
  54. package/examples/react-navigation/src/StackNavigator.js +0 -15
  55. package/examples/react-navigation/src/StackNavigator.test.js +0 -34
  56. package/examples/react-navigation/src/TabNavigator.js +0 -15
  57. package/examples/react-navigation/src/TabNavigator.test.js +0 -21
  58. package/examples/react-navigation/src/screens/DetailsScreen.js +0 -43
  59. package/examples/react-navigation/src/screens/DetailsScreen.test.js +0 -27
  60. package/examples/react-navigation/src/screens/DrawerHomeScreen.js +0 -26
  61. package/examples/react-navigation/src/screens/HomeScreen.js +0 -48
  62. package/examples/react-navigation/src/screens/SettingsScreen.js +0 -20
  63. package/examples/react-navigation/src/test-utils.js +0 -12
  64. package/examples/react-navigation/yarn.lock +0 -5018
  65. package/examples/redux/App.js +0 -27
  66. package/examples/redux/README.md +0 -5
  67. package/examples/redux/actions/todoActions.js +0 -25
  68. package/examples/redux/babel.config.js +0 -6
  69. package/examples/redux/components/AddTodo.js +0 -73
  70. package/examples/redux/components/AddTodo.test.js +0 -27
  71. package/examples/redux/components/TodoElem.js +0 -25
  72. package/examples/redux/components/TodoList.js +0 -29
  73. package/examples/redux/components/TodoList.test.js +0 -34
  74. package/examples/redux/index.js +0 -8
  75. package/examples/redux/jest-setup.js +0 -2
  76. package/examples/redux/jest.config.js +0 -4
  77. package/examples/redux/package.json +0 -23
  78. package/examples/redux/reducers/index.js +0 -6
  79. package/examples/redux/reducers/todoReducer.js +0 -27
  80. package/examples/redux/store.js +0 -10
  81. package/examples/redux/test-utils.js +0 -11
  82. package/examples/redux/yarn.lock +0 -4819
  83. package/experiments-app/.expo/README.md +0 -15
  84. package/experiments-app/.expo/devices.json +0 -3
  85. package/experiments-app/.expo/packager-info.json +0 -9
  86. package/experiments-app/.expo/settings.json +0 -9
  87. package/experiments-app/.gitignore +0 -17
  88. package/experiments-app/.prettierrc.js +0 -5
  89. package/experiments-app/app.json +0 -30
  90. package/experiments-app/assets/adaptive-icon.png +0 -0
  91. package/experiments-app/assets/favicon.png +0 -0
  92. package/experiments-app/assets/icon.png +0 -0
  93. package/experiments-app/assets/splash.png +0 -0
  94. package/experiments-app/babel.config.js +0 -6
  95. package/experiments-app/index.js +0 -4
  96. package/experiments-app/package.json +0 -29
  97. package/experiments-app/src/App.tsx +0 -31
  98. package/experiments-app/src/MainScreen.tsx +0 -52
  99. package/experiments-app/src/experiments.ts +0 -35
  100. package/experiments-app/src/screens/FlatListEvents.tsx +0 -57
  101. package/experiments-app/src/screens/ScrollViewEvents.tsx +0 -65
  102. package/experiments-app/src/screens/SectionListEvents.tsx +0 -91
  103. package/experiments-app/src/screens/TextInputEventPropagation.tsx +0 -42
  104. package/experiments-app/src/screens/TextInputEvents.tsx +0 -48
  105. package/experiments-app/src/utils/helpers.ts +0 -18
  106. package/experiments-app/tsconfig.json +0 -6
  107. package/experiments-app/yarn.lock +0 -6709
  108. package/experiments-rtl/.babelrc +0 -8
  109. package/experiments-rtl/.eslintrc.json +0 -3
  110. package/experiments-rtl/.gitignore +0 -35
  111. package/experiments-rtl/README.md +0 -34
  112. package/experiments-rtl/jest-setup.js +0 -1
  113. package/experiments-rtl/jest.config.js +0 -4
  114. package/experiments-rtl/next.config.js +0 -4
  115. package/experiments-rtl/package.json +0 -38
  116. package/experiments-rtl/postcss.config.js +0 -6
  117. package/experiments-rtl/public/next.svg +0 -1
  118. package/experiments-rtl/public/vercel.svg +0 -1
  119. package/experiments-rtl/src/app/__tests__/click.test.tsx +0 -31
  120. package/experiments-rtl/src/app/__tests__/managed-text-input.test.tsx +0 -51
  121. package/experiments-rtl/src/app/globals.css +0 -27
  122. package/experiments-rtl/src/app/layout.tsx +0 -22
  123. package/experiments-rtl/src/app/page.tsx +0 -113
  124. package/experiments-rtl/tailwind.config.ts +0 -20
  125. package/experiments-rtl/tsconfig.json +0 -28
  126. package/experiments-rtl/yarn.lock +0 -5418
  127. package/flow-typed/npm/jest_v26.x.x.js +0 -1218
  128. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -81
  129. package/jest-setup.ts +0 -10
  130. package/renovate.json +0 -19
  131. package/scripts/test_react_17 +0 -12
  132. package/src/__tests__/__snapshots__/render-debug.test.tsx.snap +0 -548
  133. package/src/__tests__/__snapshots__/render.test.tsx.snap +0 -39
  134. package/src/__tests__/act.test.tsx +0 -56
  135. package/src/__tests__/auto-cleanup-skip.test.tsx +0 -39
  136. package/src/__tests__/auto-cleanup.test.tsx +0 -50
  137. package/src/__tests__/cleanup.test.tsx +0 -26
  138. package/src/__tests__/config.test.ts +0 -55
  139. package/src/__tests__/fireEvent-textInput.test.tsx +0 -154
  140. package/src/__tests__/fireEvent.test.tsx +0 -485
  141. package/src/__tests__/host-component-names.test.tsx +0 -109
  142. package/src/__tests__/host-text-nesting.test.tsx +0 -90
  143. package/src/__tests__/jest-native.test.tsx +0 -84
  144. package/src/__tests__/questionsBoard.test.tsx +0 -62
  145. package/src/__tests__/react-native-api.test.tsx +0 -126
  146. package/src/__tests__/render-debug.test.tsx +0 -207
  147. package/src/__tests__/render-stringValidation.test.tsx +0 -157
  148. package/src/__tests__/render.test.tsx +0 -256
  149. package/src/__tests__/renderHook.test.tsx +0 -114
  150. package/src/__tests__/screen.test.tsx +0 -66
  151. package/src/__tests__/timerUtils.ts +0 -7
  152. package/src/__tests__/timers.test.ts +0 -27
  153. package/src/__tests__/waitFor.test.tsx +0 -327
  154. package/src/__tests__/waitForElementToBeRemoved.test.tsx +0 -151
  155. package/src/__tests__/within.test.tsx +0 -96
  156. package/src/act.ts +0 -86
  157. package/src/cleanup.ts +0 -15
  158. package/src/config.ts +0 -72
  159. package/src/fireEvent.ts +0 -159
  160. package/src/flush-micro-tasks.ts +0 -30
  161. package/src/helpers/__tests__/accessiblity.test.tsx +0 -373
  162. package/src/helpers/__tests__/component-tree.test.tsx +0 -226
  163. package/src/helpers/__tests__/format-default.tsx +0 -114
  164. package/src/helpers/__tests__/getTextContent.test.tsx +0 -49
  165. package/src/helpers/__tests__/includeHiddenElements.test.tsx +0 -39
  166. package/src/helpers/__tests__/query-name.test.ts +0 -10
  167. package/src/helpers/__tests__/timers.test.ts +0 -8
  168. package/src/helpers/accessiblity.ts +0 -108
  169. package/src/helpers/component-tree.ts +0 -94
  170. package/src/helpers/debugDeep.ts +0 -27
  171. package/src/helpers/debugShallow.ts +0 -22
  172. package/src/helpers/deprecation.ts +0 -53
  173. package/src/helpers/errors.ts +0 -66
  174. package/src/helpers/findAll.ts +0 -70
  175. package/src/helpers/format-default.ts +0 -72
  176. package/src/helpers/format.ts +0 -47
  177. package/src/helpers/getTextContent.ts +0 -20
  178. package/src/helpers/host-component-names.tsx +0 -88
  179. package/src/helpers/matchers/__tests__/matchArrayValue.test.ts +0 -34
  180. package/src/helpers/matchers/__tests__/matchObject.test.ts +0 -37
  181. package/src/helpers/matchers/__tests__/matchStringValue.test.ts +0 -15
  182. package/src/helpers/matchers/accessibilityState.ts +0 -48
  183. package/src/helpers/matchers/accessibilityValue.ts +0 -24
  184. package/src/helpers/matchers/matchArrayProp.ts +0 -21
  185. package/src/helpers/matchers/matchLabelText.ts +0 -50
  186. package/src/helpers/matchers/matchObjectProp.ts +0 -25
  187. package/src/helpers/matchers/matchStringProp.ts +0 -23
  188. package/src/helpers/matchers/matchTextContent.ts +0 -20
  189. package/src/helpers/pointer-events.ts +0 -27
  190. package/src/helpers/query-name.ts +0 -4
  191. package/src/helpers/stringValidation.ts +0 -36
  192. package/src/helpers/timers.ts +0 -98
  193. package/src/index.ts +0 -33
  194. package/src/matches.ts +0 -49
  195. package/src/pure.ts +0 -27
  196. package/src/queries/__tests__/a11yState.test.tsx +0 -439
  197. package/src/queries/__tests__/a11yValue.test.tsx +0 -309
  198. package/src/queries/__tests__/displayValue.test.tsx +0 -221
  199. package/src/queries/__tests__/hintText.test.tsx +0 -177
  200. package/src/queries/__tests__/labelText.test.tsx +0 -242
  201. package/src/queries/__tests__/makeQueries.test.tsx +0 -235
  202. package/src/queries/__tests__/placeholderText.test.tsx +0 -136
  203. package/src/queries/__tests__/role-value.test.tsx +0 -176
  204. package/src/queries/__tests__/role.test.tsx +0 -824
  205. package/src/queries/__tests__/testId.test.tsx +0 -200
  206. package/src/queries/__tests__/text.test.tsx +0 -556
  207. package/src/queries/a11yState.ts +0 -127
  208. package/src/queries/a11yValue.ts +0 -127
  209. package/src/queries/displayValue.ts +0 -71
  210. package/src/queries/hintText.ts +0 -107
  211. package/src/queries/labelText.ts +0 -57
  212. package/src/queries/makeQueries.ts +0 -255
  213. package/src/queries/options.ts +0 -14
  214. package/src/queries/placeholderText.ts +0 -72
  215. package/src/queries/role.ts +0 -131
  216. package/src/queries/testId.ts +0 -66
  217. package/src/queries/text.ts +0 -63
  218. package/src/queries/unsafeProps.ts +0 -76
  219. package/src/queries/unsafeType.ts +0 -73
  220. package/src/react-versions.ts +0 -11
  221. package/src/render-act.ts +0 -19
  222. package/src/render.tsx +0 -183
  223. package/src/renderHook.tsx +0 -56
  224. package/src/screen.ts +0 -123
  225. package/src/shallow.ts +0 -18
  226. package/src/test-utils/events.ts +0 -24
  227. package/src/test-utils/index.ts +0 -1
  228. package/src/user-event/__tests__/__snapshots__/clear.test.tsx.snap +0 -269
  229. package/src/user-event/__tests__/clear.test.tsx +0 -217
  230. package/src/user-event/clear.ts +0 -59
  231. package/src/user-event/event-builder/common.ts +0 -66
  232. package/src/user-event/event-builder/index.ts +0 -7
  233. package/src/user-event/event-builder/text-input.ts +0 -86
  234. package/src/user-event/index.ts +0 -18
  235. package/src/user-event/press/__tests__/longPress.real-timers.test.tsx +0 -117
  236. package/src/user-event/press/__tests__/longPress.test.tsx +0 -157
  237. package/src/user-event/press/__tests__/press.real-timers.test.tsx +0 -320
  238. package/src/user-event/press/__tests__/press.test.tsx +0 -457
  239. package/src/user-event/press/constants.ts +0 -7
  240. package/src/user-event/press/index.ts +0 -1
  241. package/src/user-event/press/press.ts +0 -163
  242. package/src/user-event/setup/index.ts +0 -2
  243. package/src/user-event/setup/setup.ts +0 -142
  244. package/src/user-event/type/__tests__/__snapshots__/type-managed.test.tsx.snap +0 -339
  245. package/src/user-event/type/__tests__/__snapshots__/type.test.tsx.snap +0 -668
  246. package/src/user-event/type/__tests__/parseKeys.test.ts +0 -23
  247. package/src/user-event/type/__tests__/type-managed.test.tsx +0 -120
  248. package/src/user-event/type/__tests__/type.test.tsx +0 -335
  249. package/src/user-event/type/index.ts +0 -1
  250. package/src/user-event/type/parseKeys.ts +0 -41
  251. package/src/user-event/type/type.ts +0 -138
  252. package/src/user-event/utils/__tests__/dispatch-event.test.tsx +0 -41
  253. package/src/user-event/utils/__tests__/wait.test.ts +0 -62
  254. package/src/user-event/utils/content-size.ts +0 -25
  255. package/src/user-event/utils/dispatch-event.ts +0 -38
  256. package/src/user-event/utils/host-components.ts +0 -6
  257. package/src/user-event/utils/index.ts +0 -6
  258. package/src/user-event/utils/text-range.ts +0 -4
  259. package/src/user-event/utils/wait.ts +0 -15
  260. package/src/user-event/utils/warn-about-real-timers.ts +0 -13
  261. package/src/waitFor.ts +0 -228
  262. package/src/waitForElementToBeRemoved.ts +0 -42
  263. package/src/within.ts +0 -30
  264. package/tsconfig.json +0 -17
  265. package/tsconfig.release.json +0 -8
  266. package/website/.gitignore +0 -20
  267. package/website/README.md +0 -33
  268. package/website/docker/.dockerignore +0 -3
  269. package/website/docker/Dockerfile +0 -9
  270. package/website/docker/docker-compose.yml +0 -11
  271. package/website/docs/API.md +0 -940
  272. package/website/docs/EslintPLluginTestingLibrary.md +0 -28
  273. package/website/docs/FAQ.md +0 -44
  274. package/website/docs/GettingStarted.md +0 -100
  275. package/website/docs/HowShouldIQuery.md +0 -21
  276. package/website/docs/MigrationV11.md +0 -64
  277. package/website/docs/MigrationV12.md +0 -67
  278. package/website/docs/MigrationV2.md +0 -126
  279. package/website/docs/MigrationV7.md +0 -119
  280. package/website/docs/MigrationV9.md +0 -67
  281. package/website/docs/Queries.md +0 -572
  282. package/website/docs/ReactNavigation.md +0 -371
  283. package/website/docs/ReduxIntegration.md +0 -137
  284. package/website/docs/TestingEnvironment.md +0 -154
  285. package/website/docs/Troubleshooting.md +0 -44
  286. package/website/docs/UnderstandingAct.md +0 -227
  287. package/website/docs/UserEvent.md +0 -191
  288. package/website/docusaurus.config.js +0 -114
  289. package/website/package.json +0 -31
  290. package/website/sidebars.js +0 -20
  291. package/website/src/components/Feature.js +0 -31
  292. package/website/src/css/custom.css +0 -13
  293. package/website/src/css/index.module.css +0 -77
  294. package/website/src/pages/index.js +0 -82
  295. package/website/static/.nojekyll +0 -0
  296. package/website/static/css/custom.css +0 -28
  297. package/website/static/img/hit.png +0 -0
  298. package/website/static/img/locomotive.png +0 -0
  299. package/website/static/img/owl.png +0 -0
  300. package/website/static/img/tools.png +0 -0
  301. package/website/yarn.lock +0 -7669
  302. package/yarn.lock +0 -7765
@@ -1,242 +0,0 @@
1
- import * as React from 'react';
2
- import { View, Text, TextInput, TouchableOpacity } from 'react-native';
3
- import { render } from '../..';
4
-
5
- const BUTTON_LABEL = 'cool button';
6
- const BUTTON_HINT = 'click this button';
7
- const TEXT_LABEL = 'cool text';
8
- const TEXT_HINT = 'static text';
9
- // Little hack to make all the methods happy with type
10
- const NO_MATCHES_TEXT: any = 'not-existent-element';
11
-
12
- const getMultipleInstancesFoundMessage = (value: string) => {
13
- return `Found multiple elements with accessibilityLabel: ${value}`;
14
- };
15
-
16
- const getNoInstancesFoundMessage = (value: string) => {
17
- return `Unable to find an element with accessibilityLabel: ${value}`;
18
- };
19
-
20
- const Typography = ({ children, ...rest }: any) => {
21
- return <Text {...rest}>{children}</Text>;
22
- };
23
-
24
- const Button = ({ children }: { children: React.ReactNode }) => (
25
- <TouchableOpacity
26
- accessibilityHint={BUTTON_HINT}
27
- accessibilityLabel={BUTTON_LABEL}
28
- >
29
- <Typography accessibilityHint={TEXT_HINT} accessibilityLabel={TEXT_LABEL}>
30
- {children}
31
- </Typography>
32
- </TouchableOpacity>
33
- );
34
-
35
- const Section = () => (
36
- <>
37
- <Typography accessibilityHint={TEXT_HINT} accessibilityLabel={TEXT_LABEL}>
38
- Title
39
- </Typography>
40
- <Button>{TEXT_LABEL}</Button>
41
- </>
42
- );
43
-
44
- test('getByLabelText, queryByLabelText, findByLabelText', async () => {
45
- const { getByLabelText, queryByLabelText, findByLabelText } = render(
46
- <Section />
47
- );
48
-
49
- expect(getByLabelText(BUTTON_LABEL).props.accessibilityLabel).toEqual(
50
- BUTTON_LABEL
51
- );
52
- const button = queryByLabelText(/button/g);
53
- expect(button?.props.accessibilityLabel).toEqual(BUTTON_LABEL);
54
-
55
- expect(() => getByLabelText(NO_MATCHES_TEXT)).toThrow(
56
- getNoInstancesFoundMessage(NO_MATCHES_TEXT)
57
- );
58
- expect(queryByLabelText(NO_MATCHES_TEXT)).toBeNull();
59
-
60
- expect(() => getByLabelText(TEXT_LABEL)).toThrow(
61
- getMultipleInstancesFoundMessage(TEXT_LABEL)
62
- );
63
- expect(() => queryByLabelText(TEXT_LABEL)).toThrow(
64
- getMultipleInstancesFoundMessage(TEXT_LABEL)
65
- );
66
-
67
- const asyncButton = await findByLabelText(BUTTON_LABEL);
68
- expect(asyncButton.props.accessibilityLabel).toEqual(BUTTON_LABEL);
69
- await expect(findByLabelText(NO_MATCHES_TEXT)).rejects.toThrow(
70
- getNoInstancesFoundMessage(NO_MATCHES_TEXT)
71
- );
72
-
73
- await expect(findByLabelText(TEXT_LABEL)).rejects.toThrow(
74
- getMultipleInstancesFoundMessage(TEXT_LABEL)
75
- );
76
- });
77
-
78
- test('getAllByLabelText, queryAllByLabelText, findAllByLabelText', async () => {
79
- const { getAllByLabelText, queryAllByLabelText, findAllByLabelText } = render(
80
- <Section />
81
- );
82
-
83
- expect(getAllByLabelText(TEXT_LABEL)).toHaveLength(2);
84
- expect(queryAllByLabelText(/cool/g)).toHaveLength(3);
85
-
86
- expect(() => getAllByLabelText(NO_MATCHES_TEXT)).toThrow(
87
- getNoInstancesFoundMessage(NO_MATCHES_TEXT)
88
- );
89
- expect(queryAllByLabelText(NO_MATCHES_TEXT)).toEqual([]);
90
-
91
- await expect(findAllByLabelText(TEXT_LABEL)).resolves.toHaveLength(2);
92
- await expect(findAllByLabelText(NO_MATCHES_TEXT)).rejects.toThrow(
93
- getNoInstancesFoundMessage(NO_MATCHES_TEXT)
94
- );
95
- });
96
-
97
- test('getAllByLabelText, queryAllByLabelText, findAllByLabelText with exact as false', async () => {
98
- const { getAllByLabelText, queryAllByLabelText, findAllByLabelText } = render(
99
- <Section />
100
- );
101
-
102
- expect(getAllByLabelText(TEXT_LABEL, { exact: false })).toHaveLength(2);
103
- expect(queryAllByLabelText(/cool/g, { exact: false })).toHaveLength(3);
104
-
105
- expect(() => getAllByLabelText(NO_MATCHES_TEXT, { exact: false })).toThrow(
106
- getNoInstancesFoundMessage(NO_MATCHES_TEXT)
107
- );
108
- expect(queryAllByLabelText(NO_MATCHES_TEXT, { exact: false })).toEqual([]);
109
-
110
- await expect(
111
- findAllByLabelText(TEXT_LABEL, { exact: false })
112
- ).resolves.toHaveLength(2);
113
- await expect(
114
- findAllByLabelText(NO_MATCHES_TEXT, { exact: false })
115
- ).rejects.toThrow(getNoInstancesFoundMessage(NO_MATCHES_TEXT));
116
- });
117
-
118
- describe('findBy options deprecations', () => {
119
- let warnSpy: jest.SpyInstance;
120
- beforeEach(() => {
121
- warnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
122
- });
123
- afterEach(() => {
124
- warnSpy.mockRestore();
125
- });
126
-
127
- test('findByText queries warn on deprecated use of WaitForOptions', async () => {
128
- const options = { timeout: 10 };
129
- // mock implementation to avoid warning in the test suite
130
- const view = render(<View />);
131
- await expect(
132
- view.findByLabelText('Some Text', options)
133
- ).rejects.toBeTruthy();
134
-
135
- setTimeout(
136
- () => view.rerender(<View accessibilityLabel="Some Text" />),
137
- 20
138
- );
139
- await expect(view.findByLabelText('Some Text')).resolves.toBeTruthy();
140
-
141
- expect(warnSpy).toHaveBeenCalledWith(
142
- expect.stringContaining('Use of option "timeout"')
143
- );
144
- }, 20000);
145
- });
146
-
147
- test('byLabelText queries support hidden option', () => {
148
- const { getByLabelText, queryByLabelText } = render(
149
- <Text accessibilityLabel="hidden" style={{ display: 'none' }}>
150
- Hidden from accessibility
151
- </Text>
152
- );
153
-
154
- expect(
155
- getByLabelText('hidden', { includeHiddenElements: true })
156
- ).toBeTruthy();
157
-
158
- expect(queryByLabelText('hidden')).toBeFalsy();
159
- expect(
160
- queryByLabelText('hidden', { includeHiddenElements: false })
161
- ).toBeFalsy();
162
- expect(() => getByLabelText('hidden', { includeHiddenElements: false }))
163
- .toThrowErrorMatchingInlineSnapshot(`
164
- "Unable to find an element with accessibilityLabel: hidden
165
-
166
- <Text
167
- accessibilityLabel="hidden"
168
- style={
169
- {
170
- "display": "none",
171
- }
172
- }
173
- >
174
- Hidden from accessibility
175
- </Text>"
176
- `);
177
- });
178
-
179
- test('getByLabelText supports accessibilityLabelledBy', async () => {
180
- const { getByLabelText, getByTestId } = render(
181
- <>
182
- <Text nativeID="label">Label for input</Text>
183
- <TextInput testID="textInput" accessibilityLabelledBy="label" />
184
- </>
185
- );
186
-
187
- expect(getByLabelText('Label for input')).toBe(getByTestId('textInput'));
188
- expect(getByLabelText(/input/)).toBe(getByTestId('textInput'));
189
- });
190
-
191
- test('getByLabelText supports nested accessibilityLabelledBy', async () => {
192
- const { getByLabelText, getByTestId } = render(
193
- <>
194
- <View nativeID="label">
195
- <Text>Label for input</Text>
196
- </View>
197
- <TextInput testID="textInput" accessibilityLabelledBy="label" />
198
- </>
199
- );
200
-
201
- expect(getByLabelText('Label for input')).toBe(getByTestId('textInput'));
202
- expect(getByLabelText(/input/)).toBe(getByTestId('textInput'));
203
- });
204
-
205
- test('error message renders the element tree, preserving only helpful props', async () => {
206
- const view = render(<TouchableOpacity accessibilityLabel="LABEL" key="3" />);
207
-
208
- expect(() => view.getByLabelText('FOO')).toThrowErrorMatchingInlineSnapshot(`
209
- "Unable to find an element with accessibilityLabel: FOO
210
-
211
- <View
212
- accessibilityLabel="LABEL"
213
- />"
214
- `);
215
-
216
- expect(() => view.getAllByLabelText('FOO'))
217
- .toThrowErrorMatchingInlineSnapshot(`
218
- "Unable to find an element with accessibilityLabel: FOO
219
-
220
- <View
221
- accessibilityLabel="LABEL"
222
- />"
223
- `);
224
-
225
- await expect(view.findByLabelText('FOO')).rejects
226
- .toThrowErrorMatchingInlineSnapshot(`
227
- "Unable to find an element with accessibilityLabel: FOO
228
-
229
- <View
230
- accessibilityLabel="LABEL"
231
- />"
232
- `);
233
-
234
- await expect(view.findAllByLabelText('FOO')).rejects
235
- .toThrowErrorMatchingInlineSnapshot(`
236
- "Unable to find an element with accessibilityLabel: FOO
237
-
238
- <View
239
- accessibilityLabel="LABEL"
240
- />"
241
- `);
242
- });
@@ -1,235 +0,0 @@
1
- import * as React from 'react';
2
- import { Text, TextInput, View } from 'react-native';
3
- import { render, screen } from '../..';
4
-
5
- describe('printing element tree', () => {
6
- test('includes element tree on error with less-helpful props stripped', async () => {
7
- const { getByText } = render(<Text onPress={() => null}>Some text</Text>);
8
-
9
- expect(() => getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
10
- "Unable to find an element with text: /foo/
11
-
12
- <Text>
13
- Some text
14
- </Text>"
15
- `);
16
- });
17
-
18
- test('prints helpful props but not others', async () => {
19
- const { getByText } = render(
20
- <View
21
- accessibilityElementsHidden
22
- accessibilityViewIsModal
23
- importantForAccessibility="yes"
24
- testID="TEST_ID"
25
- nativeID="NATIVE_ID"
26
- accessibilityLabel="LABEL"
27
- accessibilityLabelledBy="LABELLED_BY"
28
- accessibilityRole="summary"
29
- accessibilityHint="HINT"
30
- key="this is filtered"
31
- >
32
- <TextInput
33
- placeholder="PLACEHOLDER"
34
- value="VALUE"
35
- defaultValue="DEFAULT_VALUE"
36
- />
37
- <Text>Some Text</Text>
38
- </View>
39
- );
40
-
41
- expect(() => getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
42
- "Unable to find an element with text: /foo/
43
-
44
- <View
45
- accessibilityElementsHidden={true}
46
- accessibilityHint="HINT"
47
- accessibilityLabel="LABEL"
48
- accessibilityLabelledBy="LABELLED_BY"
49
- accessibilityRole="summary"
50
- accessibilityViewIsModal={true}
51
- importantForAccessibility="yes"
52
- nativeID="NATIVE_ID"
53
- testID="TEST_ID"
54
- >
55
- <TextInput
56
- defaultValue="DEFAULT_VALUE"
57
- placeholder="PLACEHOLDER"
58
- value="VALUE"
59
- />
60
- <Text>
61
- Some Text
62
- </Text>
63
- </View>"
64
- `);
65
- });
66
-
67
- test('prints tree and filters props with getBy, getAllBy, findBy, findAllBy', async () => {
68
- const view = render(
69
- <View accessibilityViewIsModal key="this is filtered" />
70
- );
71
-
72
- expect(() => view.getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
73
- "Unable to find an element with text: /foo/
74
-
75
- <View
76
- accessibilityViewIsModal={true}
77
- />"
78
- `);
79
-
80
- expect(() => view.getAllByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
81
- "Unable to find an element with text: /foo/
82
-
83
- <View
84
- accessibilityViewIsModal={true}
85
- />"
86
- `);
87
-
88
- await expect(view.findByText(/foo/)).rejects
89
- .toThrowErrorMatchingInlineSnapshot(`
90
- "Unable to find an element with text: /foo/
91
-
92
- <View
93
- accessibilityViewIsModal={true}
94
- />"
95
- `);
96
-
97
- await expect(view.findAllByText(/foo/)).rejects
98
- .toThrowErrorMatchingInlineSnapshot(`
99
- "Unable to find an element with text: /foo/
100
-
101
- <View
102
- accessibilityViewIsModal={true}
103
- />"
104
- `);
105
- });
106
-
107
- test('only appends element tree on last failure with findBy', async () => {
108
- const { findByText } = render(
109
- <View accessibilityViewIsModal key="this is filtered" />
110
- );
111
-
112
- jest.spyOn(screen, 'toJSON');
113
-
114
- await expect(findByText(/foo/)).rejects.toThrow();
115
-
116
- expect(screen.toJSON).toHaveBeenCalledTimes(1);
117
- });
118
-
119
- test('onTimeout with findBy receives error without element tree', async () => {
120
- const { findByText } = render(<View />);
121
-
122
- const onTimeout = jest.fn((_: Error) => new Error('Replacement error'));
123
-
124
- await expect(() =>
125
- findByText(/foo/, undefined, { onTimeout })
126
- ).rejects.toThrowErrorMatchingInlineSnapshot(`"Replacement error"`);
127
-
128
- expect(onTimeout).toHaveBeenCalledTimes(1);
129
- expect(onTimeout.mock.calls[0][0].message).not.toMatch(/View/);
130
- expect(onTimeout.mock.calls[0][0].message).toMatchInlineSnapshot(
131
- `"Unable to find an element with text: /foo/"`
132
- );
133
- });
134
-
135
- test('onTimeout with findAllBy receives error without element tree', async () => {
136
- const { findAllByText } = render(<View />);
137
-
138
- const onTimeout = jest.fn((_: Error) => new Error('Replacement error'));
139
-
140
- await expect(() =>
141
- findAllByText(/foo/, undefined, { onTimeout })
142
- ).rejects.toThrowErrorMatchingInlineSnapshot(`"Replacement error"`);
143
-
144
- expect(onTimeout).toHaveBeenCalledTimes(1);
145
- expect(onTimeout.mock.calls[0][0].message).not.toMatch(/View/);
146
- expect(onTimeout.mock.calls[0][0].message).toMatchInlineSnapshot(
147
- `"Unable to find an element with text: /foo/"`
148
- );
149
- });
150
-
151
- test('does not strip display: none from "style" prop, but does strip other styles', () => {
152
- const { getByText } = render(
153
- <View style={{ display: 'flex', position: 'absolute' }}>
154
- <Text
155
- style={[
156
- { display: 'flex', position: 'relative' },
157
- { display: 'none', flex: 1 },
158
- ]}
159
- >
160
- Some text
161
- </Text>
162
- </View>
163
- );
164
-
165
- expect(() => getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
166
- "Unable to find an element with text: /foo/
167
-
168
- <View>
169
- <Text
170
- style={
171
- {
172
- "display": "none",
173
- }
174
- }
175
- >
176
- Some text
177
- </Text>
178
- </View>"
179
- `);
180
- });
181
-
182
- test('strips undefined values from accessibilityState', () => {
183
- const { getByText } = render(
184
- <View accessibilityState={{ checked: true, busy: false }}>
185
- <View accessibilityState={{ checked: undefined }} />
186
- </View>
187
- );
188
-
189
- expect(() => getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
190
- "Unable to find an element with text: /foo/
191
-
192
- <View
193
- accessibilityState={
194
- {
195
- "busy": false,
196
- "checked": true,
197
- }
198
- }
199
- >
200
- <View />
201
- </View>"
202
- `);
203
- });
204
-
205
- test('strips undefined values from accessibilityValue', () => {
206
- const { getByText } = render(
207
- <View accessibilityValue={{ min: 1 }}>
208
- <View accessibilityState={{}} />
209
- </View>
210
- );
211
-
212
- expect(() => getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(`
213
- "Unable to find an element with text: /foo/
214
-
215
- <View
216
- accessibilityValue={
217
- {
218
- "min": 1,
219
- }
220
- }
221
- >
222
- <View />
223
- </View>"
224
- `);
225
- });
226
-
227
- test('does not render element tree when toJSON() returns null', () => {
228
- const view = render(<View />);
229
-
230
- jest.spyOn(screen, 'toJSON').mockImplementation(() => null);
231
- expect(() => view.getByText(/foo/)).toThrowErrorMatchingInlineSnapshot(
232
- `"Unable to find an element with text: /foo/"`
233
- );
234
- });
235
- });
@@ -1,136 +0,0 @@
1
- import * as React from 'react';
2
- import { View, TextInput } from 'react-native';
3
- import { render } from '../..';
4
-
5
- const PLACEHOLDER_FRESHNESS = 'Add custom freshness';
6
- const PLACEHOLDER_CHEF = 'Who inspected freshness?';
7
- const INPUT_FRESHNESS = 'Custom Freshie';
8
- const INPUT_CHEF = 'I inspected freshie';
9
- const DEFAULT_INPUT_CHEF = 'What did you inspect?';
10
-
11
- const Banana = () => (
12
- <View>
13
- <TextInput
14
- testID="bananaCustomFreshness"
15
- placeholder={PLACEHOLDER_FRESHNESS}
16
- value={INPUT_FRESHNESS}
17
- />
18
- <TextInput
19
- testID="bananaChef"
20
- placeholder={PLACEHOLDER_CHEF}
21
- value={INPUT_CHEF}
22
- defaultValue={DEFAULT_INPUT_CHEF}
23
- />
24
- </View>
25
- );
26
-
27
- test('getByPlaceholderText, queryByPlaceholderText', () => {
28
- const { getByPlaceholderText, queryByPlaceholderText } = render(<Banana />);
29
- const input = getByPlaceholderText(/custom/i);
30
-
31
- expect(input.props.placeholder).toBe(PLACEHOLDER_FRESHNESS);
32
-
33
- const sameInput = getByPlaceholderText(PLACEHOLDER_FRESHNESS);
34
-
35
- expect(sameInput.props.placeholder).toBe(PLACEHOLDER_FRESHNESS);
36
- expect(() => getByPlaceholderText('no placeholder')).toThrow(
37
- 'Unable to find an element with placeholder: no placeholder'
38
- );
39
-
40
- expect(queryByPlaceholderText(/add/i)).toBe(input);
41
- expect(queryByPlaceholderText('no placeholder')).toBeNull();
42
- expect(() => queryByPlaceholderText(/fresh/)).toThrow(
43
- 'Found multiple elements with placeholder: /fresh/ '
44
- );
45
- });
46
-
47
- test('getAllByPlaceholderText, queryAllByPlaceholderText', () => {
48
- const { getAllByPlaceholderText, queryAllByPlaceholderText } = render(
49
- <Banana />
50
- );
51
- const inputs = getAllByPlaceholderText(/fresh/i);
52
-
53
- expect(inputs).toHaveLength(2);
54
- expect(() => getAllByPlaceholderText('no placeholder')).toThrow(
55
- 'Unable to find an element with placeholder: no placeholder'
56
- );
57
-
58
- expect(queryAllByPlaceholderText(/fresh/i)).toEqual(inputs);
59
- expect(queryAllByPlaceholderText('no placeholder')).toHaveLength(0);
60
- });
61
-
62
- test('byPlaceholderText queries support hidden option', () => {
63
- const { getByPlaceholderText, queryByPlaceholderText } = render(
64
- <TextInput placeholder="hidden" style={{ display: 'none' }} />
65
- );
66
-
67
- expect(
68
- getByPlaceholderText('hidden', { includeHiddenElements: true })
69
- ).toBeTruthy();
70
-
71
- expect(queryByPlaceholderText('hidden')).toBeFalsy();
72
- expect(
73
- queryByPlaceholderText('hidden', { includeHiddenElements: false })
74
- ).toBeFalsy();
75
- expect(() => getByPlaceholderText('hidden', { includeHiddenElements: false }))
76
- .toThrowErrorMatchingInlineSnapshot(`
77
- "Unable to find an element with placeholder: hidden
78
-
79
- <TextInput
80
- placeholder="hidden"
81
- style={
82
- {
83
- "display": "none",
84
- }
85
- }
86
- />"
87
- `);
88
- });
89
-
90
- test('byPlaceHolderText should return host component', () => {
91
- const { getByPlaceholderText } = render(
92
- <TextInput placeholder="placeholder" />
93
- );
94
-
95
- expect(getByPlaceholderText('placeholder').type).toBe('TextInput');
96
- });
97
-
98
- test('error message renders the element tree, preserving only helpful props', async () => {
99
- const view = render(<TextInput placeholder="PLACEHOLDER" key="3" />);
100
-
101
- expect(() => view.getByPlaceholderText('FOO'))
102
- .toThrowErrorMatchingInlineSnapshot(`
103
- "Unable to find an element with placeholder: FOO
104
-
105
- <TextInput
106
- placeholder="PLACEHOLDER"
107
- />"
108
- `);
109
-
110
- expect(() => view.getAllByPlaceholderText('FOO'))
111
- .toThrowErrorMatchingInlineSnapshot(`
112
- "Unable to find an element with placeholder: FOO
113
-
114
- <TextInput
115
- placeholder="PLACEHOLDER"
116
- />"
117
- `);
118
-
119
- await expect(view.findByPlaceholderText('FOO')).rejects
120
- .toThrowErrorMatchingInlineSnapshot(`
121
- "Unable to find an element with placeholder: FOO
122
-
123
- <TextInput
124
- placeholder="PLACEHOLDER"
125
- />"
126
- `);
127
-
128
- await expect(view.findAllByPlaceholderText('FOO')).rejects
129
- .toThrowErrorMatchingInlineSnapshot(`
130
- "Unable to find an element with placeholder: FOO
131
-
132
- <TextInput
133
- placeholder="PLACEHOLDER"
134
- />"
135
- `);
136
- });