Skip to content

Commit f670786

Browse files
committed
refactor: add deprecation messages to *ByA11yState and *ByA11yValue
1 parent 527ea62 commit f670786

File tree

5 files changed

+237
-24
lines changed

5 files changed

+237
-24
lines changed

src/helpers/deprecation.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
export function deprecateAllQueries<Queries extends Record<string, any>>(
2+
queriesObject: Queries,
3+
querySuffix: string,
4+
recommendationSuffix: string
5+
): Queries {
6+
const result = {} as Queries;
7+
Object.keys(queriesObject).forEach((queryName) => {
8+
const queryFn = queriesObject[queryName];
9+
const recommendation = queryName.replace(querySuffix, recommendationSuffix);
10+
// @ts-expect-error: generic typing is hard
11+
result[queryName] = deprecateQuery(queryFn, queryName, recommendation);
12+
});
13+
14+
return result;
15+
}
16+
17+
export function deprecateQuery<QueryFn extends (...args: any) => any>(
18+
queryFn: QueryFn,
19+
queryName: string,
20+
recommendation: string
21+
): QueryFn {
22+
// @ts-expect-error: generic typing is hard
23+
const wrapper: QueryFn = (...args: any) => {
24+
// eslint-disable-next-line no-console
25+
console.warn(
26+
`${queryName}(...) is deprecated. Please use ${recommendation} instead.`
27+
);
28+
29+
return queryFn(...args);
30+
};
31+
32+
return wrapper;
33+
}

src/queries/__tests__/a11yState.test.tsx

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
/* eslint-disable no-console */
12
import * as React from 'react';
23
import { View, Text, Pressable, TouchableOpacity } from 'react-native';
34
import { render } from '../..';
45

6+
type ConsoleLogMock = jest.Mock<typeof console.log>;
7+
8+
beforeEach(() => {
9+
jest.spyOn(console, 'warn').mockImplementation(() => {});
10+
});
11+
512
const TEXT_LABEL = 'cool text';
613

