@telus-uds/components-base 1.26.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -2
- package/component-docs.json +2 -1
- package/lib/Carousel/dictionary.js +6 -6
- package/lib-module/Carousel/dictionary.js +6 -6
- package/package.json +2 -2
- package/src/Carousel/dictionary.js +6 -6
- package/.eslintrc.js +0 -9
- package/__tests17__/A11yText/A11yText.test.jsx +0 -34
- package/__tests17__/ActivityIndicator/ActivityIndicator.test.jsx +0 -68
- package/__tests17__/ActivityIndicator/__snapshots__/ActivityIndicator.test.jsx.snap +0 -299
- package/__tests17__/Box/Box.test.jsx +0 -111
- package/__tests17__/Button/Button.test.jsx +0 -86
- package/__tests17__/Button/ButtonBase.test.jsx +0 -82
- package/__tests17__/Button/ButtonGroup.test.jsx +0 -347
- package/__tests17__/Button/ButtonLink.test.jsx +0 -61
- package/__tests17__/Card/Card.test.jsx +0 -63
- package/__tests17__/Carousel/Carousel.test.jsx +0 -128
- package/__tests17__/Carousel/CarouselTabs.test.jsx +0 -142
- package/__tests17__/Checkbox/Checkbox.test.jsx +0 -94
- package/__tests17__/Checkbox/CheckboxGroup.test.jsx +0 -246
- package/__tests17__/Divider/Divider.test.jsx +0 -91
- package/__tests17__/ExpandCollapse/ExpandCollapse.test.jsx +0 -109
- package/__tests17__/Feedback/Feedback.test.jsx +0 -42
- package/__tests17__/FlexGrid/Col.test.jsx +0 -261
- package/__tests17__/FlexGrid/FlexGrid.test.jsx +0 -136
- package/__tests17__/FlexGrid/Row.test.jsx +0 -273
- package/__tests17__/HorizontalScroll/HorizontalScroll.test.jsx +0 -165
- package/__tests17__/Icon/Icon.test.jsx +0 -61
- package/__tests17__/IconButton/IconButton.test.jsx +0 -52
- package/__tests17__/InputLabel/InputLabel.test.jsx +0 -28
- package/__tests17__/InputLabel/__snapshots__/InputLabel.test.jsx.snap +0 -3
- package/__tests17__/InputSupports/InputSupports.test.jsx +0 -60
- package/__tests17__/Link/Link.test.jsx +0 -63
- package/__tests17__/Link/TextButton.test.jsx +0 -35
- package/__tests17__/List/List.test.jsx +0 -82
- package/__tests17__/Modal/Modal.test.jsx +0 -47
- package/__tests17__/Notification/Notification.test.jsx +0 -20
- package/__tests17__/Pagination/Pagination.test.jsx +0 -160
- package/__tests17__/Progress/Progress.test.jsx +0 -79
- package/__tests17__/Radio/Radio.test.jsx +0 -87
- package/__tests17__/Radio/RadioGroup.test.jsx +0 -220
- package/__tests17__/RadioCard/RadioCard.test.jsx +0 -87
- package/__tests17__/RadioCard/RadioCardGroup.test.jsx +0 -246
- package/__tests17__/Search/Search.test.jsx +0 -87
- package/__tests17__/Select/Select.test.jsx +0 -94
- package/__tests17__/SideNav/SideNav.test.jsx +0 -110
- package/__tests17__/Skeleton/Skeleton.test.jsx +0 -61
- package/__tests17__/SkipLink/SkipLink.test.jsx +0 -61
- package/__tests17__/Spacer/Spacer.test.jsx +0 -63
- package/__tests17__/StackView/StackView.test.jsx +0 -211
- package/__tests17__/StackView/StackWrap.test.jsx +0 -47
- package/__tests17__/StackView/getStackedContent.test.jsx +0 -295
- package/__tests17__/StepTracker/StepTracker.test.jsx +0 -108
- package/__tests17__/Tabs/Tabs.test.jsx +0 -49
- package/__tests17__/Tags/Tags.test.jsx +0 -327
- package/__tests17__/TextInput/TextArea.test.jsx +0 -35
- package/__tests17__/TextInput/TextInputBase.test.jsx +0 -125
- package/__tests17__/ThemeProvider/ThemeProvider.test.jsx +0 -82
- package/__tests17__/ThemeProvider/useThemeTokens.test.jsx +0 -514
- package/__tests17__/ThemeProvider/utils/theme-tokens.test.js +0 -41
- package/__tests17__/ToggleSwitch/ToggleSwitch.test.jsx +0 -82
- package/__tests17__/ToggleSwitch/ToggleSwitchGroup.test.jsx +0 -192
- package/__tests17__/Tooltip/Tooltip.test.jsx +0 -65
- package/__tests17__/Tooltip/getTooltipPosition.test.js +0 -79
- package/__tests17__/Typography/typography.test.jsx +0 -90
- package/__tests17__/utils/children.test.jsx +0 -128
- package/__tests17__/utils/containUniqueFields.test.js +0 -25
- package/__tests17__/utils/input.test.js +0 -375
- package/__tests17__/utils/props.test.js +0 -36
- package/__tests17__/utils/semantics.test.jsx +0 -34
- package/__tests17__/utils/useCopy.test.js +0 -42
- package/__tests17__/utils/useResponsiveProp.test.jsx +0 -202
- package/__tests17__/utils/useSpacingScale.test.jsx +0 -273
- package/__tests17__/utils/useUniqueId.test.js +0 -31
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render } from '@testing-library/react-native'
|
|
3
|
-
import { Text } from 'react-native'
|
|
4
|
-
import { viewports } from '@telus-uds/system-constants'
|
|
5
|
-
|
|
6
|
-
import FlexGrid from '../../src/FlexGrid'
|
|
7
|
-
import Theme from '../../__fixtures__/Theme'
|
|
8
|
-
import Viewport from '../../__fixtures__/Viewport'
|
|
9
|
-
|
|
10
|
-
describe('FlexGrid Row', () => {
|
|
11
|
-
it('applies correct styles from horizontalAlign prop', () => {
|
|
12
|
-
const expectedStyles = {
|
|
13
|
-
start: {
|
|
14
|
-
justifyContent: 'flex-start',
|
|
15
|
-
textAlign: 'left'
|
|
16
|
-
},
|
|
17
|
-
center: {
|
|
18
|
-
justifyContent: 'center',
|
|
19
|
-
textAlign: 'center'
|
|
20
|
-
},
|
|
21
|
-
end: {
|
|
22
|
-
justifyContent: 'flex-end',
|
|
23
|
-
textAlign: 'right'
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const { getByText } = render(
|
|
28
|
-
<Theme>
|
|
29
|
-
<Viewport>
|
|
30
|
-
<FlexGrid>
|
|
31
|
-
<FlexGrid.Row horizontalAlign="start">
|
|
32
|
-
<Text>start</Text>
|
|
33
|
-
</FlexGrid.Row>
|
|
34
|
-
<FlexGrid.Row horizontalAlign="center">
|
|
35
|
-
<Text>center</Text>
|
|
36
|
-
</FlexGrid.Row>
|
|
37
|
-
<FlexGrid.Row horizontalAlign="end">
|
|
38
|
-
<Text>end</Text>
|
|
39
|
-
</FlexGrid.Row>
|
|
40
|
-
</FlexGrid>
|
|
41
|
-
</Viewport>
|
|
42
|
-
</Theme>
|
|
43
|
-
)
|
|
44
|
-
const start = getByText('start').parent
|
|
45
|
-
const center = getByText('center').parent
|
|
46
|
-
const end = getByText('end').parent
|
|
47
|
-
|
|
48
|
-
expect(start).toHaveStyle(expectedStyles.start)
|
|
49
|
-
expect(start).not.toHaveStyle(expectedStyles.center)
|
|
50
|
-
expect(start).not.toHaveStyle(expectedStyles.end)
|
|
51
|
-
|
|
52
|
-
expect(center).toHaveStyle(expectedStyles.center)
|
|
53
|
-
expect(center).not.toHaveStyle(expectedStyles.start)
|
|
54
|
-
expect(center).not.toHaveStyle(expectedStyles.end)
|
|
55
|
-
|
|
56
|
-
expect(end).toHaveStyle(expectedStyles.end)
|
|
57
|
-
expect(end).not.toHaveStyle(expectedStyles.center)
|
|
58
|
-
expect(end).not.toHaveStyle(expectedStyles.start)
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('applies correct styles from verticalAlign prop', () => {
|
|
62
|
-
const expectedStyles = {
|
|
63
|
-
top: { alignItems: 'flex-start' },
|
|
64
|
-
middle: { alignItems: 'center' },
|
|
65
|
-
bottom: { alignItems: 'flex-end' }
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const { getByText } = render(
|
|
69
|
-
<Theme>
|
|
70
|
-
<Viewport>
|
|
71
|
-
<FlexGrid>
|
|
72
|
-
<FlexGrid.Row verticalAlign="top">
|
|
73
|
-
<Text>top</Text>
|
|
74
|
-
</FlexGrid.Row>
|
|
75
|
-
<FlexGrid.Row verticalAlign="middle">
|
|
76
|
-
<Text>middle</Text>
|
|
77
|
-
</FlexGrid.Row>
|
|
78
|
-
<FlexGrid.Row verticalAlign="bottom">
|
|
79
|
-
<Text>bottom</Text>
|
|
80
|
-
</FlexGrid.Row>
|
|
81
|
-
</FlexGrid>
|
|
82
|
-
</Viewport>
|
|
83
|
-
</Theme>
|
|
84
|
-
)
|
|
85
|
-
const top = getByText('top').parent
|
|
86
|
-
const middle = getByText('middle').parent
|
|
87
|
-
const bottom = getByText('bottom').parent
|
|
88
|
-
|
|
89
|
-
expect(top).toHaveStyle(expectedStyles.top)
|
|
90
|
-
expect(top).not.toHaveStyle(expectedStyles.middle)
|
|
91
|
-
expect(top).not.toHaveStyle(expectedStyles.bottom)
|
|
92
|
-
|
|
93
|
-
expect(middle).toHaveStyle(expectedStyles.middle)
|
|
94
|
-
expect(middle).not.toHaveStyle(expectedStyles.top)
|
|
95
|
-
expect(middle).not.toHaveStyle(expectedStyles.bottom)
|
|
96
|
-
|
|
97
|
-
expect(bottom).toHaveStyle(expectedStyles.bottom)
|
|
98
|
-
expect(bottom).not.toHaveStyle(expectedStyles.top)
|
|
99
|
-
expect(bottom).not.toHaveStyle(expectedStyles.middle)
|
|
100
|
-
})
|
|
101
|
-
|
|
102
|
-
it('applies correct styles from distribute prop', () => {
|
|
103
|
-
const expectedStyles = {
|
|
104
|
-
around: { justifyContent: 'space-around' },
|
|
105
|
-
between: { justifyContent: 'space-between' }
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const { getByText } = render(
|
|
109
|
-
<Theme>
|
|
110
|
-
<Viewport>
|
|
111
|
-
<FlexGrid>
|
|
112
|
-
<FlexGrid.Row distribute="around">
|
|
113
|
-
<Text>around</Text>
|
|
114
|
-
</FlexGrid.Row>
|
|
115
|
-
<FlexGrid.Row distribute="between">
|
|
116
|
-
<Text>between</Text>
|
|
117
|
-
</FlexGrid.Row>
|
|
118
|
-
</FlexGrid>
|
|
119
|
-
</Viewport>
|
|
120
|
-
</Theme>
|
|
121
|
-
)
|
|
122
|
-
const around = getByText('around').parent
|
|
123
|
-
const between = getByText('between').parent
|
|
124
|
-
|
|
125
|
-
expect(around).toHaveStyle(expectedStyles.around)
|
|
126
|
-
expect(around).not.toHaveStyle(expectedStyles.between)
|
|
127
|
-
|
|
128
|
-
expect(between).toHaveStyle(expectedStyles.between)
|
|
129
|
-
expect(between).not.toHaveStyle(expectedStyles.around)
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
const renderEachReverseProp = (viewport) =>
|
|
133
|
-
render(
|
|
134
|
-
<Theme>
|
|
135
|
-
<Viewport viewport={viewport}>
|
|
136
|
-
<FlexGrid>
|
|
137
|
-
{viewports.keys.map((reverseViewport) => {
|
|
138
|
-
const propName = `${reverseViewport}Reverse`
|
|
139
|
-
const props = { [propName]: true }
|
|
140
|
-
const content = `${viewport}--${propName}`
|
|
141
|
-
return (
|
|
142
|
-
<FlexGrid.Row key={content} {...props}>
|
|
143
|
-
<Text>{content}</Text>
|
|
144
|
-
</FlexGrid.Row>
|
|
145
|
-
)
|
|
146
|
-
})}
|
|
147
|
-
</FlexGrid>
|
|
148
|
-
</Viewport>
|
|
149
|
-
</Theme>
|
|
150
|
-
)
|
|
151
|
-
|
|
152
|
-
it('applies correct row order for each reverse prop at viewport "xs"', () => {
|
|
153
|
-
const { getByText } = renderEachReverseProp('xs')
|
|
154
|
-
expect(getByText('xs--xsReverse').parent).toHaveStyle({
|
|
155
|
-
flexDirection: 'row-reverse',
|
|
156
|
-
flexWrap: 'wrap-reverse'
|
|
157
|
-
})
|
|
158
|
-
expect(getByText('xs--smReverse').parent).toHaveStyle({
|
|
159
|
-
flexDirection: 'row',
|
|
160
|
-
flexWrap: 'wrap'
|
|
161
|
-
})
|
|
162
|
-
expect(getByText('xs--mdReverse').parent).toHaveStyle({
|
|
163
|
-
flexDirection: 'row',
|
|
164
|
-
flexWrap: 'wrap'
|
|
165
|
-
})
|
|
166
|
-
expect(getByText('xs--lgReverse').parent).toHaveStyle({
|
|
167
|
-
flexDirection: 'row',
|
|
168
|
-
flexWrap: 'wrap'
|
|
169
|
-
})
|
|
170
|
-
expect(getByText('xs--xlReverse').parent).toHaveStyle({
|
|
171
|
-
flexDirection: 'row',
|
|
172
|
-
flexWrap: 'wrap'
|
|
173
|
-
})
|
|
174
|
-
})
|
|
175
|
-
|
|
176
|
-
it('applies correct row order for each reverse prop at viewport "sm"', () => {
|
|
177
|
-
const { getByText } = renderEachReverseProp('sm')
|
|
178
|
-
expect(getByText('sm--xsReverse').parent).toHaveStyle({
|
|
179
|
-
flexDirection: 'row-reverse',
|
|
180
|
-
flexWrap: 'wrap-reverse'
|
|
181
|
-
})
|
|
182
|
-
expect(getByText('sm--smReverse').parent).toHaveStyle({
|
|
183
|
-
flexDirection: 'row-reverse',
|
|
184
|
-
flexWrap: 'wrap-reverse'
|
|
185
|
-
})
|
|
186
|
-
expect(getByText('sm--mdReverse').parent).toHaveStyle({
|
|
187
|
-
flexDirection: 'row',
|
|
188
|
-
flexWrap: 'wrap'
|
|
189
|
-
})
|
|
190
|
-
expect(getByText('sm--lgReverse').parent).toHaveStyle({
|
|
191
|
-
flexDirection: 'row',
|
|
192
|
-
flexWrap: 'wrap'
|
|
193
|
-
})
|
|
194
|
-
expect(getByText('sm--xlReverse').parent).toHaveStyle({
|
|
195
|
-
flexDirection: 'row',
|
|
196
|
-
flexWrap: 'wrap'
|
|
197
|
-
})
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
it('applies correct row order for each reverse prop at viewport "md"', () => {
|
|
201
|
-
const { getByText } = renderEachReverseProp('md')
|
|
202
|
-
expect(getByText('md--xsReverse').parent).toHaveStyle({
|
|
203
|
-
flexDirection: 'row-reverse',
|
|
204
|
-
flexWrap: 'wrap-reverse'
|
|
205
|
-
})
|
|
206
|
-
expect(getByText('md--smReverse').parent).toHaveStyle({
|
|
207
|
-
flexDirection: 'row-reverse',
|
|
208
|
-
flexWrap: 'wrap-reverse'
|
|
209
|
-
})
|
|
210
|
-
expect(getByText('md--mdReverse').parent).toHaveStyle({
|
|
211
|
-
flexDirection: 'row-reverse',
|
|
212
|
-
flexWrap: 'wrap-reverse'
|
|
213
|
-
})
|
|
214
|
-
expect(getByText('md--lgReverse').parent).toHaveStyle({
|
|
215
|
-
flexDirection: 'row',
|
|
216
|
-
flexWrap: 'wrap'
|
|
217
|
-
})
|
|
218
|
-
expect(getByText('md--xlReverse').parent).toHaveStyle({
|
|
219
|
-
flexDirection: 'row',
|
|
220
|
-
flexWrap: 'wrap'
|
|
221
|
-
})
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
it('applies correct row order for each reverse prop at viewport "lg"', () => {
|
|
225
|
-
const { getByText } = renderEachReverseProp('lg')
|
|
226
|
-
|
|
227
|
-
expect(getByText('lg--xsReverse').parent).toHaveStyle({
|
|
228
|
-
flexDirection: 'row-reverse',
|
|
229
|
-
flexWrap: 'wrap-reverse'
|
|
230
|
-
})
|
|
231
|
-
expect(getByText('lg--smReverse').parent).toHaveStyle({
|
|
232
|
-
flexDirection: 'row-reverse',
|
|
233
|
-
flexWrap: 'wrap-reverse'
|
|
234
|
-
})
|
|
235
|
-
expect(getByText('lg--mdReverse').parent).toHaveStyle({
|
|
236
|
-
flexDirection: 'row-reverse',
|
|
237
|
-
flexWrap: 'wrap-reverse'
|
|
238
|
-
})
|
|
239
|
-
expect(getByText('lg--lgReverse').parent).toHaveStyle({
|
|
240
|
-
flexDirection: 'row-reverse',
|
|
241
|
-
flexWrap: 'wrap-reverse'
|
|
242
|
-
})
|
|
243
|
-
expect(getByText('lg--xlReverse').parent).toHaveStyle({
|
|
244
|
-
flexDirection: 'row',
|
|
245
|
-
flexWrap: 'wrap'
|
|
246
|
-
})
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
it('applies correct row order for each reverse prop at viewport "xl"', () => {
|
|
250
|
-
const { getByText } = renderEachReverseProp('xl')
|
|
251
|
-
|
|
252
|
-
expect(getByText('xl--xsReverse').parent).toHaveStyle({
|
|
253
|
-
flexDirection: 'row-reverse',
|
|
254
|
-
flexWrap: 'wrap-reverse'
|
|
255
|
-
})
|
|
256
|
-
expect(getByText('xl--smReverse').parent).toHaveStyle({
|
|
257
|
-
flexDirection: 'row-reverse',
|
|
258
|
-
flexWrap: 'wrap-reverse'
|
|
259
|
-
})
|
|
260
|
-
expect(getByText('xl--mdReverse').parent).toHaveStyle({
|
|
261
|
-
flexDirection: 'row-reverse',
|
|
262
|
-
flexWrap: 'wrap-reverse'
|
|
263
|
-
})
|
|
264
|
-
expect(getByText('xl--lgReverse').parent).toHaveStyle({
|
|
265
|
-
flexDirection: 'row-reverse',
|
|
266
|
-
flexWrap: 'wrap-reverse'
|
|
267
|
-
})
|
|
268
|
-
expect(getByText('xl--xlReverse').parent).toHaveStyle({
|
|
269
|
-
flexDirection: 'row-reverse',
|
|
270
|
-
flexWrap: 'wrap-reverse'
|
|
271
|
-
})
|
|
272
|
-
})
|
|
273
|
-
})
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/* eslint-disable react/no-multi-comp */
|
|
2
|
-
import React, { useState } from 'react'
|
|
3
|
-
import { Pressable, Text, View } from 'react-native'
|
|
4
|
-
import { fireEvent, render } from '@testing-library/react-native'
|
|
5
|
-
import {
|
|
6
|
-
getItemPositionLayoutHandler,
|
|
7
|
-
getItemPositionScrollTarget,
|
|
8
|
-
useItemPositions
|
|
9
|
-
} from '../../src/HorizontalScroll/itemPositions'
|
|
10
|
-
|
|
11
|
-
// ScrollViewRef.scrollTo doesn't work in Jest - unit-test the utilities instead
|
|
12
|
-
describe('HorizontalScroll', () => {
|
|
13
|
-
describe('getItemPositionScrollTarget', () => {
|
|
14
|
-
const positionsWithoutSpacing = {
|
|
15
|
-
0: { start: 0, end: 100 },
|
|
16
|
-
1: { start: 100, end: 200 },
|
|
17
|
-
2: { start: 200, end: 300 }
|
|
18
|
-
}
|
|
19
|
-
const positions = {
|
|
20
|
-
0: { start: 0, end: 50 },
|
|
21
|
-
1: { start: 100, end: 150 },
|
|
22
|
-
2: { start: 200, end: 250 }
|
|
23
|
-
}
|
|
24
|
-
it('scrolls to the start of an item rather than chopping it', () => {
|
|
25
|
-
const x = getItemPositionScrollTarget(150, 300, positionsWithoutSpacing)
|
|
26
|
-
expect(x).toBe(100)
|
|
27
|
-
})
|
|
28
|
-
it('offsets the position by a button clearance', () => {
|
|
29
|
-
const x = getItemPositionScrollTarget(150, 300, positionsWithoutSpacing, 20)
|
|
30
|
-
expect(x).toBe(80)
|
|
31
|
-
})
|
|
32
|
-
it('scrolls exactly if landing on a gap', () => {
|
|
33
|
-
const x = getItemPositionScrollTarget(170, 300, positions)
|
|
34
|
-
expect(x).toBe(170)
|
|
35
|
-
})
|
|
36
|
-
it('applies button clearance if landing on a gap', () => {
|
|
37
|
-
const x = getItemPositionScrollTarget(170, 300, positions, 40)
|
|
38
|
-
expect(x).toBe(130)
|
|
39
|
-
})
|
|
40
|
-
it('does not apply button clearance on reaching the end', () => {
|
|
41
|
-
const x = getItemPositionScrollTarget(300, 300, positions, 40)
|
|
42
|
-
expect(x).toBe(300)
|
|
43
|
-
})
|
|
44
|
-
it('does not exceed the maximum', () => {
|
|
45
|
-
const x = getItemPositionScrollTarget(320, 300, positions, 40)
|
|
46
|
-
expect(x).toBe(300)
|
|
47
|
-
})
|
|
48
|
-
it('does not go below 0', () => {
|
|
49
|
-
const x = getItemPositionScrollTarget(-420, 300, positions, 40)
|
|
50
|
-
expect(x).toBe(0)
|
|
51
|
-
})
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
// onLayout also doesn't work naturally in jest
|
|
55
|
-
describe('getItemPositionLayoutHandler', () => {
|
|
56
|
-
// Test component using useItemPositions with getItemPositionLayoutHandler
|
|
57
|
-
// that can be rerendered manually and that outputs itemPositions value
|
|
58
|
-
const MockComponent = () => {
|
|
59
|
-
const [num, setNum] = useState()
|
|
60
|
-
const [{ positions }] = useItemPositions()
|
|
61
|
-
return (
|
|
62
|
-
<View>
|
|
63
|
-
<View testID="onlayout[0]" onLayout={getItemPositionLayoutHandler(positions, 0)} />
|
|
64
|
-
<View testID="onlayout[1]" onLayout={getItemPositionLayoutHandler(positions, 1)} />
|
|
65
|
-
<Text testID="output">{JSON.stringify(positions)}</Text>
|
|
66
|
-
<Pressable testID="rerender" onPress={() => setNum(num + 1)}>
|
|
67
|
-
<Text>{num}</Text>
|
|
68
|
-
</Pressable>
|
|
69
|
-
</View>
|
|
70
|
-
)
|
|
71
|
-
}
|
|
72
|
-
it('gets width and x positions from onLayout events', async () => {
|
|
73
|
-
const { getByTestId } = render(<MockComponent />)
|
|
74
|
-
|
|
75
|
-
// onLayout doesn't work in jest but can be called directly as an event, but we
|
|
76
|
-
// have to pass the event object. Can't test that it gets them correctly from style
|
|
77
|
-
await fireEvent(getByTestId('onlayout[0]'), 'layout', {
|
|
78
|
-
nativeEvent: {
|
|
79
|
-
layout: {
|
|
80
|
-
width: 200,
|
|
81
|
-
x: 0
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
})
|
|
85
|
-
await fireEvent(getByTestId('onlayout[1]'), 'layout', {
|
|
86
|
-
nativeEvent: {
|
|
87
|
-
layout: {
|
|
88
|
-
width: 100,
|
|
89
|
-
x: 250
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
})
|
|
93
|
-
await fireEvent.press(getByTestId('rerender'))
|
|
94
|
-
expect(getByTestId('output')).toHaveTextContent(
|
|
95
|
-
'{"0":{"start":0,"end":200},"1":{"start":250,"end":350}}'
|
|
96
|
-
)
|
|
97
|
-
})
|
|
98
|
-
it('does not cause a rerender from onLayout events alone', async () => {
|
|
99
|
-
const { getByTestId } = render(<MockComponent />)
|
|
100
|
-
|
|
101
|
-
expect(getByTestId('output')).toHaveTextContent('{}')
|
|
102
|
-
await fireEvent(getByTestId('onlayout[0]'), 'layout', {
|
|
103
|
-
nativeEvent: {
|
|
104
|
-
layout: {
|
|
105
|
-
width: 200,
|
|
106
|
-
x: 0
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
await fireEvent(getByTestId('onlayout[1]'), 'layout', {
|
|
111
|
-
nativeEvent: {
|
|
112
|
-
layout: {
|
|
113
|
-
width: 100,
|
|
114
|
-
x: 250
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
})
|
|
118
|
-
expect(getByTestId('output')).toHaveTextContent('{}')
|
|
119
|
-
})
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
describe('useItemPositions', () => {
|
|
123
|
-
// Again we're limited in what we can test; we can't test natural onLayout
|
|
124
|
-
// or page load timing, but we can affirm that calling `setIsReady` after layout
|
|
125
|
-
// events causes a re-render that can access positions data
|
|
126
|
-
const IsReadyMockComponent = () => {
|
|
127
|
-
const [{ positions, setIsReady }] = useItemPositions()
|
|
128
|
-
return (
|
|
129
|
-
<View testID="container" onLayout={setIsReady}>
|
|
130
|
-
<View testID="onlayout[0]" onLayout={getItemPositionLayoutHandler(positions, 0)} />
|
|
131
|
-
<View testID="onlayout[1]" onLayout={getItemPositionLayoutHandler(positions, 1)} />
|
|
132
|
-
<Text testID="output">{JSON.stringify(positions)}</Text>
|
|
133
|
-
</View>
|
|
134
|
-
)
|
|
135
|
-
}
|
|
136
|
-
it('causes a rerender when setIsReady is called', async () => {
|
|
137
|
-
const { getByTestId } = render(<IsReadyMockComponent />)
|
|
138
|
-
|
|
139
|
-
expect(getByTestId('output')).toHaveTextContent('{}')
|
|
140
|
-
await fireEvent(getByTestId('onlayout[0]'), 'layout', {
|
|
141
|
-
nativeEvent: {
|
|
142
|
-
layout: {
|
|
143
|
-
width: 200,
|
|
144
|
-
x: 0
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
await fireEvent(getByTestId('onlayout[1]'), 'layout', {
|
|
149
|
-
nativeEvent: {
|
|
150
|
-
layout: {
|
|
151
|
-
width: 100,
|
|
152
|
-
x: 250
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
})
|
|
156
|
-
await fireEvent(getByTestId('container'), 'layout', {
|
|
157
|
-
nativeEvent: { layout: {} }
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
expect(getByTestId('output')).toHaveTextContent(
|
|
161
|
-
'{"0":{"start":0,"end":200},"1":{"start":250,"end":350}}'
|
|
162
|
-
)
|
|
163
|
-
})
|
|
164
|
-
})
|
|
165
|
-
})
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { Text } from 'react-native'
|
|
3
|
-
import { render } from '@testing-library/react-native'
|
|
4
|
-
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
import testTheme from '../../__fixtures__/testTheme'
|
|
7
|
-
import Icon from '../../src/Icon/Icon'
|
|
8
|
-
|
|
9
|
-
// We're limited in what's possible to usefully test in SVG icons in Jest
|
|
10
|
-
// but we can test that the resolution of themes and props works as expected
|
|
11
|
-
const testID = 'InnerComponent'
|
|
12
|
-
const InnerComponent = (props) => <Text testID={testID}>{JSON.stringify(props)}</Text>
|
|
13
|
-
const { tokens, rules } = testTheme.components.Icon
|
|
14
|
-
|
|
15
|
-
describe('Icon', () => {
|
|
16
|
-
it('gets default styles from theme', () => {
|
|
17
|
-
const { getByTestId } = render(
|
|
18
|
-
<Theme>
|
|
19
|
-
<Icon icon={InnerComponent} />
|
|
20
|
-
</Theme>
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
const innerContent = getByTestId(testID)
|
|
24
|
-
const expected = { ...tokens }
|
|
25
|
-
|
|
26
|
-
expect(innerContent).toHaveTextContent(JSON.stringify(expected))
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('gets styles from variant', () => {
|
|
30
|
-
const { getByTestId } = render(
|
|
31
|
-
<Theme>
|
|
32
|
-
<Icon icon={InnerComponent} variant={{ size: 'small' }} />
|
|
33
|
-
</Theme>
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
const innerContent = getByTestId(testID)
|
|
37
|
-
const expected = {
|
|
38
|
-
...tokens,
|
|
39
|
-
...rules.find((rule) => rule.if.size === 'small').tokens
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
expect(innerContent).toHaveTextContent(JSON.stringify(expected))
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
it('overrides theme styles with passed in styles via tokens prop', () => {
|
|
46
|
-
const props = { tokens: { size: 30 } }
|
|
47
|
-
const { getByTestId } = render(
|
|
48
|
-
<Theme>
|
|
49
|
-
<Icon icon={InnerComponent} {...props} />
|
|
50
|
-
</Theme>
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
const innerContent = getByTestId(testID)
|
|
54
|
-
const expected = {
|
|
55
|
-
...tokens,
|
|
56
|
-
...props.tokens
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
expect(innerContent).toHaveTextContent(JSON.stringify(expected))
|
|
60
|
-
})
|
|
61
|
-
})
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { fireEvent, render } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import { IconButton } from '../../src'
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
|
|
7
|
-
describe('IconButton', () => {
|
|
8
|
-
it('renders a link if href is passed', () => {
|
|
9
|
-
const { queryByRole } = render(<IconButton href="https://telus.com" icon={() => null} />, {
|
|
10
|
-
wrapper: Theme
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
expect(queryByRole('link')).toBeTruthy()
|
|
14
|
-
|
|
15
|
-
expect(queryByRole('button')).toBeFalsy()
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('renders a button if onPress is passed', () => {
|
|
19
|
-
const { queryByRole } = render(<IconButton onPress={() => {}} icon={() => null} />, {
|
|
20
|
-
wrapper: Theme
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
expect(queryByRole('button')).toBeTruthy()
|
|
24
|
-
|
|
25
|
-
expect(queryByRole('link')).toBeFalsy()
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
it('renders an accessible label', () => {
|
|
29
|
-
const { getByA11yLabel } = render(
|
|
30
|
-
<IconButton onPress={() => {}} icon={() => null} accessibilityLabel="test label" />,
|
|
31
|
-
{
|
|
32
|
-
wrapper: Theme
|
|
33
|
-
}
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
expect(getByA11yLabel('test label')).toBeTruthy()
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
it('calls onPress function when pressed', async () => {
|
|
40
|
-
const handlePress = jest.fn()
|
|
41
|
-
const { getByA11yLabel } = render(
|
|
42
|
-
<IconButton onPress={handlePress} icon={() => null} accessibilityLabel="test label" />,
|
|
43
|
-
{
|
|
44
|
-
wrapper: Theme
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
const iconButton = getByA11yLabel('test label')
|
|
48
|
-
expect(handlePress).toHaveBeenCalledTimes(0)
|
|
49
|
-
await fireEvent.press(iconButton)
|
|
50
|
-
expect(handlePress).toHaveBeenCalledTimes(1)
|
|
51
|
-
})
|
|
52
|
-
})
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { render } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import InputLabel from '../../src/InputLabel'
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
import tooltipDictionary from '../../src/Tooltip/dictionary'
|
|
7
|
-
|
|
8
|
-
const label = 'Test label'
|
|
9
|
-
|
|
10
|
-
const setup = (props) =>
|
|
11
|
-
render(<InputLabel label={label} {...props} />, {
|
|
12
|
-
wrapper: Theme
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
describe('InputLabel', () => {
|
|
16
|
-
it('renders correctly and matches the snapshot', () => {
|
|
17
|
-
const { container, getByText } = setup()
|
|
18
|
-
|
|
19
|
-
expect(getByText(label)).toBeTruthy()
|
|
20
|
-
expect(container.firstChild).toMatchSnapshot()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it('passes the copy prop down to the tooltip component', () => {
|
|
24
|
-
const { getByA11yLabel } = setup({ copy: 'fr', tooltip: 'Test tooltip' })
|
|
25
|
-
|
|
26
|
-
expect(getByA11yLabel(tooltipDictionary.fr.a11yText)).toBeTruthy()
|
|
27
|
-
})
|
|
28
|
-
})
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { fireEvent, render } from '@testing-library/react-native'
|
|
3
|
-
|
|
4
|
-
import InputSupports from '../../src/InputSupports'
|
|
5
|
-
import Theme from '../../__fixtures__/Theme'
|
|
6
|
-
import Viewport from '../../__fixtures__/Viewport'
|
|
7
|
-
import tooltipDictionary from '../../src/Tooltip/dictionary'
|
|
8
|
-
|
|
9
|
-
// eslint-disable-next-line react/prop-types
|
|
10
|
-
const Wrapper = ({ children }) => (
|
|
11
|
-
<Viewport viewport="xs">
|
|
12
|
-
<Theme>{children}</Theme>
|
|
13
|
-
</Viewport>
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
describe('InputSupports', () => {
|
|
17
|
-
it('renders the label', () => {
|
|
18
|
-
const { queryByText } = render(<InputSupports label="Test label content" />, {
|
|
19
|
-
wrapper: Wrapper
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
expect(queryByText('Test label content')).toBeTruthy()
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it('renders the hint', () => {
|
|
26
|
-
const { queryByText } = render(
|
|
27
|
-
<InputSupports label="Test label content" hint="Test hint content" />,
|
|
28
|
-
{ wrapper: Wrapper }
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
expect(queryByText('Test hint content')).toBeTruthy()
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
it('renders the feedback', () => {
|
|
35
|
-
const { queryByText } = render(<InputSupports feedback="Test feedback content" />, {
|
|
36
|
-
wrapper: Wrapper
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
expect(queryByText('Test feedback content')).toBeTruthy()
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('renders the tooltip which content shows up when pressed', () => {
|
|
43
|
-
const { queryByText, getByRole } = render(
|
|
44
|
-
<InputSupports label="Test label content" tooltip="Test tooltip content" />,
|
|
45
|
-
{ wrapper: Wrapper }
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
fireEvent(getByRole('button'), 'press')
|
|
49
|
-
expect(queryByText('Test tooltip content')).toBeTruthy()
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
it('passes the copy prop down to the tooltip component', () => {
|
|
53
|
-
const { getByA11yLabel } = render(
|
|
54
|
-
<InputSupports copy="fr" label="Test label content" tooltip="Test tooltip content" />,
|
|
55
|
-
{ wrapper: Wrapper }
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
expect(getByA11yLabel(tooltipDictionary.fr.a11yText)).toBeTruthy()
|
|
59
|
-
})
|
|
60
|
-
})
|