@@ -2,6 +2,10 @@ import { AccessibilityState, StyleSheet } from 'react-native';
22import { ReactTestInstance } from 'react-test-renderer' ;
33import { getHostSiblings } from './component-tree' ;
44
5+ type IsInaccessibleOptions = {
6+ cache ?: WeakMap < ReactTestInstance , boolean > ;
7+ } ;
8+
59export type AccessibilityStateKey = keyof AccessibilityState ;
610
711export const accessibilityStateKeys : AccessibilityStateKey [ ] = [
@@ -12,14 +16,24 @@ export const accessibilityStateKeys: AccessibilityStateKey[] = [
1216 'expanded' ,
1317] ;
1418
15- export function isInaccessible ( element : ReactTestInstance | null ) : boolean {
19+ export function isInaccessible (
20+ element : ReactTestInstance | null ,
21+ { cache } : IsInaccessibleOptions = { }
22+ ) : boolean {
1623 if ( element == null ) {
1724 return true ;
1825 }
1926
2027 let current : ReactTestInstance | null = element ;
2128 while ( current ) {
22- if ( isSubtreeInaccessible ( current ) ) {
29+ let isCurrentSubtreeInaccessible = cache ?. get ( current ) ;
30+
31+ if ( isCurrentSubtreeInaccessible === undefined ) {
32+ isCurrentSubtreeInaccessible = isSubtreeInaccessible ( current ) ;
33+ cache ?. set ( current , isCurrentSubtreeInaccessible ) ;
34+ }
35+
36+ if ( isCurrentSubtreeInaccessible ) {
2337 return true ;
2438 }
2539
@@ -29,7 +43,9 @@ export function isInaccessible(element: ReactTestInstance | null): boolean {
2943 return false ;
3044}
3145
32- function isSubtreeInaccessible ( element : ReactTestInstance | null ) : boolean {
46+ export function isSubtreeInaccessible (
47+ element : ReactTestInstance | null
48+ ) : boolean {
3349 if ( element == null ) {
3450 return true ;
3551 }
@@ -46,7 +62,7 @@ function isSubtreeInaccessible(element: ReactTestInstance | null): boolean {
4662 return true ;
4763 }
4864
49- // Note that `opacity: 0` is not threated as inassessible on iOS
65+ // Note that `opacity: 0` is not treated as inaccessible on iOS
5066 const flatStyle = StyleSheet . flatten ( element . props . style ) ?? { } ;
5167 if ( flatStyle . display === 'none' ) return true ;
5268
0 commit comments