714
const Typography = ({ children, ...rest }: any) => {
@@ -251,3 +258,73 @@ test('byA11yState queries support hidden option', () => {
251258
`"Unable to find an element with expanded state: false"`
252259
);
253260
});
261+
262+
test('*ByA11yState deprecation warnings', () => {
263+
const mockCalls = (console.warn as ConsoleLogMock).mock.calls;
264+
const view = render(<View accessibilityState={{ disabled: true }} />);
265+
266+
view.getByA11yState({ disabled: true });
267+
expect(mockCalls[0][0]).toMatchInlineSnapshot(
268+
`"getByA11yState(...) is deprecated. Please use getByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
269+
);
270+
271+
view.getAllByA11yState({ disabled: true });
272+
expect(mockCalls[1][0]).toMatchInlineSnapshot(
273+
`"getAllByA11yState(...) is deprecated. Please use getAllByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
274+
);
275+
276+
view.queryByA11yState({ disabled: true });
277+
expect(mockCalls[2][0]).toMatchInlineSnapshot(
278+
`"queryByA11yState(...) is deprecated. Please use queryByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
279+
);
280+
281+
view.queryAllByA11yState({ disabled: true });
282+
expect(mockCalls[3][0]).toMatchInlineSnapshot(
283+
`"queryAllByA11yState(...) is deprecated. Please use queryAllByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
284+
);
285+
286+
view.findByA11yState({ disabled: true });
287+
expect(mockCalls[4][0]).toMatchInlineSnapshot(
288+
`"findByA11yState(...) is deprecated. Please use findByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
289+
);
290+
291+
view.findAllByA11yState({ disabled: true });
292+
expect(mockCalls[5][0]).toMatchInlineSnapshot(
293+
`"findAllByA11yState(...) is deprecated. Please use findAllByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
294+
);
295+
});
296+
297+
test('*ByAccessibilityState deprecation warnings', () => {
298+
const mockCalls = (console.warn as ConsoleLogMock).mock.calls;
299+
const view = render(<View accessibilityState={{ disabled: true }} />);
300+
301+
view.getByAccessibilityState({ disabled: true });
302+
expect(mockCalls[0][0]).toMatchInlineSnapshot(
303+
`"getByAccessibilityState(...) is deprecated. Please use getByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
304+
);
305+
306+
view.getAllByAccessibilityState({ disabled: true });
307+
expect(mockCalls[1][0]).toMatchInlineSnapshot(
308+
`"getAllByAccessibilityState(...) is deprecated. Please use getAllByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
309+
);
310+
311+
view.queryByAccessibilityState({ disabled: true });
312+
expect(mockCalls[2][0]).toMatchInlineSnapshot(
313+
`"queryByAccessibilityState(...) is deprecated. Please use queryByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
314+
);
315+
316+
view.queryAllByAccessibilityState({ disabled: true });
317+
expect(mockCalls[3][0]).toMatchInlineSnapshot(
318+
`"queryAllByAccessibilityState(...) is deprecated. Please use queryAllByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
319+
);
320+
321+
view.findByAccessibilityState({ disabled: true });
322+
expect(mockCalls[4][0]).toMatchInlineSnapshot(
323+
`"findByAccessibilityState(...) is deprecated. Please use findByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
324+
);
325+
326+
view.findAllByAccessibilityState({ disabled: true });
327+
expect(mockCalls[5][0]).toMatchInlineSnapshot(
328+
`"findAllByAccessibilityState(...) is deprecated. Please use findAllByRole(role, { disabled, selected, checked, busy, expanded }) instead."`
329+
);
330+
});

src/queries/__tests__/a11yValue.test.tsx

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
/* eslint-disable no-console */
12
import * as React from 'react';
23
import { View, Text, TouchableOpacity } from 'react-native';
34
import { render } from '../..';
45

6+
type ConsoleLogMock = jest.Mock<typeof console.log>;
7+
8+
beforeEach(() => {
9+
jest.spyOn(console, 'warn').mockImplementation(() => {});
10+
});
11+
512
const TEXT_LABEL = 'cool text';
613

714
const Typography = ({ children, ...rest }: any) => {
@@ -130,3 +137,73 @@ test('byA11yValue error messages', () => {
130137
`"Unable to find an element with min value: 1, max value: 2, now value: 3, text value: /foo/i"`
131138
);
132139
});
140+
141+
test('*ByA11yValue deprecation warnings', () => {
142+
const mockCalls = (console.warn as ConsoleLogMock).mock.calls;
143+
const view = render(<View accessibilityValue={{ min: 10 }} />);
144+
145+
view.getByA11yValue({ min: 10 });
146+
expect(mockCalls[0][0]).toMatchInlineSnapshot(
147+
`"getByA11yValue(...) is deprecated. Please use getByRole(role, { value: ... }) instead."`
148+
);
149+
150+
view.getAllByA11yValue({ min: 10 });
151+
expect(mockCalls[1][0]).toMatchInlineSnapshot(
152+
`"getAllByA11yValue(...) is deprecated. Please use getAllByRole(role, { value: ... }) instead."`
153+
);
154+
155+
view.queryByA11yValue({ min: 10 });
156+
expect(mockCalls[2][0]).toMatchInlineSnapshot(
157+
`"queryByA11yValue(...) is deprecated. Please use queryByRole(role, { value: ... }) instead."`
158+
);
159+
160+
view.queryAllByA11yValue({ min: 10 });
161+
expect(mockCalls[3][0]).toMatchInlineSnapshot(
162+
`"queryAllByA11yValue(...) is deprecated. Please use queryAllByRole(role, { value: ... }) instead."`
163+
);
164+
165+
view.findByA11yValue({ min: 10 });
166+
expect(mockCalls[4][0]).toMatchInlineSnapshot(
167+
`"findByA11yValue(...) is deprecated. Please use findByRole(role, { value: ... }) instead."`
168+
);
169+
170+
view.findAllByA11yValue({ min: 10 });
171+
expect(mockCalls[5][0]).toMatchInlineSnapshot(
172+
`"findAllByA11yValue(...) is deprecated. Please use findAllByRole(role, { value: ... }) instead."`
173+
);
174+
});
175+
176+
test('*ByAccessibilityValue deprecation warnings', () => {
177+
const mockCalls = (console.warn as ConsoleLogMock).mock.calls;
178+
const view = render(<View accessibilityValue={{ min: 10 }} />);
179+
180+
view.getByAccessibilityValue({ min: 10 });
181+
expect(mockCalls[0][0]).toMatchInlineSnapshot(
182+
`"getByAccessibilityValue(...) is deprecated. Please use getByRole(role, { value: ... }) instead."`
183+
);
184+
185+
view.getAllByAccessibilityValue({ min: 10 });
186+
expect(mockCalls[1][0]).toMatchInlineSnapshot(
187+
`"getAllByAccessibilityValue(...) is deprecated. Please use getAllByRole(role, { value: ... }) instead."`
188+
);
189+
190+
view.queryByAccessibilityValue({ min: 10 });
191+
expect(mockCalls[2][0]).toMatchInlineSnapshot(
192+
`"queryByAccessibilityValue(...) is deprecated. Please use queryByRole(role, { value: ... }) instead."`
193+
);
194+
195+
view.queryAllByAccessibilityValue({ min: 10 });
196+
expect(mockCalls[3][0]).toMatchInlineSnapshot(
197+
`"queryAllByAccessibilityValue(...) is deprecated. Please use queryAllByRole(role, { value: ... }) instead."`
198+
);
199+
200+
view.findByAccessibilityValue({ min: 10 });
201+
expect(mockCalls[4][0]).toMatchInlineSnapshot(
202+
`"findByAccessibilityValue(...) is deprecated. Please use findByRole(role, { value: ... }) instead."`
203+
);
204+
205+
view.findAllByAccessibilityValue({ min: 10 });
206+
expect(mockCalls[5][0]).toMatchInlineSnapshot(
207+
`"findAllByAccessibilityValue(...) is deprecated. Please use findAllByRole(role, { value: ... }) instead."`
208+
);
209+
});

src/queries/a11yState.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ReactTestInstance } from 'react-test-renderer';
22
import { AccessibilityState } from 'react-native';
33
import { accessibilityStateKeys } from '../helpers/accessiblity';
4+
import { deprecateAllQueries } from '../helpers/deprecation';
45
import { findAll } from '../helpers/findAll';
56
import { matchAccessibilityState } from '../helpers/matchers/accessibilityState';
67
import { makeQueries } from './makeQueries';
@@ -92,18 +93,30 @@ export const bindByA11yStateQueries = (
9293
const findAllByA11yState = findAllBy(instance);
9394

9495
return {
95-
getByA11yState,
96-
getAllByA11yState,
97-
queryByA11yState,
98-
queryAllByA11yState,
99-
findByA11yState,
100-
findAllByA11yState,
96+
...deprecateAllQueries(
97+
{
98+
getByA11yState,
99+
getAllByA11yState,
100+
queryByA11yState,
101+
queryAllByA11yState,
102+
findByA11yState,
103+
findAllByA11yState,
104+
},
105+
'A11yState',
106+
'Role(role, { disabled, selected, checked, busy, expanded })'
107+
),
101108

102-
getByAccessibilityState: getByA11yState,
103-
getAllByAccessibilityState: getAllByA11yState,
104-
queryByAccessibilityState: queryByA11yState,
105-
queryAllByAccessibilityState: queryAllByA11yState,
106-
findByAccessibilityState: findByA11yState,
107-
findAllByAccessibilityState: findAllByA11yState,
109+
...deprecateAllQueries(
110+
{
111+
getByAccessibilityState: getByA11yState,
112+
getAllByAccessibilityState: getAllByA11yState,
113+
queryByAccessibilityState: queryByA11yState,
114+
queryAllByAccessibilityState: queryAllByA11yState,
115+
findByAccessibilityState: findByA11yState,
116+
findAllByAccessibilityState: findAllByA11yState,
117+
},
118+
'AccessibilityState',
119+
'Role(role, { disabled, selected, checked, busy, expanded })'
120+
),
108121
};
109122
};

src/queries/a11yValue.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ReactTestInstance } from 'react-test-renderer';
22
import { accessiblityValueKeys } from '../helpers/accessiblity';
3+
import { deprecateAllQueries } from '../helpers/deprecation';
34
import { findAll } from '../helpers/findAll';
45
import {
56
AccessibilityValueMatcher,
@@ -109,18 +110,30 @@ export const bindByA11yValueQueries = (
109110
const findAllByA11yValue = findAllBy(instance);
110111

111112
return {
112-
getByA11yValue,
113-
getAllByA11yValue,
114-
queryByA11yValue,
115-
queryAllByA11yValue,
116-
findByA11yValue,
117-
findAllByA11yValue,
113+
...deprecateAllQueries(
114+
{
115+
getByA11yValue,
116+
getAllByA11yValue,
117+
queryByA11yValue,
118+
queryAllByA11yValue,
119+
findByA11yValue,
120+
findAllByA11yValue,
121+
},
122+
'A11yValue',
123+
'Role(role, { value: ... })'
124+
),
118125

119-
getByAccessibilityValue: getByA11yValue,
120-
getAllByAccessibilityValue: getAllByA11yValue,
121-
queryByAccessibilityValue: queryByA11yValue,
122-
queryAllByAccessibilityValue: queryAllByA11yValue,
123-
findByAccessibilityValue: findByA11yValue,
124-
findAllByAccessibilityValue: findAllByA11yValue,
126+
...deprecateAllQueries(
127+
{
128+
getByAccessibilityValue: getByA11yValue,
129+
getAllByAccessibilityValue: getAllByA11yValue,
130+
queryByAccessibilityValue: queryByA11yValue,
131+
queryAllByAccessibilityValue: queryAllByA11yValue,
132+
findByAccessibilityValue: findByA11yValue,
133+
findAllByAccessibilityValue: findAllByA11yValue,
134+
},
135+
'AccessibilityValue',
136+
'Role(role, { value: ... })'
137+
),
125138
};
126139
};

0 commit comments

Comments
 (0)