From 68e7201be8791a3a9e631e4fb747b476ddbdba78 Mon Sep 17 00:00:00 2001 From: Renato Alegre Date: Thu, 24 Jul 2025 07:51:49 -0500 Subject: [PATCH 1/3] fix: toBeDisabled now also evaluates disabled prop when element is Text --- src/helpers/__tests__/accessiblity.test.tsx | 74 +++++++++++++++++++-- src/helpers/accessibility.ts | 5 ++ 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/helpers/__tests__/accessiblity.test.tsx b/src/helpers/__tests__/accessiblity.test.tsx index 6fda22d4..f3eaa861 100644 --- a/src/helpers/__tests__/accessiblity.test.tsx +++ b/src/helpers/__tests__/accessiblity.test.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Pressable, Switch, Text, TextInput, TouchableOpacity, View } from 'react-native'; import { isHiddenFromAccessibility, isInaccessible, render, screen } from '../..'; -import { computeAriaLabel, isAccessibilityElement } from '../accessibility'; +import { computeAriaDisabled, computeAriaLabel, isAccessibilityElement } from '../accessibility'; describe('isHiddenFromAccessibility', () => { test('returns false for accessible elements', () => { @@ -278,11 +278,11 @@ describe('isHiddenFromAccessibility', () => { test('has isInaccessible alias', () => { expect(isInaccessible).toBe(isHiddenFromAccessibility); }); -}); -test('is not triggered for element with "aria-modal" prop', () => { - render(); - expect(isHiddenFromAccessibility(screen.getByTestId('subject'))).toBe(false); + test('is not triggered for element with "aria-modal" prop', () => { + render(); + expect(isHiddenFromAccessibility(screen.getByTestId('subject'))).toBe(false); + }); }); describe('isAccessibilityElement', () => { @@ -408,3 +408,67 @@ describe('computeAriaLabel', () => { expect(computeAriaLabel(screen.getByTestId('subject'))).toEqual('External Label'); }); }); + +describe('computeAriaDisabled', () => { + test('supports basic usage', () => { + render( + + + + + + , + ); + + expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); + expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('disabled-by-state'))).toBe(true); + expect(computeAriaDisabled(screen.getByTestId('not-disabled-by-state'))).toBe(false); + }); + + test('supports TextInput', () => { + render( + + + + , + ); + + expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); + expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + }); + + test('supports Button', () => { + render( + + + Disabled Button + + + Enabled Button + + , + ); + + expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); + expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + }); + + test('supports Text', () => { + render( + + + Disabled Text + + + Disabled Text + + Enabled Text + , + ); + + expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); + expect(computeAriaDisabled(screen.getByTestId('aria-disabled'))).toBe(true); + expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + }); +}); diff --git a/src/helpers/accessibility.ts b/src/helpers/accessibility.ts index 3f38cd0c..a5c9bd9c 100644 --- a/src/helpers/accessibility.ts +++ b/src/helpers/accessibility.ts @@ -209,6 +209,11 @@ export function computeAriaDisabled(element: ReactTestInstance): boolean { } const { props } = element; + + if (isHostText(element) && props.disabled) { + return true; + } + return props['aria-disabled'] ?? props.accessibilityState?.disabled ?? false; } From 4768209d5f7a24e7bc508ffdbd8d967f8b6b6eb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Wed, 30 Jul 2025 15:24:54 +0200 Subject: [PATCH 2/3] tweaks --- src/helpers/__tests__/accessiblity.test.tsx | 46 ++++++++++++--------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/helpers/__tests__/accessiblity.test.tsx b/src/helpers/__tests__/accessiblity.test.tsx index f3eaa861..77deb9b1 100644 --- a/src/helpers/__tests__/accessiblity.test.tsx +++ b/src/helpers/__tests__/accessiblity.test.tsx @@ -413,62 +413,70 @@ describe('computeAriaDisabled', () => { test('supports basic usage', () => { render( + - + - + , ); + expect(computeAriaDisabled(screen.getByTestId('default'))).toBe(false); expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); - expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('disabled-false'))).toBe(false); expect(computeAriaDisabled(screen.getByTestId('disabled-by-state'))).toBe(true); - expect(computeAriaDisabled(screen.getByTestId('not-disabled-by-state'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('disabled-false-by-state'))).toBe(false); }); test('supports TextInput', () => { render( - - + + + , ); - expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); - expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('default'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('editable'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('editable-false'))).toBe(true); }); test('supports Button', () => { render( - + + Default Button + + Disabled Button - - Enabled Button + + Disabled False Button , ); + expect(computeAriaDisabled(screen.getByTestId('default'))).toBe(false); expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); - expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + expect(computeAriaDisabled(screen.getByTestId('disabled-false'))).toBe(false); }); test('supports Text', () => { render( - + Default Text + Disabled Text - - Disabled Text + + ARIA Disabled Text - Enabled Text , ); - expect(computeAriaDisabled(screen.getByTestId('disabled'))).toBe(true); - expect(computeAriaDisabled(screen.getByTestId('aria-disabled'))).toBe(true); - expect(computeAriaDisabled(screen.getByTestId('not-disabled'))).toBe(false); + expect(computeAriaDisabled(screen.getByText('Default Text'))).toBe(false); + expect(computeAriaDisabled(screen.getByText('Disabled Text'))).toBe(true); + expect(computeAriaDisabled(screen.getByText('ARIA Disabled Text'))).toBe(true); }); }); From d1682141922f0e21870fc893f6b49d63a1d32a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Jastrze=CC=A8bski?= Date: Wed, 30 Jul 2025 15:33:08 +0200 Subject: [PATCH 3/3] . --- src/helpers/__tests__/accessiblity.test.tsx | 12 ++++-------- src/helpers/accessibility.ts | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/helpers/__tests__/accessiblity.test.tsx b/src/helpers/__tests__/accessiblity.test.tsx index 77deb9b1..dd277c59 100644 --- a/src/helpers/__tests__/accessiblity.test.tsx +++ b/src/helpers/__tests__/accessiblity.test.tsx @@ -433,7 +433,7 @@ describe('computeAriaDisabled', () => { - + , ); @@ -448,7 +448,7 @@ describe('computeAriaDisabled', () => { Default Button - + Disabled Button @@ -466,12 +466,8 @@ describe('computeAriaDisabled', () => { render( Default Text - - Disabled Text - - - ARIA Disabled Text - + Disabled Text + ARIA Disabled Text , ); diff --git a/src/helpers/accessibility.ts b/src/helpers/accessibility.ts index a5c9bd9c..95ab9166 100644 --- a/src/helpers/accessibility.ts +++ b/src/helpers/accessibility.ts @@ -213,7 +213,7 @@ export function computeAriaDisabled(element: ReactTestInstance): boolean { if (isHostText(element) && props.disabled) { return true; } - + return props['aria-disabled'] ?? props.accessibilityState?.disabled ?? false; }