diff --git a/change/@react-native-windows-automation-channel-e3e061a4-0e5e-4c70-9158-8b61d0eebe2a.json b/change/@react-native-windows-automation-channel-e3e061a4-0e5e-4c70-9158-8b61d0eebe2a.json new file mode 100644 index 00000000000..3cb7684cf91 --- /dev/null +++ b/change/@react-native-windows-automation-channel-e3e061a4-0e5e-4c70-9158-8b61d0eebe2a.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Add Tests", + "packageName": "@react-native-windows/automation-channel", + "email": "34109996+chiaramooney@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-2f3ac2ef-b7c1-4ca2-b10d-ec0d29508646.json b/change/react-native-windows-2f3ac2ef-b7c1-4ca2-b10d-ec0d29508646.json new file mode 100644 index 00000000000..f9f5099429c --- /dev/null +++ b/change/react-native-windows-2f3ac2ef-b7c1-4ca2-b10d-ec0d29508646.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Add Tests", + "packageName": "react-native-windows", + "email": "34109996+chiaramooney@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json b/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json index 79233b0d618..5434d1bc638 100644 --- a/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json +++ b/packages/@react-native-windows/automation-channel/windows/AutomationChannel/packages.lock.json @@ -2,21 +2,21 @@ "version": 1, "dependencies": { "native,Version=v0.0": { - "Microsoft.UI.Xaml": { - "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "vxdHxTr63s5KVtNddMFpgvjBjUH50z7seq/5jLWmmSuf8poxg+sXrywkofUdE8ZstbpO9y3FL/IXXUcPYbeesA==", - "dependencies": { - "Microsoft.Web.WebView2": "1.0.1264.42" - } - }, "Microsoft.Windows.CppWinRT": { "type": "Direct", "requested": "[2.0.230706.1, )", "resolved": "2.0.230706.1", "contentHash": "l0D7oCw/5X+xIKHqZTi62TtV+1qeSz7KVluNFdrJ9hXsst4ghvqQ/Yhura7JqRdZWBXAuDS0G0KwALptdoxweQ==" }, + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } + }, "boost": { "type": "Transitive", "resolved": "1.83.0", @@ -46,10 +46,10 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, - "Microsoft.Web.WebView2": { + "Microsoft.Windows.SDK.BuildTools": { "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "resolved": "10.0.22621.756", + "contentHash": "7ZL2sFSioYm1Ry067Kw1hg0SCcW5kuVezC2SwjGbcPE61Nn+gTbH86T73G3LcEOVj0S3IZzNuE/29gZvOLS7VA==" }, "common": { "type": "Project", @@ -74,7 +74,7 @@ "Folly": "[1.0.0, )", "Microsoft.JavaScript.Hermes": "[0.1.23, )", "Microsoft.SourceLink.GitHub": "[1.1.1, )", - "Microsoft.UI.Xaml": "[2.8.0, )", + "Microsoft.WindowsAppSDK": "[1.5.240227000, )", "ReactCommon": "[1.0.0, )", "boost": "[1.83.0, )" } @@ -88,52 +88,80 @@ } }, "native,Version=v0.0/win10-arm": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } }, "native,Version=v0.0/win10-arm-aot": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } }, "native,Version=v0.0/win10-arm64-aot": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } }, "native,Version=v0.0/win10-x64": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } }, "native,Version=v0.0/win10-x64-aot": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } }, "native,Version=v0.0/win10-x86": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } }, "native,Version=v0.0/win10-x86-aot": { - "Microsoft.Web.WebView2": { - "type": "Transitive", - "resolved": "1.0.1264.42", - "contentHash": "7OBUTkzQ5VI/3gb0ufi5U4zjuCowAJwQg2li0zXXzqkM+S1kmOlivTy1R4jAW+gY5Vyg510M+qMAESCQUjrfgA==" + "Microsoft.WindowsAppSDK": { + "type": "Direct", + "requested": "[1.5.240227000, )", + "resolved": "1.5.240227000", + "contentHash": "6rESOsREi8534J7IDpNfFYPvxQaSleXKt4A7ZYPeQyckNMQ0o1W0jZ420bJbEMz9Cw/S/8IbpPftLLZ9w/GTCQ==", + "dependencies": { + "Microsoft.Windows.SDK.BuildTools": "10.0.22621.756" + } } } } diff --git a/packages/@react-native-windows/tester/src/js/examples-win/Button/ButtonExample.windows.js b/packages/@react-native-windows/tester/src/js/examples-win/Button/ButtonExample.windows.js index 20e397fb40f..419f64868ce 100644 --- a/packages/@react-native-windows/tester/src/js/examples-win/Button/ButtonExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples-win/Button/ButtonExample.windows.js @@ -221,6 +221,7 @@ exports.examples = [ accessibilityHint="Submit Button" accessibilityPosInSet={1} accessibilitySetSize={1} + accessibilityLiveRegion='assertive' accessibilityValue={{Text: "Submit Application"}} /> ); diff --git a/packages/@react-native-windows/tester/src/js/examples-win/Switch/SwitchExample.windows.js b/packages/@react-native-windows/tester/src/js/examples-win/Switch/SwitchExample.windows.js index f1409281ab9..7503b9aeb22 100644 --- a/packages/@react-native-windows/tester/src/js/examples-win/Switch/SwitchExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples-win/Switch/SwitchExample.windows.js @@ -303,6 +303,7 @@ class AccessibilitySwitchExample extends React.Component< accessibilityHint="Switch" accessibilityPosInSet={2} accessibilitySetSize={4} + accessibilityLiveRegion='none' // focusable={false} onValueChange={value => this.setState({noFocusableValue: value})} value={this.state.noFocusableValue} @@ -314,6 +315,7 @@ class AccessibilitySwitchExample extends React.Component< accessibilityHint="Switch" accessibilityPosInSet={3} accessibilitySetSize={4} + accessibilityLiveRegion='polite' // accessible={false} onValueChange={value => this.setState({noAccessibleValue: value})} value={this.state.noAccessibleValue} @@ -323,6 +325,7 @@ class AccessibilitySwitchExample extends React.Component< accessibilityHint="Switch" accessibilityPosInSet={4} accessibilitySetSize={4} + accessibilityLiveRegion='assertive' // focusable={false} // accessible={false} onValueChange={value => this.setState({noFocusValue: value})} diff --git a/packages/@react-native-windows/tester/src/js/examples/ActivityIndicator/ActivityIndicatorExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/ActivityIndicator/ActivityIndicatorExample.windows.js index 7f17782abe3..81d732dabb1 100644 --- a/packages/@react-native-windows/tester/src/js/examples/ActivityIndicator/ActivityIndicatorExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/ActivityIndicator/ActivityIndicatorExample.windows.js @@ -79,6 +79,7 @@ exports.examples = [ accessibilityLabel="Wait for content to load!" accessibilityPosInSet={1} accessibilitySetSize={1} + accessibilityLiveRegion='polite' accessible /> ); diff --git a/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js index 27dc6b8de33..e3543afab43 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Image/ImageExample.windows.js @@ -1607,6 +1607,7 @@ exports.examples = [ accessible accessibilityPosInSet={1} accessibilitySetSize={2} + accessibilityLiveRegion='polite' /> ); diff --git a/packages/@react-native-windows/tester/src/js/examples/Pressable/PressableExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Pressable/PressableExample.windows.js index 8ad93005aa2..f3a87a52a7e 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Pressable/PressableExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Pressable/PressableExample.windows.js @@ -1073,15 +1073,15 @@ const examples = [ return ( {}} accessibilityPosInSet={1} accessibilitySetSize={3}> + onPress={() => {}} accessibilityPosInSet={1} accessibilitySetSize={3} accessibilityLiveRegion='none'> Pressable 1 of 3 {}} accessibilityPosInSet={2} accessibilitySetSize={3}> + onPress={() => {}} accessibilityPosInSet={2} accessibilitySetSize={3} accessibilityLiveRegion='polite'> Pressable 2 of 3 {}} accessibilityPosInSet={3} accessibilitySetSize={3}> + onPress={() => {}} accessibilityPosInSet={3} accessibilitySetSize={3} accessibilityLiveRegion='assertive'> Pressable 3 of 3 diff --git a/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js index 43b2dbf2735..3877f6a4a72 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Text/TextExample.windows.js @@ -1608,7 +1608,8 @@ const examples = [ accessibilityLabel="This text has customized accessibility" accessibilityHint="Text" accessibilityPosInSet={1} - accessibilitySetSize={1}> + accessibilitySetSize={1} + accessibilityLiveRegion='polite'> This text has customized accessibility. diff --git a/packages/@react-native-windows/tester/src/js/examples/TextInput/TextInputExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/TextInput/TextInputExample.windows.js index afe213b0be9..053cf5b7530 100644 --- a/packages/@react-native-windows/tester/src/js/examples/TextInput/TextInputExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/TextInput/TextInputExample.windows.js @@ -810,18 +810,21 @@ const examples: Array = [ placeholder='TextInput 1 in Set of 3' accessibilityPosInSet={1} accessibilitySetSize={3} + accessibilityLiveRegion='none' /> ); diff --git a/packages/@react-native-windows/tester/src/js/examples/Touchable/TouchableExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/Touchable/TouchableExample.windows.js index f35c320a9e0..98755349301 100644 --- a/packages/@react-native-windows/tester/src/js/examples/Touchable/TouchableExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/Touchable/TouchableExample.windows.js @@ -582,15 +582,15 @@ function TouchableOnFocus>() { function TouchableSet>() { return ( - {}} accessibilityPosInSet={1} accessibilitySetSize={3}> + {}} accessibilityPosInSet={1} accessibilitySetSize={3} accessibilityLiveRegion='none'> Touchable Highlight (Control 1 in Set of 3) - {}} accessibilityPosInSet={2} accessibilitySetSize={3}> + {}} accessibilityPosInSet={2} accessibilitySetSize={3} accessibilityLiveRegion='polite'> Touchable Opacity (Control 2 in Set of 3) - {}} accessibilityPosInSet={3} accessibilitySetSize={3}> + {}} accessibilityPosInSet={3} accessibilitySetSize={3} accessibilityLiveRegion='assertive'> TouchableWithoutFeedback (Control 3 in Set of 3) diff --git a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js index 533b6ac8390..4fe556f33d1 100644 --- a/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js +++ b/packages/@react-native-windows/tester/src/js/examples/View/ViewExample.windows.js @@ -479,6 +479,7 @@ class AccessibilityExample extends React.Component< ]} accessibilityPosInSet={1} accessibilitySetSize={1} + accessibilityLiveRegion='polite' testID="accessibility" accessible focusable diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/ActivityIndicatorComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/ActivityIndicatorComponentTest.test.ts.snap index 04da1893677..3b66569cbf9 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/ActivityIndicatorComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/ActivityIndicatorComponentTest.test.ts.snap @@ -509,6 +509,7 @@ exports[`ActivityIndicator Tests An ActivityIndicator can render 1`] = ` "Automation Tree": { "AutomationId": "default_activity_indicator", "ControlType": 50012, + "LiveSetting": "Polite", "LocalizedControlType": "progress bar", "Name": "Wait for content to load!", "PositionInSet": 1, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/ImageComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/ImageComponentTest.test.ts.snap index 218bcc43545..2881f7173d3 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/ImageComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/ImageComponentTest.test.ts.snap @@ -3243,6 +3243,7 @@ exports[`Image Tests Images can be defined as a set using accessibilityPosInSet { "AutomationId": "", "ControlType": 50006, + "LiveSetting": "Polite", "LocalizedControlType": "image", "PositionInSet": 1, "SizeofSet": 2, @@ -3250,6 +3251,7 @@ exports[`Image Tests Images can be defined as a set using accessibilityPosInSet { "AutomationId": "", "ControlType": 50006, + "LiveSetting": "Assertive", "LocalizedControlType": "image", "PositionInSet": 2, "SizeofSet": 2, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/PressableComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/PressableComponentTest.test.ts.snap index 702acb0fb44..b31675c1ac8 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/PressableComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/PressableComponentTest.test.ts.snap @@ -27,6 +27,7 @@ exports[`Pressable Tests Pressables can be defined as a set using accessibilityP "AutomationId": "", "ControlType": 50026, "IsKeyboardFocusable": true, + "LiveSetting": "Polite", "LocalizedControlType": "group", "PositionInSet": 2, "SizeofSet": 3, @@ -43,6 +44,7 @@ exports[`Pressable Tests Pressables can be defined as a set using accessibilityP "AutomationId": "", "ControlType": 50026, "IsKeyboardFocusable": true, + "LiveSetting": "Assertive", "LocalizedControlType": "group", "PositionInSet": 3, "SizeofSet": 3, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/SwitchComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/SwitchComponentTest.test.ts.snap index 097b2534938..3cde4a9c1e8 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/SwitchComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/SwitchComponentTest.test.ts.snap @@ -439,6 +439,7 @@ exports[`SwitchTests Switches can have customized accessibility 1`] = ` "ControlType": 50000, "HelpText": "Switch", "IsKeyboardFocusable": true, + "LiveSetting": "Polite", "LocalizedControlType": "button", "Name": "This is a Switch with accessible set to false", "PositionInSet": 3, @@ -449,6 +450,7 @@ exports[`SwitchTests Switches can have customized accessibility 1`] = ` "ControlType": 50000, "HelpText": "Switch", "IsKeyboardFocusable": true, + "LiveSetting": "Assertive", "LocalizedControlType": "button", "Name": "This is a Switch with focusable and accessible set to false", "PositionInSet": 4, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap index 3cc9c5f997a..a3c6d200aac 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/TextInputComponentTest.test.ts.snap @@ -1105,6 +1105,7 @@ exports[`TextInput Tests TextInputs can be defined as a set using accessibilityP "ControlType": 50004, "HelpText": "TextInput 2 in Set of 3", "IsKeyboardFocusable": true, + "LiveSetting": "Polite", "LocalizedControlType": "edit", "Name": "TextInput 2 in Set of 3", "PositionInSet": 2, @@ -1116,6 +1117,7 @@ exports[`TextInput Tests TextInputs can be defined as a set using accessibilityP "ControlType": 50004, "HelpText": "TextInput 3 in Set of 3", "IsKeyboardFocusable": true, + "LiveSetting": "Assertive", "LocalizedControlType": "edit", "Name": "TextInput 3 in Set of 3", "PositionInSet": 3, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/TouchableComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/TouchableComponentTest.test.ts.snap index 19702b93e46..cba06ad9b0b 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/TouchableComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/TouchableComponentTest.test.ts.snap @@ -106,6 +106,7 @@ exports[`Touchable Tests Touchables can be defined in a set using accessibilityP "AutomationId": "", "ControlType": 50026, "IsKeyboardFocusable": true, + "LiveSetting": "Polite", "LocalizedControlType": "group", "PositionInSet": 2, "SizeofSet": 3, @@ -122,6 +123,7 @@ exports[`Touchable Tests Touchables can be defined in a set using accessibilityP "AutomationId": "", "ControlType": 50020, "IsKeyboardFocusable": true, + "LiveSetting": "Assertive", "LocalizedControlType": "text", "Name": "TouchableWithoutFeedback (Control 3 in Set of 3)", "PositionInSet": 3, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/ViewComponentTest.test.ts.snap b/packages/e2e-test-app-fabric/test/__snapshots__/ViewComponentTest.test.ts.snap index cadb2233726..1cb3315b5f0 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/ViewComponentTest.test.ts.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/ViewComponentTest.test.ts.snap @@ -1096,6 +1096,7 @@ exports[`View Tests Views can have customized accessibility 1`] = ` "ControlType": 50000, "HelpText": "Accessibility Hint", "IsKeyboardFocusable": true, + "LiveSetting": "Polite", "LocalizedControlType": "button", "Name": "A View with accessibility values", "PositionInSet": 1, diff --git a/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap b/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap index ffa59f5deb4..736aa7271d7 100644 --- a/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap +++ b/packages/e2e-test-app-fabric/test/__snapshots__/snapshotPages.test.js.snap @@ -1033,6 +1033,7 @@ exports[`snapshotAllPages Accessibility Windows 5`] = ` exports[`snapshotAllPages ActivityIndicator 1`] = ` get_CurrentAutomationId(&automationId); pTarget->get_CurrentControlType(&controlType); @@ -321,6 +342,7 @@ winrt::Windows::Data::Json::JsonObject DumpUIATreeRecurse( if (SUCCEEDED(hr) && pTarget4) { pTarget4->get_CurrentPositionInSet(&positionInSet); pTarget4->get_CurrentSizeOfSet(&sizeOfSet); + pTarget4->get_CurrentLiveSetting(&liveSetting); pTarget4->Release(); } result.Insert(L"AutomationId", winrt::Windows::Data::Json::JsonValue::CreateStringValue(automationId)); @@ -333,6 +355,8 @@ winrt::Windows::Data::Json::JsonObject DumpUIATreeRecurse( InsertStringValueIfNotEmpty(result, L"Name", name); InsertIntValueIfNotDefault(result, L"PositionInSet", positionInSet); InsertIntValueIfNotDefault(result, L"SizeofSet", sizeOfSet); + InsertLiveSettingValueIfNotDefault(result, L"LiveSetting", liveSetting); + IValueProvider *valuePattern; hr = pTarget->GetCurrentPattern(UIA_ValuePatternId, reinterpret_cast(&valuePattern)); if (SUCCEEDED(hr) && valuePattern) { diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp index 60faca9bbf2..10ca5a07de2 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp @@ -339,6 +339,11 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPropertyValue(PROPERT pRetVal->lVal = props->accessibilitySetSize; break; } + case UIA_LiveSettingPropertyId: { + pRetVal->vt = VT_I4; + pRetVal->lVal = GetLiveSetting(props->accessibilityLiveRegion); + break; + } } return hr; diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp index 835c9d2d001..a41b4482045 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp @@ -1332,6 +1332,12 @@ void ComponentView::updateAccessibilityProps( winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( m_uiaProvider, UIA_SizeOfSetPropertyId, oldViewProps.accessibilitySetSize, newViewProps.accessibilitySetSize); + + winrt::Microsoft::ReactNative::implementation::UpdateUiaProperty( + m_uiaProvider, + UIA_LiveSettingPropertyId, + oldViewProps.accessibilityLiveRegion, + newViewProps.accessibilityLiveRegion); } std::optional ComponentView::getAccessiblityValue() noexcept { diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp index 8acdfc0387d..76a9fa7676d 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp @@ -163,6 +163,15 @@ void UpdateUiaProperty( spProviderSimple.get(), propId, CComVariant(oldValue.c_str()), CComVariant(newValue.c_str())); } +long GetLiveSetting(const std::string &liveRegion) noexcept { + if (liveRegion == "polite") { + return LiveSetting::Polite; + } else if (liveRegion == "assertive") { + return LiveSetting::Assertive; + } + return LiveSetting::Off; +} + std::string extractAccessibilityValue(const facebook::react::AccessibilityValue &value) noexcept { if (value.now.has_value()) { return std::to_string(value.now.value()); diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h index c69aadce19b..c5a5a109f80 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h @@ -29,6 +29,8 @@ void UpdateUiaProperty( const std::string &oldValue, const std::string &newValue) noexcept; +long GetLiveSetting(const std::string &liveRegion) noexcept; + std::string extractAccessibilityValue(const facebook::react::AccessibilityValue &value) noexcept; } // namespace winrt::Microsoft::ReactNative::implementation diff --git a/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp b/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp index 6110bddceb8..7e4638224cc 100644 --- a/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp @@ -34,7 +34,15 @@ HostPlatformViewProps::HostPlatformViewProps( accessibilitySetSize( CoreFeatures::enablePropIteratorSetter ? sourceProps.accessibilitySetSize - : convertRawProp(context, rawProps, "accessibilitySetSize", sourceProps.accessibilitySetSize, 0)) {} + : convertRawProp(context, rawProps, "accessibilitySetSize", sourceProps.accessibilitySetSize, 0)), + accessibilityLiveRegion( + CoreFeatures::enablePropIteratorSetter ? sourceProps.accessibilityLiveRegion + : convertRawProp( + context, + rawProps, + "accessibilityLiveRegion", + sourceProps.accessibilityLiveRegion, + "none")) {} #define WINDOWS_VIEW_EVENT_CASE(eventType) \ case CONSTEXPR_RAW_PROPS_KEY_HASH("on" #eventType): { \ @@ -71,6 +79,7 @@ void HostPlatformViewProps::setProp( RAW_SET_PROP_SWITCH_CASE_BASIC(focusable); RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityPosInSet); RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilitySetSize); + RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityLiveRegion); RAW_SET_PROP_SWITCH_CASE_BASIC(keyDownEvents); RAW_SET_PROP_SWITCH_CASE_BASIC(keyUpEvents); } diff --git a/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h b/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h index 4ab0b547f43..b2fce99065b 100644 --- a/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h +++ b/vnext/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.h @@ -26,6 +26,7 @@ class HostPlatformViewProps : public BaseViewProps { bool focusable{false}; int accessibilityPosInSet{0}; int accessibilitySetSize{0}; + std::string accessibilityLiveRegion{"none"}; // std::optional overflowAnchor{}; // std::optional tooltip{}; diff --git a/vnext/Microsoft.ReactNative/packages.lock.json b/vnext/Microsoft.ReactNative/packages.lock.json index b6159122ee8..acd06d451f2 100644 --- a/vnext/Microsoft.ReactNative/packages.lock.json +++ b/vnext/Microsoft.ReactNative/packages.lock.json @@ -24,15 +24,6 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, - "Microsoft.UI.Xaml": { - "type": "Direct", - "requested": "[2.8.0, )", - "resolved": "2.8.0", - "contentHash": "vxdHxTr63s5KVtNddMFpgvjBjUH50z7seq/5jLWmmSuf8poxg+sXrywkofUdE8ZstbpO9y3FL/IXXUcPYbeesA==", - "dependencies": { - "Microsoft.Web.WebView2": "1.0.1264.42" - } - }, "Microsoft.Windows.CppWinRT": { "type": "Direct", "requested": "[2.0.230706.1, )",