diff --git a/FabricExample/Gemfile.lock b/FabricExample/Gemfile.lock
index 918795d29e..d8b3e66eea 100644
--- a/FabricExample/Gemfile.lock
+++ b/FabricExample/Gemfile.lock
@@ -95,6 +95,7 @@ PLATFORMS
DEPENDENCIES
activesupport (>= 6.1.7.5, != 7.1.0)
cocoapods (>= 1.13, != 1.15.1, != 1.15.0)
+ xcodeproj (< 1.26.0)
RUBY VERSION
ruby 3.2.1p31
diff --git a/FabricExample/e2e/examplesTests/tests.e2e.ts b/FabricExample/e2e/examplesTests/tests.e2e.ts
new file mode 100644
index 0000000000..2716b61026
--- /dev/null
+++ b/FabricExample/e2e/examplesTests/tests.e2e.ts
@@ -0,0 +1,110 @@
+import { device, expect, element, by } from 'detox';
+
+describe('Test432', () => {
+ beforeAll(async () => {
+ await device.reloadReactNative();
+ });
+
+ it('Test432 should exist', async () => {
+ await waitFor(element(by.id('root-screen-tests-Test432')))
+ .toBeVisible()
+ .whileElement(by.id('root-screen-examples-scrollview'))
+ .scroll(600, 'down', NaN, 0.85);
+
+ await expect(element(by.id('root-screen-tests-Test432'))).toBeVisible();
+ await element(by.id('root-screen-tests-Test432')).tap();
+ });
+
+ it('headerRight element should be fully visible', async () => {
+ await expect(element(by.id('home-headerRight'))).toBeVisible(100);
+ });
+
+ it('headerRight elements should toggle and stay fully visible', async () => {
+ await element(by.id('home-button-go-to-details')).tap();
+ await expect(element(by.id('details-headerRight-red'))).toBeVisible(100);
+
+ await element(by.id('details-button-toggle-subviews')).tap();
+ // On Android, we need to wait for some elements (e.g. at first, this square is only 25% visible)
+ waitFor(element(by.id('details-headerRight-green'))).toBeVisible(100);
+
+ await element(by.id('details-button-toggle-subviews')).tap();
+ await expect(element(by.id('details-headerRight-red'))).toBeVisible(100);
+
+ if (device.getPlatform() === 'ios') {
+ await element(by.id('BackButton')).tap();
+ } else {
+ await device.pressBack();
+ }
+
+ await expect(element(by.id('home-headerRight'))).toBeVisible(100);
+ });
+
+ it('headerLeft and headerRight elements should toggle and stay fully visible', async () => {
+ await element(by.id('home-button-go-to-info')).tap();
+ await expect(element(by.id('info-headerRight-green-1'))).toBeVisible(100);
+
+ await element(by.id('info-button-toggle-subviews')).tap();
+ waitFor(element(by.id('info-headerRight-green-1'))).toBeVisible(100);
+ waitFor(element(by.id('info-headerRight-green-2'))).toBeVisible(100);
+ waitFor(element(by.id('info-headerLeft-red'))).toBeVisible(100);
+
+ await element(by.id('info-button-toggle-subviews')).tap();
+ waitFor(element(by.id('info-headerRight-green-1'))).toBeVisible(100);
+
+ if (device.getPlatform() === 'ios') {
+ await element(by.id('BackButton')).tap();
+ } else {
+ await device.pressBack();
+ }
+
+ await expect(element(by.id('home-headerRight'))).toBeVisible(100);
+ });
+
+ it('headerRight element on modal should be fully visible', async () => {
+ await element(by.id('home-button-show-settings')).tap();
+ await expect(element(by.id('settings-headerRight'))).toBeVisible(100);
+
+ if (device.getPlatform() === 'ios') {
+ await element(by.id('settings-text')).swipe('down', 'fast');
+ } else {
+ await device.pressBack();
+ }
+ await expect(element(by.id('home-headerRight'))).toBeVisible(100);
+ });
+});
+
+// Detox currently supports orientation only on iOS
+if (device.getPlatform() === 'ios') {
+ describe('Test528', () => {
+ beforeAll(async () => {
+ await device.reloadReactNative();
+ });
+
+ it('Test528 should exist', async () => {
+ await waitFor(element(by.id('root-screen-tests-Test528')))
+ .toBeVisible()
+ .whileElement(by.id('root-screen-examples-scrollview'))
+ .scroll(600, 'down', NaN, 0.85);
+
+ await expect(element(by.id('root-screen-tests-Test528'))).toBeVisible();
+ await element(by.id('root-screen-tests-Test528')).tap();
+ });
+
+ it('headerRight button should be visible after orientation change', async () => {
+ await expect(element(by.text('Custom Button'))).toBeVisible(100);
+ await device.setOrientation('landscape');
+ await expect(element(by.text('Custom Button'))).toBeVisible(100);
+ await device.setOrientation('portrait');
+ await expect(element(by.text('Custom Button'))).toBeVisible(100);
+ });
+
+ it('headerRight button should be visible after coming back from horizontal screen', async () => {
+ await element(by.text('Go to Screen 2')).tap();
+ await device.setOrientation('landscape');
+ await element(by.id('BackButton')).tap();
+ await expect(element(by.text('Custom Button'))).toBeVisible(100);
+ await device.setOrientation('portrait');
+ await expect(element(by.text('Custom Button'))).toBeVisible(100);
+ });
+ });
+}
diff --git a/FabricExample/ios/Podfile.lock b/FabricExample/ios/Podfile.lock
index 0c518bf54d..68cacee880 100644
--- a/FabricExample/ios/Podfile.lock
+++ b/FabricExample/ios/Podfile.lock
@@ -1733,7 +1733,7 @@ PODS:
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- - RNScreens (4.10.0-beta.3):
+ - RNScreens (4.10.0):
- DoubleConversion
- glog
- hermes-engine
@@ -1754,9 +1754,9 @@ PODS:
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- - RNScreens/common (= 4.10.0-beta.3)
+ - RNScreens/common (= 4.10.0)
- Yoga
- - RNScreens/common (4.10.0-beta.3):
+ - RNScreens/common (4.10.0):
- DoubleConversion
- glog
- hermes-engine
@@ -2075,7 +2075,7 @@ SPEC CHECKSUMS:
ReactCommon: 179964ffc47fa62ad0e1eebac704e88c59b46667
RNGestureHandler: 4e7defe5095e936424173fc75f0bf2af5bba8e23
RNReanimated: 183ca222293bd622678e387100e54d03d952c73b
- RNScreens: b40d97d6ad4b6f1f55552bed30b845ae01ff3d2c
+ RNScreens: 0f01bbed9bd8045a8d58e4b46993c28c7f498f3c
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
Yoga: 330be28eee1242da875db9e851b19a4df496b999
diff --git a/apps/src/shared/Square.tsx b/apps/src/shared/Square.tsx
index 480c1d740e..5eb8814568 100644
--- a/apps/src/shared/Square.tsx
+++ b/apps/src/shared/Square.tsx
@@ -4,11 +4,13 @@ import { View } from 'react-native';
interface Props {
color?: string;
size?: number;
+ testID?: string;
}
export const Square = ({
size = 100,
color = 'red',
+ testID,
}: Props): React.JSX.Element => (
-
+
);
diff --git a/apps/src/tests/Test432.tsx b/apps/src/tests/Test432.tsx
index f58bd3b752..803d8badb0 100644
--- a/apps/src/tests/Test432.tsx
+++ b/apps/src/tests/Test432.tsx
@@ -26,14 +26,17 @@ const HomeScreen = ({ navigation }: StackScreenProps<'Home'>) => {