From 9ae7f7fcc15465c8704f04868bde754fbc5bbb01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Mon, 28 Apr 2025 06:55:25 -0700 Subject: [PATCH] Refactor InterruptibleRendering Fantom test to use dispatchNativeEvent (#50957) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/50957 Changelog: [internal] Now we can use the higher level API for event dispatching in this test. Reviewed By: javache Differential Revision: D73663626 fbshipit-source-id: 961af26f62128f093c71ad14f457ac8544348415 --- packages/react-native-fantom/src/index.js | 4 +- .../__tests__/InterruptibleRendering-itest.js | 48 +++++++++---------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/packages/react-native-fantom/src/index.js b/packages/react-native-fantom/src/index.js index 9eb23683c47..8fb1a05c034 100644 --- a/packages/react-native-fantom/src/index.js +++ b/packages/react-native-fantom/src/index.js @@ -348,7 +348,9 @@ export function dispatchNativeEvent( enqueueNativeEvent(node, type, payload, options); }); - runWorkLoop(); + if (!flushingQueue) { + runWorkLoop(); + } } export type ScrollEventOptions = { diff --git a/packages/react-native/Libraries/ReactNative/__tests__/InterruptibleRendering-itest.js b/packages/react-native/Libraries/ReactNative/__tests__/InterruptibleRendering-itest.js index e5711f04a48..d7328aa56ff 100644 --- a/packages/react-native/Libraries/ReactNative/__tests__/InterruptibleRendering-itest.js +++ b/packages/react-native/Libraries/ReactNative/__tests__/InterruptibleRendering-itest.js @@ -43,18 +43,16 @@ describe('discrete event category', () => { if (interruptRendering) { interruptRendering = false; const element = ensureReactNativeElement(textInputRef.current); - Fantom.runOnUIThread(() => { - Fantom.enqueueNativeEvent( - element, - 'change', - { - text: 'update from native', - }, - { - category: NativeEventCategory.Discrete, - }, - ); - }); + Fantom.dispatchNativeEvent( + element, + 'change', + { + text: 'update from native', + }, + { + category: NativeEventCategory.Discrete, + }, + ); // We must schedule a task that is run right after the above native event is // processed to be able to observe the results of rendering. Fantom.scheduleTask(afterUpdate); @@ -149,21 +147,19 @@ describe('continuous event category', () => { if (interruptRendering) { interruptRendering = false; const element = ensureReactNativeElement(textInputRef.current); - Fantom.runOnUIThread(() => { - Fantom.enqueueNativeEvent( - element, - 'selectionChange', - { - selection: { - start: 1, - end: 5, - }, + Fantom.dispatchNativeEvent( + element, + 'selectionChange', + { + selection: { + start: 1, + end: 5, }, - { - category: NativeEventCategory.Continuous, - }, - ); - }); + }, + { + category: NativeEventCategory.Continuous, + }, + ); } useEffect(() => { effectMock({text, deferredText});