Skip to content

Commit eb2e087

Browse files
fix: duplicate AccessibilityState type (cherry-pick of #1355) (#1361)
1 parent 0bd11a4 commit eb2e087

File tree

3 files changed

+54
-23
lines changed

3 files changed

+54
-23
lines changed

src/helpers/matchers/accessibilityState.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@ import { AccessibilityState } from 'react-native';
22
import { ReactTestInstance } from 'react-test-renderer';
33
import { accessibilityStateKeys } from '../accessiblity';
44

5+
// This type is the same as AccessibilityState from `react-native` package
6+
// It is re-declared here due to issues with migration from `@types/react-native` to
7+
// built in `react-native` types.
8+
// See: https://github.com/callstack/react-native-testing-library/issues/1351
9+
export interface AccessibilityStateMatcher {
10+
disabled?: boolean;
11+
selected?: boolean;
12+
checked?: boolean | 'mixed';
13+
busy?: boolean;
14+
expanded?: boolean;
15+
}
16+
517
/**
618
* Default accessibility state values based on experiments using accessibility
719
* inspector/screen reader on iOS and Android.
@@ -18,15 +30,15 @@ const defaultState: AccessibilityState = {
1830

1931
export function matchAccessibilityState(
2032
node: ReactTestInstance,
21-
matcher: AccessibilityState
33+
matcher: AccessibilityStateMatcher
2234
) {
2335
const state = node.props.accessibilityState;
2436
return accessibilityStateKeys.every((key) => matchState(state, matcher, key));
2537
}
2638

2739
function matchState(
2840
state: AccessibilityState,
29-
matcher: AccessibilityState,
41+
matcher: AccessibilityStateMatcher,
3042
key: keyof AccessibilityState
3143
) {
3244
return (

src/queries/a11yState.ts

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import type { ReactTestInstance } from 'react-test-renderer';
2-
import { AccessibilityState } from 'react-native';
32
import { accessibilityStateKeys } from '../helpers/accessiblity';
43
import { deprecateQueries } from '../helpers/deprecation';
54
import { findAll } from '../helpers/findAll';
6-
import { matchAccessibilityState } from '../helpers/matchers/accessibilityState';
5+
import {
6+
AccessibilityStateMatcher,
7+
matchAccessibilityState,
8+
} from '../helpers/matchers/accessibilityState';
79
import { makeQueries } from './makeQueries';
810
import type {
911
FindAllByQuery,
@@ -18,7 +20,7 @@ import { CommonQueryOptions } from './options';
1820
const queryAllByA11yState = (
1921
instance: ReactTestInstance
2022
): ((
21-
matcher: AccessibilityState,
23+
matcher: AccessibilityStateMatcher,
2224
queryOptions?: CommonQueryOptions
2325
) => Array<ReactTestInstance>) =>
2426
function queryAllByA11yStateFn(matcher, queryOptions) {
@@ -30,7 +32,7 @@ const queryAllByA11yState = (
3032
);
3133
};
3234

33-
const buildErrorMessage = (state: AccessibilityState = {}) => {
35+
const buildErrorMessage = (state: AccessibilityStateMatcher = {}) => {
3436
const errors: string[] = [];
3537

3638
accessibilityStateKeys.forEach((stateKey) => {
@@ -42,10 +44,10 @@ const buildErrorMessage = (state: AccessibilityState = {}) => {
4244
return errors.join(', ');
4345
};
4446

45-
const getMultipleError = (state: AccessibilityState) =>
47+
const getMultipleError = (state: AccessibilityStateMatcher) =>
4648
`Found multiple elements with ${buildErrorMessage(state)}`;
4749

48-
const getMissingError = (state: AccessibilityState) =>
50+
const getMissingError = (state: AccessibilityStateMatcher) =>
4951
`Unable to find an element with ${buildErrorMessage(state)}`;
5052

5153
const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
@@ -55,29 +57,44 @@ const { getBy, getAllBy, queryBy, queryAllBy, findBy, findAllBy } = makeQueries(
5557
);
5658

5759
export type ByA11yStateQueries = {
58-
getByA11yState: GetByQuery<AccessibilityState, CommonQueryOptions>;
59-
getAllByA11yState: GetAllByQuery<AccessibilityState, CommonQueryOptions>;
60-
queryByA11yState: QueryByQuery<AccessibilityState, CommonQueryOptions>;
61-
queryAllByA11yState: QueryAllByQuery<AccessibilityState, CommonQueryOptions>;
62-
findByA11yState: FindByQuery<AccessibilityState, CommonQueryOptions>;
63-
findAllByA11yState: FindAllByQuery<AccessibilityState, CommonQueryOptions>;
60+
getByA11yState: GetByQuery<AccessibilityStateMatcher, CommonQueryOptions>;
61+
getAllByA11yState: GetAllByQuery<
62+
AccessibilityStateMatcher,
63+
CommonQueryOptions
64+
>;
65+
queryByA11yState: QueryByQuery<AccessibilityStateMatcher, CommonQueryOptions>;
66+
queryAllByA11yState: QueryAllByQuery<
67+
AccessibilityStateMatcher,
68+
CommonQueryOptions
69+
>;
70+
findByA11yState: FindByQuery<AccessibilityStateMatcher, CommonQueryOptions>;
71+
findAllByA11yState: FindAllByQuery<
72+
AccessibilityStateMatcher,
73+
CommonQueryOptions
74+
>;
6475

65-
getByAccessibilityState: GetByQuery<AccessibilityState, CommonQueryOptions>;
76+
getByAccessibilityState: GetByQuery<
77+
AccessibilityStateMatcher,
78+
CommonQueryOptions
79+
>;
6680
getAllByAccessibilityState: GetAllByQuery<
67-
AccessibilityState,
81+
AccessibilityStateMatcher,
6882
CommonQueryOptions
6983
>;
7084
queryByAccessibilityState: QueryByQuery<
71-
AccessibilityState,
85+
AccessibilityStateMatcher,
7286
CommonQueryOptions
7387
>;
7488
queryAllByAccessibilityState: QueryAllByQuery<
75-
AccessibilityState,
89+
AccessibilityStateMatcher,
90+
CommonQueryOptions
91+
>;
92+
findByAccessibilityState: FindByQuery<
93+
AccessibilityStateMatcher,
7694
CommonQueryOptions
7795
>;
78-
findByAccessibilityState: FindByQuery<AccessibilityState, CommonQueryOptions>;
7996
findAllByAccessibilityState: FindAllByQuery<
80-
AccessibilityState,
97+
AccessibilityStateMatcher,
8198
CommonQueryOptions
8299
>;
83100
};

src/queries/role.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
import type { AccessibilityState } from 'react-native';
21
import type { ReactTestInstance } from 'react-test-renderer';
32
import {
43
accessibilityStateKeys,
54
accessiblityValueKeys,
65
isAccessibilityElement,
76
} from '../helpers/accessiblity';
87
import { findAll } from '../helpers/findAll';
9-
import { matchAccessibilityState } from '../helpers/matchers/accessibilityState';
8+
import {
9+
AccessibilityStateMatcher,
10+
matchAccessibilityState,
11+
} from '../helpers/matchers/accessibilityState';
1012
import {
1113
AccessibilityValueMatcher,
1214
matchAccessibilityValue,
@@ -27,7 +29,7 @@ import type {
2729
import { CommonQueryOptions } from './options';
2830

2931
type ByRoleOptions = CommonQueryOptions &
30-
AccessibilityState & {
32+
AccessibilityStateMatcher & {
3133
name?: TextMatch;
3234
value?: AccessibilityValueMatcher;
3335
};

0 commit comments

Comments
 (0)