diff --git a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm index 70eec56a685b8c..c17553b1523200 100644 --- a/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +++ b/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm @@ -248,6 +248,11 @@ - (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const & #endif } + // `testId` + if (oldViewProps.testId != newViewProps.testId) { + self.accessibilityIdentifier = RCTNSStringFromString(newViewProps.testId); + } + _needsInvalidateLayer = _needsInvalidateLayer || needsInvalidateLayer; _props = std::static_pointer_cast(props); diff --git a/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp b/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp index aa4c1f47795cdd..d47d3782a6bf4e 100644 --- a/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +++ b/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp @@ -88,7 +88,7 @@ AccessibilityProps::AccessibilityProps( "importantForAccessibility", sourceProps.importantForAccessibility, ImportantForAccessibility::Auto)), - testId(convertRawProp(rawProps, "testId", sourceProps.testId, "")) {} + testId(convertRawProp(rawProps, "testID", sourceProps.testId, "")) {} #pragma mark - DebugStringConvertible diff --git a/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp b/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp index 124babc4c195a5..657169b5395ba7 100644 --- a/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +++ b/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp @@ -54,7 +54,8 @@ void ViewShadowNode::initialize() noexcept { bool formsView = isColorMeaningful(viewProps.backgroundColor) || isColorMeaningful(viewProps.foregroundColor) || - !(viewProps.yogaStyle.border() == YGStyle::Edges{}); + !(viewProps.yogaStyle.border() == YGStyle::Edges{}) || + !viewProps.testId.empty(); formsView = formsView || formsStackingContext; diff --git a/ReactCommon/react/renderer/templateprocessor/tests/UITemplateProcessorTest.cpp b/ReactCommon/react/renderer/templateprocessor/tests/UITemplateProcessorTest.cpp index 5c7220f52a44bf..add08294321f05 100644 --- a/ReactCommon/react/renderer/templateprocessor/tests/UITemplateProcessorTest.cpp +++ b/ReactCommon/react/renderer/templateprocessor/tests/UITemplateProcessorTest.cpp @@ -89,8 +89,8 @@ TEST(UITemplateProcessorTest, testSimpleBytecode) { auto nativeModuleRegistry = buildNativeModuleRegistry(); auto bytecode = R"delim({"version":0.1,"commands":[ - ["createNode",2,"RCTView",-1,{"opacity": 0.5, "testId": "root"}], - ["createNode",4,"RCTView",2,{"testId": "child"}], + ["createNode",2,"RCTView",-1,{"opacity": 0.5, "testID": "root"}], + ["createNode",4,"RCTView",2,{"testID": "child"}], ["returnRoot",2] ]})delim"; @@ -124,11 +124,11 @@ TEST(UITemplateProcessorTest, testConditionalBytecode) { auto nativeModuleRegistry = buildNativeModuleRegistry(); auto bytecode = R"delim({"version":0.1,"commands":[ - ["createNode",2,"RCTView",-1,{"testId": "root"}], + ["createNode",2,"RCTView",-1,{"testID": "root"}], ["loadNativeBool",1,"MobileConfig","getBool",["qe:simple_test"]], ["conditional",1, - [["createNode",4,"RCTView",2,{"testId": "cond_true"}]], - [["createNode",4,"RCTView",2,{"testId": "cond_false"}]] + [["createNode",4,"RCTView",2,{"testID": "cond_true"}]], + [["createNode",4,"RCTView",2,{"testID": "cond_false"}]] ], ["returnRoot",2] ]})delim";