@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,84 +0,0 @@
1
- import * as React from 'react';
2
- import { StyleSheet, View, Button, Text, TextInput } from 'react-native';
3
- import { render } from '..';
4
- import '@testing-library/jest-native/extend-expect';
5
-
6
- const style = StyleSheet.create({
7
- style1: {
8
- color: 'red',
9
- backgroundColor: 'green',
10
- },
11
- });
12
-
13
- test('jest-native matchers work correctly', () => {
14
- const { getByText, getByA11yHint } = render(
15
- <View>
16
- <Button title="Enabled Button" onPress={jest.fn()} />
17
- <Button title="Disabled Button" disabled={true} onPress={jest.fn()} />
18
- <Text accessibilityHint="Empty Text" style={style.style1} />
19
- <Text accessibilityHint="Not Empty Text">Not empty</Text>
20
- <View accessibilityHint="Empty View" />
21
- <View accessibilityHint="Not Empty View">
22
- <Text />
23
- </View>
24
- <View accessibilityHint="Container View">
25
- <View accessibilityHint="First-Level Child">
26
- <Text>Second-Level Child</Text>
27
- </View>
28
- </View>
29
- <TextInput
30
- accessibilityHint="Text Input"
31
- allowFontScaling={false}
32
- secureTextEntry={true}
33
- defaultValue="111"
34
- />
35
- </View>
36
- );
37
-
38
- expect(getByText('Enabled Button')).toBeEnabled();
39
- expect(getByText('Disabled Button')).not.toBeEnabled();
40
- expect(getByText('Disabled Button')).toBeDisabled();
41
- expect(getByText('Enabled Button')).not.toBeDisabled();
42
-
43
- expect(getByA11yHint('Empty Text')).toBeEmptyElement();
44
- expect(getByA11yHint('Empty View')).toBeEmptyElement();
45
- expect(getByA11yHint('Not Empty Text')).not.toBeEmptyElement();
46
- expect(getByA11yHint('Not Empty View')).not.toBeEmptyElement();
47
-
48
- expect(getByA11yHint('Container View')).toContainElement(
49
- // $FlowFixMe - TODO: fix @testing-library/jest-native flow typings
50
- getByA11yHint('First-Level Child')
51
- );
52
- expect(getByA11yHint('Container View')).toContainElement(
53
- // $FlowFixMe - TODO: fix @testing-library/jest-native flow typings
54
- getByText('Second-Level Child')
55
- );
56
- expect(getByA11yHint('Container View')).not.toContainElement(
57
- // $FlowFixMe - TODO: fix @testing-library/jest-native flow typings
58
- getByText('Enabled Button')
59
- );
60
-
61
- expect(getByA11yHint('Not Empty Text')).toHaveTextContent('Not empty');
62
- expect(getByA11yHint('Not Empty Text')).toHaveTextContent(/Not empty/);
63
- expect(getByA11yHint('Not Empty Text')).not.toHaveTextContent('Is empty');
64
-
65
- expect(getByA11yHint('Empty Text')).toHaveStyle({ color: 'red' });
66
- expect(getByA11yHint('Empty Text')).toHaveStyle({
67
- color: 'red',
68
- backgroundColor: 'green',
69
- });
70
- expect(getByA11yHint('Empty Text')).not.toHaveStyle({ color: 'green' });
71
- expect(getByA11yHint('Empty Text')).not.toHaveStyle({
72
- color: 'green',
73
- backgroundColor: 'green',
74
- });
75
-
76
- const textInput = getByA11yHint('Text Input');
77
- expect(textInput).toBeTruthy();
78
- expect(textInput).toHaveProp('allowFontScaling');
79
- expect(textInput).toHaveProp('allowFontScaling', false);
80
- expect(textInput).toHaveProp('secureTextEntry');
81
- expect(textInput).toHaveProp('secureTextEntry', true);
82
- expect(textInput).toHaveProp('defaultValue');
83
- expect(textInput).toHaveProp('defaultValue', '111');
84
- });
@@ -1,62 +0,0 @@
1
- import * as React from 'react';
2
- import {
3
- View,
4
- TouchableOpacity,
5
- Text,
6
- ScrollView,
7
- TextInput,
8
- } from 'react-native';
9
- import { render, fireEvent } from '..';
10
-
11
- type QuestionsBoardProps = {
12
- questions: string[];
13
- onSubmit: (obj: {}) => void;
14
- };
15
- function QuestionsBoard({ questions, onSubmit }: QuestionsBoardProps) {
16
- const [data, setData] = React.useState({});
17
-
18
- return (
19
- <ScrollView>
20
- {questions.map((q, index) => {
21
- return (
22
- <View key={q}>
23
- <Text>{q}</Text>
24
- <TextInput
25
- accessibilityLabel="answer input"
26
- accessibilityHint="input"
27
- onChangeText={(text) => {
28
- setData((state) => ({
29
- ...state,
30
- [index + 1]: { q, a: text },
31
- }));
32
- }}
33
- />
34
- </View>
35
- );
36
- })}
37
- <TouchableOpacity onPress={() => onSubmit(data)}>
38
- <Text>Submit</Text>
39
- </TouchableOpacity>
40
- </ScrollView>
41
- );
42
- }
43
-
44
- test('form submits two answers', () => {
45
- const allQuestions = ['q1', 'q2'];
46
- const mockFn = jest.fn();
47
-
48
- const { getAllByLabelText, getByText } = render(
49
- <QuestionsBoard questions={allQuestions} onSubmit={mockFn} />
50
- );
51
-
52
- const answerInputs = getAllByLabelText('answer input');
53
-
54
- fireEvent.changeText(answerInputs[0], 'a1');
55
- fireEvent.changeText(answerInputs[1], 'a2');
56
- fireEvent.press(getByText('Submit'));
57
-
58
- expect(mockFn).toHaveBeenCalledWith({
59
- '1': { q: 'q1', a: 'a1' },
60
- '2': { q: 'q2', a: 'a2' },
61
- });
62
- });
@@ -1,126 +0,0 @@
1
- import * as React from 'react';
2
- import { View, Text, TextInput, Switch } from 'react-native';
3
- import { render } from '..';
4
-
5
- /**
6
- * Tests in this file are intended to give us an proactive warning that React Native behavior has
7
- * changed in a way that may impact our code like queries or event handling.
8
- */
9
-
10
- test('React Native API assumption: <View> renders single host element', () => {
11
- const view = render(<View testID="test" />);
12
-
13
- expect(view.toJSON()).toMatchInlineSnapshot(`
14
- <View
15
- testID="test"
16
- />
17
- `);
18
- });
19
-
20
- test('React Native API assumption: <Text> renders single host element', () => {
21
- const view = render(<Text testID="test">Hello</Text>);
22
-
23
- expect(view.toJSON()).toMatchInlineSnapshot(`
24
- <Text
25
- testID="test"
26
- >
27
- Hello
28
- </Text>
29
- `);
30
- });
31
-
32
- test('React Native API assumption: nested <Text> renders single host element', () => {
33
- const view = render(
34
- <Text testID="test">
35
- <Text testID="before">Before</Text>
36
- Hello
37
- <Text testID="after">
38
- <Text testID="deeplyNested">Deeply nested</Text>
39
- </Text>
40
- </Text>
41
- );
42
-
43
- expect(view.toJSON()).toMatchInlineSnapshot(`
44
- <Text
45
- testID="test"
46
- >
47
- <Text
48
- testID="before"
49
- >
50
- Before
51
- </Text>
52
- Hello
53
- <Text
54
- testID="after"
55
- >
56
- <Text
57
- testID="deeplyNested"
58
- >
59
- Deeply nested
60
- </Text>
61
- </Text>
62
- </Text>
63
- `);
64
- });
65
-
66
- test('React Native API assumption: <TextInput> renders single host element', () => {
67
- const view = render(
68
- <TextInput
69
- testID="test"
70
- defaultValue="default"
71
- value="currentValue"
72
- placeholder="Placeholder"
73
- />
74
- );
75
-
76
- expect(view.toJSON()).toMatchInlineSnapshot(`
77
- <TextInput
78
- defaultValue="default"
79
- placeholder="Placeholder"
80
- testID="test"
81
- value="currentValue"
82
- />
83
- `);
84
- });
85
-
86
- test('React Native API assumption: <TextInput> with nested Text renders single host element', () => {
87
- const view = render(
88
- <TextInput testID="test" placeholder="Placeholder">
89
- <Text>Hello</Text>
90
- </TextInput>
91
- );
92
-
93
- expect(view.toJSON()).toMatchInlineSnapshot(`
94
- <TextInput
95
- placeholder="Placeholder"
96
- testID="test"
97
- >
98
- <Text>
99
- Hello
100
- </Text>
101
- </TextInput>
102
- `);
103
- });
104
-
105
- test('React Native API assumption: <Switch> renders single host element', () => {
106
- const view = render(
107
- <Switch testID="test" value={true} onChange={jest.fn()} />
108
- );
109
-
110
- expect(view.toJSON()).toMatchInlineSnapshot(`
111
- <RCTSwitch
112
- accessibilityRole="switch"
113
- onChange={[Function]}
114
- onResponderTerminationRequest={[Function]}
115
- onStartShouldSetResponder={[Function]}
116
- style={
117
- {
118
- "height": 31,
119
- "width": 51,
120
- }
121
- }
122
- testID="test"
123
- value={true}
124
- />
125
- `);
126
- });
@@ -1,207 +0,0 @@
1
- /* eslint-disable no-console */
2
- import * as React from 'react';
3
- import { View, Text, TextInput, Pressable } from 'react-native';
4
- import stripAnsi from 'strip-ansi';
5
- import { render, fireEvent, configure } from '..';
6
-
7
- type ConsoleLogMock = jest.Mock<Array<string>>;
8
-
9
- const PLACEHOLDER_FRESHNESS = 'Add custom freshness';
10
- const PLACEHOLDER_CHEF = 'Who inspected freshness?';
11
- const INPUT_FRESHNESS = 'Custom Freshie';
12
- const INPUT_CHEF = 'I inspected freshie';
13
- const DEFAULT_INPUT_CHEF = 'What did you inspect?';
14
- const DEFAULT_INPUT_CUSTOMER = 'What banana?';
15
-
16
- const ignoreWarnings = ['Using debug("message") is deprecated'];
17
-
18
- const realConsoleWarn = console.warn;
19
-
20
- beforeEach(() => {
21
- jest.spyOn(console, 'log').mockImplementation(() => {});
22
- jest.spyOn(console, 'warn').mockImplementation((message) => {
23
- if (!ignoreWarnings.some((warning) => message.includes(warning))) {
24
- realConsoleWarn(message);
25
- }
26
- });
27
- });
28
-
29
- afterEach(() => {
30
- jest.restoreAllMocks();
31
- });
32
-
33
- class MyButton extends React.Component<any> {
34
- render() {
35
- return (
36
- <Pressable onPress={this.props.onPress}>
37
- <Text>{this.props.children}</Text>
38
- </Pressable>
39
- );
40
- }
41
- }
42
-
43
- class Banana extends React.Component<any, { fresh: boolean }> {
44
- state = {
45
- fresh: false,
46
- };
47
-
48
- componentDidUpdate() {
49
- if (this.props.onUpdate) {
50
- this.props.onUpdate();
51
- }
52
- }
53
-
54
- componentWillUnmount() {
55
- if (this.props.onUnmount) {
56
- this.props.onUnmount();
57
- }
58
- }
59
-
60
- changeFresh = () => {
61
- this.setState((state) => ({
62
- fresh: !state.fresh,
63
- }));
64
- };
65
-
66
- render() {
67
- const test = 0;
68
- return (
69
- <View>
70
- <Text>Is the banana fresh?</Text>
71
- <Text testID="bananaFresh">
72
- {this.state.fresh ? 'fresh' : 'not fresh'}
73
- </Text>
74
- <TextInput
75
- testID="bananaCustomFreshness"
76
- placeholder={PLACEHOLDER_FRESHNESS}
77
- value={INPUT_FRESHNESS}
78
- />
79
- <TextInput
80
- testID="bananaChef"
81
- placeholder={PLACEHOLDER_CHEF}
82
- value={INPUT_CHEF}
83
- defaultValue={DEFAULT_INPUT_CHEF}
84
- />
85
- <TextInput defaultValue={DEFAULT_INPUT_CUSTOMER} />
86
- <TextInput defaultValue={'hello'} value="" />
87
- <MyButton onPress={this.changeFresh} type="primary">
88
- Change freshness!
89
- </MyButton>
90
- <Text testID="duplicateText">First Text</Text>
91
- <Text testID="duplicateText">Second Text</Text>
92
- <Text>{test}</Text>
93
- </View>
94
- );
95
- }
96
- }
97
-
98
- test('debug', () => {
99
- const { debug } = render(<Banana />);
100
-
101
- debug();
102
- debug('my custom message');
103
- debug.shallow();
104
- debug.shallow('my other custom message');
105
- debug({ message: 'another custom message' });
106
-
107
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
108
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot();
109
- expect(stripAnsi(mockCalls[1][0] + mockCalls[1][1])).toMatchSnapshot(
110
- 'with message'
111
- );
112
- expect(stripAnsi(mockCalls[2][0])).toMatchSnapshot('shallow');
113
- expect(stripAnsi(mockCalls[3][0] + mockCalls[3][1])).toMatchSnapshot(
114
- 'shallow with message'
115
- );
116
- expect(stripAnsi(mockCalls[4][0] + mockCalls[4][1])).toMatchSnapshot(
117
- 'another custom message'
118
- );
119
-
120
- const mockWarnCalls = (console.warn as any as ConsoleLogMock).mock.calls;
121
- expect(mockWarnCalls[0]).toEqual([
122
- 'Using debug("message") is deprecated and will be removed in future release, please use debug({ message; "message" }) instead.',
123
- ]);
124
- });
125
-
126
- test('debug changing component', () => {
127
- const { UNSAFE_getByProps, debug } = render(<Banana />);
128
- fireEvent.press(UNSAFE_getByProps({ type: 'primary' }));
129
-
130
- debug();
131
-
132
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
133
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot(
134
- 'bananaFresh button message should now be "fresh"'
135
- );
136
- });
137
-
138
- test('debug with only children prop', () => {
139
- const { debug } = render(<Banana />);
140
- debug({ mapProps: () => ({}) });
141
-
142
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
143
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot();
144
- });
145
-
146
- test('debug with only prop whose value is bananaChef', () => {
147
- const { debug } = render(<Banana />);
148
- debug({
149
- mapProps: (props) => {
150
- const filterProps: Record<string, unknown> = {};
151
- Object.keys(props).forEach((key) => {
152
- if (props[key] === 'bananaChef') {
153
- filterProps[key] = props[key];
154
- }
155
- });
156
- return filterProps;
157
- },
158
- });
159
-
160
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
161
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot();
162
- });
163
-
164
- test('debug with only props from TextInput components', () => {
165
- const { debug } = render(<Banana />);
166
- debug({
167
- mapProps: (props, node) => (node.type === 'TextInput' ? props : {}),
168
- });
169
-
170
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
171
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot();
172
- });
173
-
174
- test('debug should use debugOptions from config when no option is specified', () => {
175
- configure({ defaultDebugOptions: { mapProps: () => ({}) } });
176
-
177
- const { debug } = render(
178
- <View style={{ backgroundColor: 'red' }}>
179
- <Text>hello</Text>
180
- </View>
181
- );
182
- debug();
183
-
184
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
185
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot();
186
- });
187
-
188
- test('filtering out props through mapProps option should not modify component', () => {
189
- const { debug, getByTestId } = render(<View testID="viewTestID" />);
190
- debug({ mapProps: () => ({}) });
191
-
192
- expect(getByTestId('viewTestID')).toBeTruthy();
193
- });
194
-
195
- test('debug should use given options over config debugOptions', () => {
196
- configure({ defaultDebugOptions: { mapProps: () => ({}) } });
197
-
198
- const { debug } = render(
199
- <View style={{ backgroundColor: 'red' }}>
200
- <Text>hello</Text>
201
- </View>
202
- );
203
- debug({ mapProps: (props) => props });
204
-
205
- const mockCalls = (console.log as any as ConsoleLogMock).mock.calls;
206
- expect(stripAnsi(mockCalls[0][0])).toMatchSnapshot();
207
- });
@@ -1,157 +0,0 @@
1
- import * as React from 'react';
2
- import { View, Text, Pressable } from 'react-native';
3
- import { render, fireEvent } from '..';
4
-
5
- // eslint-disable-next-line no-console
6
- const originalConsoleError = console.error;
7
-
8
- const VALIDATION_ERROR =
9
- 'Invariant Violation: Text strings must be rendered within a <Text> component';
10
- const PROFILER_ERROR = 'The above error occurred in the <Profiler> component';
11
-
12
- beforeEach(() => {
13
- // eslint-disable-next-line no-console
14
- console.error = (errorMessage: string) => {
15
- if (!errorMessage.includes(PROFILER_ERROR)) {
16
- originalConsoleError(errorMessage);
17
- }
18
- };
19
- });
20
-
21
- afterEach(() => {
22
- // eslint-disable-next-line no-console
23
- console.error = originalConsoleError;
24
- });
25
-
26
- test('should throw when rendering a string outside a text component', () => {
27
- expect(() =>
28
- render(<View>hello</View>, {
29
- unstable_validateStringsRenderedWithinText: true,
30
- })
31
- ).toThrow(
32
- `${VALIDATION_ERROR}. Detected attempt to render "hello" string within a <View> component.`
33
- );
34
- });
35
-
36
- test('should throw an error when rerendering with text outside of Text component', () => {
37
- const { rerender } = render(<View />, {
38
- unstable_validateStringsRenderedWithinText: true,
39
- });
40
-
41
- expect(() => rerender(<View>hello</View>)).toThrow(
42
- `${VALIDATION_ERROR}. Detected attempt to render "hello" string within a <View> component.`
43
- );
44
- });
45
-
46
- const InvalidTextAfterPress = () => {
47
- const [showText, setShowText] = React.useState(false);
48
-
49
- if (!showText) {
50
- return (
51
- <Pressable onPress={() => setShowText(true)}>
52
- <Text>Show text</Text>
53
- </Pressable>
54
- );
55
- }
56
-
57
- return <View>text rendered outside text component</View>;
58
- };
59
-
60
- test('should throw an error when strings are rendered outside Text', () => {
61
- const { getByText } = render(<InvalidTextAfterPress />, {
62
- unstable_validateStringsRenderedWithinText: true,
63
- });
64
-
65
- expect(() => fireEvent.press(getByText('Show text'))).toThrow(
66
- `${VALIDATION_ERROR}. Detected attempt to render "text rendered outside text component" string within a <View> component.`
67
- );
68
- });
69
-
70
- test('should not throw for texts nested in fragments', () => {
71
- expect(() =>
72
- render(
73
- <Text>
74
- <>hello</>
75
- </Text>,
76
- { unstable_validateStringsRenderedWithinText: true }
77
- )
78
- ).not.toThrow();
79
- });
80
-
81
- test('should not throw if option validateRenderedString is false', () => {
82
- expect(() => render(<View>hello</View>)).not.toThrow();
83
- });
84
-
85
- test(`should throw when one of the children is a text and the parent is not a Text component`, () => {
86
- expect(() =>
87
- render(
88
- <View>
89
- <Text>hello</Text>
90
- hello
91
- </View>,
92
- { unstable_validateStringsRenderedWithinText: true }
93
- )
94
- ).toThrow(
95
- `${VALIDATION_ERROR}. Detected attempt to render "hello" string within a <View> component.`
96
- );
97
- });
98
-
99
- test(`should throw when a string is rendered within a fragment rendered outside a Text`, () => {
100
- expect(() =>
101
- render(
102
- <View>
103
- <>hello</>
104
- </View>,
105
- { unstable_validateStringsRenderedWithinText: true }
106
- )
107
- ).toThrow(
108
- `${VALIDATION_ERROR}. Detected attempt to render "hello" string within a <View> component.`
109
- );
110
- });
111
-
112
- test('should throw if a number is rendered outside a text', () => {
113
- expect(() =>
114
- render(<View>0</View>, { unstable_validateStringsRenderedWithinText: true })
115
- ).toThrow(
116
- `${VALIDATION_ERROR}. Detected attempt to render "0" string within a <View> component.`
117
- );
118
- });
119
-
120
- const Trans = ({ i18nKey }: { i18nKey: string }) => <>{i18nKey}</>;
121
-
122
- test('should throw with components returning string value not rendered in Text', () => {
123
- expect(() =>
124
- render(
125
- <View>
126
- <Trans i18nKey="hello" />
127
- </View>,
128
- { unstable_validateStringsRenderedWithinText: true }
129
- )
130
- ).toThrow(
131
- `${VALIDATION_ERROR}. Detected attempt to render "hello" string within a <View> component.`
132
- );
133
- });
134
-
135
- test('should not throw with components returning string value rendered in Text', () => {
136
- expect(() =>
137
- render(
138
- <Text>
139
- <Trans i18nKey="hello" />
140
- </Text>,
141
- { unstable_validateStringsRenderedWithinText: true }
142
- )
143
- ).not.toThrow();
144
- });
145
-
146
- test('should throw when rendering string in a View in a Text', () => {
147
- expect(() =>
148
- render(
149
- <Text>
150
- <View>hello</View>
151
- </Text>,
152
- { unstable_validateStringsRenderedWithinText: true }
153
- )
154
- ).toThrow(
155
- `${VALIDATION_ERROR}. Detected attempt to render "hello" string within a <View> component.`
156
- );
157
- });