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'>) => {