From 91382db5a1bfa3ca82022d9088a2002a0f6d31b6 Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Thu, 6 Mar 2025 10:33:43 +0100 Subject: [PATCH 1/9] create new test file --- FabricExample/Gemfile.lock | 1 + FabricExample/e2e/examplesTests/tests.e2e.ts | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 FabricExample/e2e/examplesTests/tests.e2e.ts 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..64bf60f983 --- /dev/null +++ b/FabricExample/e2e/examplesTests/tests.e2e.ts @@ -0,0 +1,8 @@ +import { device } from 'detox'; + +describe('E2E', () => { + beforeAll(async () => { + await device.reloadReactNative(); + }); + +}); From de0304ec211ceda1ffb16db213a7daf2fffc1cb8 Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Wed, 12 Mar 2025 09:39:30 +0100 Subject: [PATCH 2/9] check first 3 tests --- FabricExample/e2e/examplesTests/tests.e2e.ts | 4 +- FabricExample/ios/Podfile.lock | 90 ++++++++++---------- apps/src/tests/index.ts | 6 +- 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/FabricExample/e2e/examplesTests/tests.e2e.ts b/FabricExample/e2e/examplesTests/tests.e2e.ts index 64bf60f983..dbc8c58196 100644 --- a/FabricExample/e2e/examplesTests/tests.e2e.ts +++ b/FabricExample/e2e/examplesTests/tests.e2e.ts @@ -1,7 +1,7 @@ import { device } from 'detox'; -describe('E2E', () => { - beforeAll(async () => { +describe('Tests from PRs and issues', () => { + beforeEach(async () => { await device.reloadReactNative(); }); diff --git a/FabricExample/ios/Podfile.lock b/FabricExample/ios/Podfile.lock index 0c518bf54d..9dbdcd9089 100644 --- a/FabricExample/ios/Podfile.lock +++ b/FabricExample/ios/Podfile.lock @@ -2013,61 +2013,61 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: eb93e2f488219332457c3c4eafd2738ddc7e80b8 hermes-engine: f185bc10472e612edc743be4355bf46bad800446 - RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 RCTDeprecation: 2c8856d4e9b0ba79f3e37079bd90aa0971353a1b RCTRequired: 48708ac722594441cf535d4815275c11149a1e75 RCTTypeSafety: e0c05b269c20da6febb9c80ae50ac4a815cca00a React: c1773c9d8bc6451f1b00ee11d9bd0bdf7b54a7e2 React-callinvoker: 245546c9de42c6f5fa7c9262289d8fb7ab2f735a - React-Core: 10fc423129324980e0c6949b1fc442f8a746496e - React-CoreModules: 922575c1b919ef68dbab2761db90afdd585257a5 - React-cxxreact: 07ceb4a53f352d0836373fbe866cadeb95b67222 + React-Core: 67ea7c88b0e73c2321cbf9cd6f76b26ee291d3f8 + React-CoreModules: 8a8737a847fa832881cdb2e9d14b327ea8fa77f3 + React-cxxreact: 42ff2a3e508d749689536ba39a7040b9cf965690 React-debug: c6270aaf1c7220150ac7f02143ef1d728f818732 - React-defaultsnativemodule: 6527d6c458e39142faed0615f9db44f3e28a1181 - React-domnativemodule: 40e893d9c72c5380f57ad562fbf665bc3a237359 - React-Fabric: 75d054645f8b82a3d883cb6e434361a8568f40c6 - React-FabricComponents: 87b8467879ea160f58dbaee3bbd1d968cf53dd6d - React-FabricImage: 763ec9a65f6a0009fda55e9811e9c39d091e2f76 + React-defaultsnativemodule: b87f958802b7813152ffa8c873e0c20ea55edc24 + React-domnativemodule: d190ecf40907bc0377be3fc4b84d79eefcd7995b + React-Fabric: ecbdc9b5e5f3ac62103a5c9bd1430cdbbcd8edfd + React-FabricComponents: 713d885749f3ef8692ff134524477b7848b3c742 + React-FabricImage: 5aad10fb4a821c7accd8ef249214bc7d1ae5746f React-featureflags: 403f925f7f8a43071d203eb1bd0b582ccd9b601d - React-featureflagsnativemodule: 9db6380bd1957a79b8d45d55e6acadf8ec065419 - React-graphics: 483c5b5308fafd1510fcc4a4ddf989ffee9b58de - React-hermes: 4da67646484805735f254b674e24046e1f39781c - React-idlecallbacksnativemodule: fcc79b33619a72ea3293dcc90a36368c9ecd0a52 - React-ImageManager: e6d7843c470838ed8a6f3b74f3a2111143010489 - React-jserrorhandler: 687e6800ad2375e952ed54f5361552846ff882fa - React-jsi: f5a54adbaebcaefc8b26d73524340daf0c9ebe03 - React-jsiexecutor: 4073f480ba56ca44b28e8e3c843c2ff874795514 - React-jsinspector: 2a5b8161cb374e9d1196d81668baf0568b61377a - React-jsinspectortracing: e9108a890ec559a2673c58b21fbc0db080608c05 - React-jsitracing: c783b4c25cb3f8c2790713ea2def82e5aa42820a - React-logger: b414e4fcd3be78ed0b78645f07a057c26ed18888 - React-Mapbuffer: 2765656df475f7aaa0b5bf4856aa8201380dce16 - React-microtasksnativemodule: e39619e9d06c31ca3a92628ee9b70491b9662e58 - react-native-restart: 7595693413fe3ca15893702f2c8306c62a708162 - react-native-safe-area-context: 9c33120e9eac7741a5364cc2d9f74665049b76b3 - React-NativeModulesApple: 5b12971faa02f3ce82731c9c5deba659d83e1f4b - React-perflogger: 85ea5a47f97143ec3140c19c38eaa9168bbfe6c1 - React-performancetimeline: 34e73c0da8e6ad855218cfec7db0a5c2834466b2 + React-featureflagsnativemodule: a7ea02436d18ad0c0bf531d8f566194713ad5d69 + React-graphics: 3547cdbb5c10d8610dad27579caad6c4c761fbea + React-hermes: d4d2490df576400ba44265bfb443dcc1b9b7c7c3 + React-idlecallbacksnativemodule: 0f004e45424972c8313d8af962ce5b8732352e2f + React-ImageManager: 1abcacc5d4d1ba98231434b6eeaae543b6f7f075 + React-jserrorhandler: 3d25cd7251c85515365628d878bc2a4f07444374 + React-jsi: a7d7c45e28039a4817c1b80d1f8302f35c20e3ed + React-jsiexecutor: 0def615a82aa42001d03f7a95ea28d5ecc117726 + React-jsinspector: 39628b5cc680b3cab3c631de0e3ad07a43556594 + React-jsinspectortracing: db9800afd9cb0ee33c2253f234574b3d68d97d2a + React-jsitracing: 595ccbe6ac256aaa1fbc22efbf0fc2474244d575 + React-logger: 417a59476b6d8f7c00ffc7d0fec4964a91c7617e + React-Mapbuffer: 7df58125cd83062b50f90fa3f656e9509f1fa21c + React-microtasksnativemodule: 00924a9b4b311aec4d9d8c38de9217f88a92f1de + react-native-restart: 0bc732f4461709022a742bb29bcccf6bbc5b4863 + react-native-safe-area-context: 7e513d737b0b5c1d10bbe0e5fcc9f925a7be144c + React-NativeModulesApple: 814c1f7b25e0ce6343ffc6d0d9cf0a1c11f486c6 + React-perflogger: e3e2eb3b206f1d6375ad673b2d10bf57836f436e + React-performancetimeline: eba3e7710a19759c7a1d6aced3abe23bdc196460 React-RCTActionSheet: c32efd32f661f888acf55edf30d742d80386ab4f - React-RCTAnimation: e8ec262e00d3eb8f0bed786f720b01b035961cec - React-RCTAppDelegate: d9a2b2610a582fe7099087cd69ac455d837be9c5 - React-RCTBlob: 846c0e2ec3da1cc5da03a1d94dde794e445ce8c1 - React-RCTFabric: 05392addbc532b6f3410ba914d2252f9c629affb - React-RCTFBReactNativeSpec: db8ccb471152b3cee8c7abeaf6f524ba2bd75fc1 - React-RCTImage: 6abbb45d7f6025cd1e5180928d24322fd1885a9f - React-RCTLinking: 5cca7087d943d24269bf232f63af9fa1746eeb09 - React-RCTNetwork: 2fad4baf76e21afd4ddb2316ac5d1390f219efbe - React-RCTSettings: f472baca4e986546314ca4a867769eaf3089a6b9 - React-RCTText: 5a5917ec9bcff3ded118b7fcd198cdde38bb8232 - React-RCTVibration: ce0d94d094d67a7ee869041592fa194ff93eb585 + React-RCTAnimation: b89a2d8cc791f0996203ea647878589de6efb451 + React-RCTAppDelegate: 685b1a2a562cde000dc600fdda2130559eb73222 + React-RCTBlob: f3726c35ecc2bba9eec112f8d52a5d0433a715e6 + React-RCTFabric: ae366e8bf743818885b4a5e45b9b8887f78e3856 + React-RCTFBReactNativeSpec: c92e9905558befec8e03c1f223de10430cb7b372 + React-RCTImage: 15ca3faf7ec989826fbd62c89b85fb9fb5cdd10c + React-RCTLinking: 02c7ac32777cea3170c74bc8324184323b12d592 + React-RCTNetwork: 78628d76c2ae2eb2b5cc1a6dfbec285ccdbdb9c8 + React-RCTSettings: 2062ce9b6e69b3686c3591551ed4024c488cf96a + React-RCTText: cc059835349d468d8d93e82da6c9aa9c6032ad56 + React-RCTVibration: a9219f8da44afc58f3b291bd6798b700153a8e10 React-rendererconsistency: bb3a3c5730ab4e6a8a9ee0ffb3cb84d727c3bed5 - React-rendererdebug: 0ce779179199216814ee1368951b9c3c0b183595 + React-rendererdebug: d5a6fecae88c29fc336379489e00d0f3e60e98ef React-rncore: 03e107717ccd4ac9d5d79196681faa740ede0b9f - React-RuntimeApple: ec335c65a192e3b09ca322582a8cb311f74119d2 - React-RuntimeCore: 8bb00314545f6c1173f7b4c6c0e0a6c74bcb5c8e + React-RuntimeApple: 876f41dc76bb6b6e738f6d3ad7ea3d89e535efa8 + React-RuntimeCore: c491a1a2eb734765d6e02618f5f2a28e2872f751 React-runtimeexecutor: a13bd44f6168899cdf60682f137a09516cd5ea35 - React-RuntimeHermes: 3009df42da2b7015cc66fe4961b2ccca81160f1c - React-runtimescheduler: b79baa0ca5d8e8840ad49cbcdb44ab693d7fbdaa + React-RuntimeHermes: eff796dfd1df04f9f2cd8b37be37a47d90a4ab4c + React-runtimescheduler: 4bd885d85b7841b823c2164725c959c6dbc0fd4e React-timing: ddfc36f45351e851633b857cf75eb167e119d3b7 React-utils: 9ea2e9d57dd01e5b9cf1270969e3179ac3b7f325 ReactAppDependencyProvider: 19db96cb59117f0cf2e32993b7a2ba34b6397c57 @@ -2081,4 +2081,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: 9368f39644a8576a848701c298cb4a4fd39a41bf -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/apps/src/tests/index.ts b/apps/src/tests/index.ts index 29c21b2c97..f5e58f9029 100644 --- a/apps/src/tests/index.ts +++ b/apps/src/tests/index.ts @@ -1,8 +1,8 @@ // @ts-nocheck -export { default as Test42 } from './Test42'; -export { default as Test111 } from './Test111'; -export { default as Test263 } from './Test263'; +export { default as Test42 } from './Test42'; // [E2E skipped]: can't check orientation, unclear problem description +export { default as Test111 } from './Test111'; // [E2E skipped]: can't check flickering +export { default as Test263 } from './Test263'; // [E2E skipped]: example differs from PR, even if changed the problem still occurs export { default as Test349 } from './Test349'; export { default as Test364 } from './Test364'; export { default as Test432 } from './Test432'; From c5ac5eca7eacb2afeb445d46abb8a3fe9688c0a2 Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Mon, 17 Mar 2025 09:58:39 +0100 Subject: [PATCH 3/9] check 349 and 364 --- apps/src/tests/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/src/tests/index.ts b/apps/src/tests/index.ts index f5e58f9029..ed048cd8c4 100644 --- a/apps/src/tests/index.ts +++ b/apps/src/tests/index.ts @@ -3,8 +3,8 @@ export { default as Test42 } from './Test42'; // [E2E skipped]: can't check orientation, unclear problem description export { default as Test111 } from './Test111'; // [E2E skipped]: can't check flickering export { default as Test263 } from './Test263'; // [E2E skipped]: example differs from PR, even if changed the problem still occurs -export { default as Test349 } from './Test349'; -export { default as Test364 } from './Test364'; +export { default as Test349 } from './Test349'; // [E2E skipped]: can't check autofill easily, wrong prop name +export { default as Test364 } from './Test364'; // [E2E skipped]: tabBarVisible prop doesn't exist anymore, suggested solution is to change navigator hierarchy (proposed in PR and in react-navigation docs) export { default as Test432 } from './Test432'; export { default as Test528 } from './Test528'; export { default as Test550 } from './Test550'; From da90f08b8de00f413c479d73af251c6308306e18 Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Tue, 18 Mar 2025 11:42:06 +0100 Subject: [PATCH 4/9] progress on Test432 --- FabricExample/e2e/examplesTests/tests.e2e.ts | 25 +++++++++++++++++--- apps/src/shared/Square.tsx | 4 +++- apps/src/tests/Test432.tsx | 12 +++++----- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/FabricExample/e2e/examplesTests/tests.e2e.ts b/FabricExample/e2e/examplesTests/tests.e2e.ts index dbc8c58196..4a97a48eb0 100644 --- a/FabricExample/e2e/examplesTests/tests.e2e.ts +++ b/FabricExample/e2e/examplesTests/tests.e2e.ts @@ -1,8 +1,27 @@ -import { device } from 'detox'; +import { device, expect, element, by } from 'detox'; -describe('Tests from PRs and issues', () => { - beforeEach(async () => { +describe('Test432', () => { + beforeAll(async () => { await device.reloadReactNative(); }); + it('should Test432 exist', async () => { + await waitFor(element(by.id('root-screen-tests-Test432'))) + .toBeVisible() + .whileElement(by.id('root-screen-examples-scrollview')) + .scroll(100, 'down', NaN, 0.85); + + await expect(element(by.id('root-screen-tests-Test432'))).toBeVisible(); + await element(by.id('root-screen-tests-Test432')).tap(); + }); + + + // home home-square + // details details-red-square | click | details-green-square | click | details-red-square | back + // info info-green-square-1 | click | info-red-square info-green-square-1 info-green-square-2 | click | info-green-square-1 | back + // settings settings-square + // za kazdym powrotem do home sprawdzic czarny square + + + }); 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..ec291e531c 100644 --- a/apps/src/tests/Test432.tsx +++ b/apps/src/tests/Test432.tsx @@ -45,7 +45,7 @@ const DetailsScreen = ({ navigation }: StackScreenProps<'Details'>) => { navigation.setOptions({ headerBackVisible: !x, headerRight: () => - x ? : , + x ? : , }); }, [navigation, x]); @@ -61,13 +61,13 @@ const InfoScreen = ({ navigation }: StackScreenProps<'Info'>) => { const square1 = (props: { tintColor?: string }) => ( - {hasLeftItem && } - + {hasLeftItem && } + ); const square2 = (props: { tintColor?: string }) => ( - + ); useLayoutEffect(() => { @@ -95,7 +95,7 @@ const StackNavigator = () => { name="Home" component={HomeScreen} options={{ - headerRight: () => , + headerRight: () => , }} /> @@ -112,7 +112,7 @@ const StackNavigator = () => { options={{ presentation: 'modal', animation: 'slide_from_bottom', - headerRight: () => , + headerRight: () => , }} /> From 67c10c9e2a686da3e604fd6a59ea4a4655fc810a Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Tue, 18 Mar 2025 13:00:10 +0100 Subject: [PATCH 5/9] finish Test432 --- FabricExample/e2e/examplesTests/tests.e2e.ts | 59 ++++++++++++++++++-- apps/src/tests/Test432.tsx | 27 +++++++-- apps/src/tests/index.ts | 2 +- 3 files changed, 76 insertions(+), 12 deletions(-) diff --git a/FabricExample/e2e/examplesTests/tests.e2e.ts b/FabricExample/e2e/examplesTests/tests.e2e.ts index 4a97a48eb0..cf07d1e89c 100644 --- a/FabricExample/e2e/examplesTests/tests.e2e.ts +++ b/FabricExample/e2e/examplesTests/tests.e2e.ts @@ -9,19 +9,66 @@ describe('Test432', () => { await waitFor(element(by.id('root-screen-tests-Test432'))) .toBeVisible() .whileElement(by.id('root-screen-examples-scrollview')) - .scroll(100, 'down', NaN, 0.85); + .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('home-square should be fully visible', async () => { + await expect(element(by.id('home-square'))).toBeVisible(100); + }); + + it('squares from details screen should be fully visible', async () => { + await element(by.id('go-to-details')).tap(); + await expect(element(by.id('details-red-square'))).toBeVisible(100); + + await element(by.id('details-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-green-square'))).toBeVisible(100); + + await element(by.id('details-toggle-subviews')).tap(); + await expect(element(by.id('details-red-square'))).toBeVisible(100); + + if (device.getPlatform() === 'ios') { + await element(by.id('BackButton')).tap(); + } else { + await device.pressBack(); + } + + await expect(element(by.id('home-square'))).toBeVisible(100); + }); + + it('squares from info screen should be fully visible', async () => { + await element(by.id('go-to-info')).tap(); + await expect(element(by.id('info-green-square-1'))).toBeVisible(100); + + await element(by.id('info-toggle-subviews')).tap(); + waitFor(element(by.id('info-green-square-1'))).toBeVisible(100); + waitFor(element(by.id('info-green-square-2'))).toBeVisible(100); + waitFor(element(by.id('info-red-square'))).toBeVisible(100); - // home home-square - // details details-red-square | click | details-green-square | click | details-red-square | back - // info info-green-square-1 | click | info-red-square info-green-square-1 info-green-square-2 | click | info-green-square-1 | back - // settings settings-square - // za kazdym powrotem do home sprawdzic czarny square + await element(by.id('info-toggle-subviews')).tap(); + waitFor(element(by.id('info-green-square-1'))).toBeVisible(100); + if (device.getPlatform() === 'ios') { + await element(by.id('BackButton')).tap(); + } else { + await device.pressBack(); + } + await expect(element(by.id('home-square'))).toBeVisible(100); + }); + + it('squares from settings screen should be fully visible', async () => { + await element(by.id('show-settings')).tap(); + await expect(element(by.id('settings-square'))).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-square'))).toBeVisible(100); + }); }); diff --git a/apps/src/tests/Test432.tsx b/apps/src/tests/Test432.tsx index ec291e531c..fbf22e183a 100644 --- a/apps/src/tests/Test432.tsx +++ b/apps/src/tests/Test432.tsx @@ -26,14 +26,17 @@ const HomeScreen = ({ navigation }: StackScreenProps<'Home'>) => {