From 1feb364f72142c6fd74db44f767f196fcdc119f5 Mon Sep 17 00:00:00 2001 From: Andrew Datsenko Date: Mon, 11 Aug 2025 13:59:43 -0700 Subject: [PATCH] Add accessibilityState (#53179) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53179 Changelog: [Internal] Add accessibilityState debug prop Reviewed By: zeyap Differential Revision: D79894111 fbshipit-source-id: b9914965b053c239c7f954130a32240b15070b17 --- .../Pressable/__tests__/Pressable-itest.js | 6 +++- .../Libraries/Image/__tests__/Image-itest.js | 28 +++++++++++++------ .../components/view/AccessibilityPrimitives.h | 27 +++++++++++++++++- .../components/view/AccessibilityProps.cpp | 4 +++ 4 files changed, 54 insertions(+), 11 deletions(-) diff --git a/packages/react-native/Libraries/Components/Pressable/__tests__/Pressable-itest.js b/packages/react-native/Libraries/Components/Pressable/__tests__/Pressable-itest.js index e0634d1af85..12acadf31b7 100644 --- a/packages/react-native/Libraries/Components/Pressable/__tests__/Pressable-itest.js +++ b/packages/react-native/Libraries/Components/Pressable/__tests__/Pressable-itest.js @@ -45,6 +45,7 @@ describe('', () => { expect(root.getRenderedOutput().toJSX()).toEqual( ', () => { expect(root.getRenderedOutput().toJSX()).toEqual( , ); @@ -139,7 +141,9 @@ describe('', () => { expect(element.childNodes.length).toBe(1); expect(root.getRenderedOutput().toJSX()).toEqual( - + ', () => { expect(root.getRenderedOutput().toJSX()).toEqual( , ); @@ -48,10 +49,11 @@ describe('', () => { expect(root.getRenderedOutput().toJSX()).toEqual( , ); }); @@ -94,7 +96,11 @@ describe('', () => { root.render(React Native Logo); }); - expect(root.getRenderedOutput({props: ['^access']}).toJSX()).toEqual( + expect( + root + .getRenderedOutput({props: ['accessible', 'accessibilityLabel']}) + .toJSX(), + ).toEqual( ', () => { ); }); - expect(root.getRenderedOutput({props: ['^access']}).toJSX()).toEqual( + expect( + root + .getRenderedOutput({props: ['accessible', 'accessibilityLabel']}) + .toJSX(), + ).toEqual( , ); }); @@ -605,15 +615,15 @@ describe('', () => { ); }); - expect(root.getRenderedOutput().toJSX()).toEqual( + expect( + root + .getRenderedOutput({props: ['width', 'height', 'resizeMode']}) + .toJSX(), + ).toEqual( , ); }); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h index 7a1e1679382..eb5232584ac 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h +++ b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityPrimitives.h @@ -12,6 +12,8 @@ #include #include +#include + namespace facebook::react { enum class AccessibilityTraits : uint32_t { @@ -91,7 +93,7 @@ struct AccessibilityState { bool selected{false}; bool busy{false}; std::optional expanded{std::nullopt}; - enum { Unchecked, Checked, Mixed, None } checked{None}; + enum CheckedState { Unchecked, Checked, Mixed, None } checked{None}; }; constexpr bool operator==( @@ -108,6 +110,29 @@ constexpr bool operator!=( return !(rhs == lhs); } +#if RN_DEBUG_STRING_CONVERTIBLE +inline std::string toString(AccessibilityState::CheckedState state) { + switch (state) { + case AccessibilityState::Unchecked: + return "Unchecked"; + case AccessibilityState::Checked: + return "Checked"; + case AccessibilityState::Mixed: + return "Mixed"; + case AccessibilityState::None: + return "None"; + } +} + +inline std::string toString(const AccessibilityState& accessibilityState) { + return "{disabled:" + toString(accessibilityState.disabled) + + ",selected:" + toString(accessibilityState.selected) + + ",checked:" + toString(accessibilityState.checked) + + ",busy:" + toString(accessibilityState.busy) + + ",expanded:" + toString(accessibilityState.expanded) + "}"; +} +#endif + struct AccessibilityLabelledBy { std::vector value{}; }; diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp index c3c0af47645..23915eac4db 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp @@ -320,6 +320,10 @@ SharedDebugStringConvertibleList AccessibilityProps::getDebugProps() const { "accessibilityActions", accessibilityActions, defaultProps.accessibilityActions), + debugStringConvertibleItem( + "accessibilityState", + accessibilityState, + defaultProps.accessibilityState), debugStringConvertibleItem( "accessibilityElementsHidden", accessibilityElementsHidden,