Skip to content
This repository was archived by the owner on Jul 30, 2020. It is now read-only.

Commit e55e8ce

Browse files
author
Brandon Carroll
committed
queries mostly match DTL
1 parent 019625d commit e55e8ce

File tree

9 files changed

+152
-69
lines changed

9 files changed

+152
-69
lines changed

src/lib/__tests__/get-by-errors.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ cases(
1111
expect(() => utils[name](query)).toThrow(/multiple elements/i);
1212
},
1313
{
14-
getByA11yHint: {
14+
getByHintText: {
1515
query: /his/,
1616
tree: (
1717
<View>
@@ -93,7 +93,7 @@ cases(
9393
expect(() => utils[name](query)).toThrow(/multiple elements/i);
9494
},
9595
{
96-
queryByA11yHint: {
96+
queryByHintText: {
9797
query: /his/,
9898
tree: (
9999
<View>

src/lib/__tests__/queries.find.js

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ import { render } from '../.';
55

66
test('find asynchronously finds elements', async () => {
77
const {
8-
findAllByA11yHint,
8+
findAllByHintText,
99
findAllByLabelText,
1010
findAllByRole,
1111
findAllByPlaceholderText,
1212
findAllByTestId,
1313
findAllByText,
1414
findAllByTitle,
1515
findAllByDisplayValue,
16-
findByA11yHint,
16+
findByHintText,
1717
findByLabelText,
1818
findByRole,
1919
findByPlaceholderText,
@@ -23,6 +23,8 @@ test('find asynchronously finds elements', async () => {
2323
findByDisplayValue,
2424
} = render(
2525
<View>
26+
<View accessibilityTraits={['button']} />
27+
<View accessibilityTraits="none" />
2628
<Text testID="test-id" accessibilityRole="text">
2729
test text content
2830
</Text>
@@ -33,12 +35,11 @@ test('find asynchronously finds elements', async () => {
3335
<Image accessibilityLabel="test-label" src="/lucy-ricardo.png" />
3436
<Image accessibilityHint="test-hint" src="/lucy-ricardo.png" />
3537
<View accessibilityRole="dialog" />
36-
<View accessibilityTraits={['button']} />
3738
</View>,
3839
);
3940

40-
await expect(findByA11yHint('test-hint')).resolves.toBeTruthy();
41-
await expect(findAllByA11yHint('test-hint')).resolves.toHaveLength(1);
41+
await expect(findByHintText('test-hint')).resolves.toBeTruthy();
42+
await expect(findAllByHintText('test-hint')).resolves.toHaveLength(1);
4243

4344
await expect(findByLabelText('test-label')).resolves.toBeTruthy();
4445
await expect(findAllByLabelText('test-label')).resolves.toHaveLength(1);
@@ -50,31 +51,44 @@ test('find asynchronously finds elements', async () => {
5051
await expect(findAllByText('test text content')).resolves.toHaveLength(1);
5152

5253
await expect(findByTitle('button')).resolves.toBeTruthy();
53-
await expect(findByText('button')).resolves.toBeTruthy();
5454
await expect(findAllByTitle('button')).resolves.toHaveLength(1);
55+
56+
await expect(findByText('button')).resolves.toBeTruthy();
5557
await expect(findAllByText('button')).resolves.toBeTruthy();
5658

59+
await expect(findByDisplayValue('value')).resolves.toBeTruthy();
60+
await expect(findAllByDisplayValue('value')).resolves.toHaveLength(1);
61+
5762
await expect(findByRole('text')).resolves.toBeTruthy();
5863
await expect(findAllByRole('text')).resolves.toHaveLength(1);
5964

60-
await expect(findByDisplayValue('value')).resolves.toBeTruthy();
61-
await expect(findAllByDisplayValue('value')).resolves.toHaveLength(1);
65+
await expect(findByRole('button')).resolves.toBeTruthy();
66+
await expect(findAllByRole('button')).resolves.toHaveLength(1);
67+
68+
await expect(findByRole(['button'])).resolves.toBeTruthy();
69+
await expect(findAllByRole(['button'])).resolves.toHaveLength(1);
70+
71+
await expect(findByRole('none')).resolves.toBeTruthy();
72+
await expect(findAllByRole('none')).resolves.toHaveLength(1);
73+
74+
await expect(findByRole(['none'])).resolves.toBeTruthy();
75+
await expect(findAllByRole(['none'])).resolves.toHaveLength(1);
6276

6377
await expect(findByTestId('test-id')).resolves.toBeTruthy();
6478
await expect(findAllByTestId('test-id')).resolves.toHaveLength(1);
6579
});
6680

6781
test('find rejects when something cannot be found', async () => {
6882
const {
69-
findAllByA11yHint,
83+
findAllByHintText,
7084
findAllByLabelText,
7185
findAllByRole,
7286
findAllByPlaceholderText,
7387
findAllByTestId,
7488
findAllByText,
7589
findAllByTitle,
7690
findAllByDisplayValue,
77-
findByA11yHint,
91+
findByHintText,
7892
findByLabelText,
7993
findByRole,
8094
findByPlaceholderText,
@@ -87,8 +101,8 @@ test('find rejects when something cannot be found', async () => {
87101
const qo = {};
88102
const wo = { timeout: 10 };
89103

90-
await expect(findByA11yHint('x', qo, wo)).rejects.toThrow('x');
91-
await expect(findAllByA11yHint('x', qo, wo)).rejects.toThrow('x');
104+
await expect(findByHintText('x', qo, wo)).rejects.toThrow('x');
105+
await expect(findAllByHintText('x', qo, wo)).rejects.toThrow('x');
92106

93107
await expect(findByLabelText('x', qo, wo)).rejects.toThrow('x');
94108
await expect(findAllByLabelText('x', qo, wo)).rejects.toThrow('x');

src/lib/__tests__/text-matchers.js

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ cases(
3131
query: `link`,
3232
queryFn: `queryByTestId`,
3333
},
34-
queryByAccessibilityLabel: {
34+
queryByHintText: {
35+
tree: <Image accessibilityHint="Finding Nemo poster" src="/finding-nemo.png" />,
36+
query: `Finding Nemo poster`,
37+
queryFn: `queryByHintText`,
38+
},
39+
queryByLabelText: {
3540
tree: <Image accessibilityLabel="Finding Nemo poster" src="/finding-nemo.png" />,
3641
query: `Finding Nemo poster`,
3742
queryFn: `queryByLabelText`,
3843
},
39-
queryByAccessibilityRole: {
40-
tree: <Image accessibilityRole="image" src="/finding-nemo.png" />,
41-
query: `image`,
42-
queryFn: `queryByRole`,
43-
},
4444
queryByPlaceholderText: {
4545
tree: <TextInput placeholder="Dwayne 'The Rock' Johnson" />,
4646
query: `Dwayne 'The Rock' Johnson`,
@@ -51,6 +51,11 @@ cases(
5151
query: `Some content`,
5252
queryFn: `queryByText`,
5353
},
54+
queryByTitle: {
55+
tree: <Button title=" link " onPress={jest.fn()} />,
56+
query: `link`,
57+
queryFn: `queryByTitle`,
58+
},
5459
},
5560
);
5661

@@ -78,7 +83,18 @@ cases(
7883
query: `link`,
7984
queryFn: `queryByTestId`,
8085
},
81-
queryByAccessibilityLabel: {
86+
queryByHintText: {
87+
tree: (
88+
<Image
89+
accessibilityHint="
90+
Finding Nemo poster "
91+
src="/finding-nemo.png"
92+
/>
93+
),
94+
query: `Finding Nemo poster`,
95+
queryFn: `queryByHintText`,
96+
},
97+
queryByLabelText: {
8298
tree: (
8399
<Image
84100
accessibilityLabel="
@@ -89,11 +105,6 @@ cases(
89105
query: `Finding Nemo poster`,
90106
queryFn: `queryByLabelText`,
91107
},
92-
queryByAccessibilityRole: {
93-
tree: <Image accessibilityRole=" image" src="/finding-nemo.png" />,
94-
query: `image`,
95-
queryFn: `queryByRole`,
96-
},
97108
queryByPlaceholderText: {
98109
tree: <TextInput placeholder=" Dwayne 'The Rock' Johnson " />,
99110
query: `Dwayne 'The Rock' Johnson`,
@@ -151,7 +162,12 @@ cases(
151162
query: `Dwayne 'The Rock' Johnson`,
152163
queryFn: `queryAllByDisplayValue`,
153164
},
154-
queryAllByAccessibilityLabel: {
165+
queryAllByHintText: {
166+
tree: <Image accessibilityHint="Finding Nemo poster " src="/finding-nemo.png" />,
167+
query: `Finding Nemo poster`,
168+
queryFn: `queryAllByHintText`,
169+
},
170+
queryAllByLabelText: {
155171
tree: <Image accessibilityLabel="Finding Nemo poster " src="/finding-nemo.png" />,
156172
query: `Finding Nemo poster`,
157173
queryFn: `queryAllByLabelText`,
@@ -198,14 +214,18 @@ cases(
198214
expect(query('User name')).toHaveLength(0);
199215
},
200216
{
201-
queryAllByPlaceholderTextText: {
217+
queryAllByPlaceholderText: {
202218
tree: <TextInput placeholder={`User ${LRM}name`} />,
203219
queryFn: 'queryAllByPlaceholderText',
204220
},
205221
queryAllByText: {
206222
tree: <Text>{`User ${LRM}name`}</Text>,
207223
queryFn: 'queryAllByText',
208224
},
225+
queryAllByHintText: {
226+
tree: <Image accessibilityHint={`User ${LRM}name`} src="username.jpg" />,
227+
queryFn: 'queryAllByHintText',
228+
},
209229
queryAllByLabelText: {
210230
tree: <Image accessibilityLabel={`User ${LRM}name`} src="username.jpg" />,
211231
queryFn: 'queryAllByLabelText',
@@ -214,10 +234,6 @@ cases(
214234
tree: <TextInput value={`User ${LRM}name`} />,
215235
queryFn: 'queryAllByDisplayValue',
216236
},
217-
queryAllByRole: {
218-
tree: <Image accessibilityRole={`User ${LRM}name`} />,
219-
queryFn: 'queryAllByRole',
220-
},
221237
},
222238
);
223239

src/lib/index.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@ function render(ui, { options = {}, wrapper: WrapperComponent } = {}) {
1818
container = TR.create(wrapUiIfNeeded(ui), options);
1919
});
2020

21-
const baseElement = queryHelpers.proxyUnsafeProperties(container.root);
22-
2321
return {
2422
container,
25-
baseElement,
23+
baseElement: queryHelpers.proxyUnsafeProperties(container.root),
2624
debug: () => console.log(prettyPrint(container.toJSON())),
2725
unmount: () => container.unmount(),
2826
rerender: rerenderUi => {

src/lib/queries/a11y-hint.js

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/lib/queries/hint-text.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { queryAllByProp, buildQueries } from './all-utils';
2+
3+
const queryAllByHintText = queryAllByProp.bind(null, 'accessibilityHint');
4+
5+
const getMultipleError = (c, hint) =>
6+
`Found multiple elements with the accessibilityHint of: ${hint}`;
7+
const getMissingError = (c, hint) =>
8+
`Unable to find an element with the accessibilityHint of: ${hint}`;
9+
10+
const [
11+
queryByHintText,
12+
getAllByHintText,
13+
getByHintText,
14+
findAllByHintText,
15+
findByHintText,
16+
] = buildQueries(queryAllByHintText, getMultipleError, getMissingError);
17+
18+
export {
19+
queryByHintText,
20+
queryAllByHintText,
21+
getByHintText,
22+
getAllByHintText,
23+
findAllByHintText,
24+
findByHintText,
25+
};

src/lib/queries/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
export * from './a11y-hint';
21
export * from './display-value';
2+
export * from './hint-text';
33
export * from './label-text';
44
export * from './placeholder-text';
55
export * from './role';

src/lib/queries/role.js

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,61 @@
1-
import { queryAllByProp, buildQueries } from './all-utils';
1+
import { buildQueries, getBaseElement } from './all-utils';
22

3-
const queryAllByRole = queryAllByProp.bind(null, 'accessibilityRole');
3+
const validRoles = [
4+
'adjustable',
5+
'button',
6+
'header',
7+
'image',
8+
'imagebutton',
9+
'keyboardKey',
10+
'link',
11+
'none',
12+
'search',
13+
'summary',
14+
'text',
15+
];
16+
17+
const validTraits = [
18+
'adjustable',
19+
'allowsDirectInteraction',
20+
'button',
21+
'disabled',
22+
'frequentUpdates',
23+
'header',
24+
'image',
25+
'key',
26+
'link',
27+
'none',
28+
'pageTurn',
29+
'plays',
30+
'search',
31+
'selected',
32+
'startsMedia',
33+
'summary',
34+
'text',
35+
];
36+
37+
function queryAllByRole(container, value, { filter = n => n } = {}) {
38+
const baseElement = getBaseElement(container);
39+
40+
const roleElements = baseElement.findAll(c => c.props.accessibilityRole);
41+
const traitElements = baseElement.findAll(c => c.props.accessibilityTraits);
42+
43+
return [...roleElements, ...traitElements].filter(filter).filter(node => {
44+
const role = node.getProp('accessibilityRole');
45+
const traits = node.getProp('accessibilityTraits');
46+
47+
if (role === value && validRoles.includes(value)) {
48+
return true;
49+
} else if (traits) {
50+
const arrayTraits = Array.isArray(traits) ? traits : [traits];
51+
const arrayValue = Array.isArray(value) ? value : [value];
52+
53+
return arrayTraits.every(i => arrayValue.indexOf(i) > -1 && validTraits.includes(i));
54+
}
55+
56+
return false;
57+
});
58+
}
459

560
const getMultipleError = (c, role) =>
661
`Found multiple elements with the accessibilityRole of: ${role}`;

0 commit comments

Comments
 (0)