Skip to content

Commit 77957ee

Browse files
test: make invalidation coverage deterministic
1 parent c5d4dfd commit 77957ee

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

packages/react-native/ReactCommon/react/runtime/iostests/RCTInstanceTests.mm

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#import <React/RCTJavaScriptLoader.h>
1414
#import <ReactCommon/RCTHermesInstance.h>
1515
#import <ReactCommon/RCTInstance.h>
16+
#import <ReactCommon/RCTJSThreadManager.h>
1617
#import <ReactCommon/RCTTurboModule.h>
1718
#import <ReactCommon/RCTTurboModuleManager.h>
1819

@@ -244,11 +245,22 @@ - (void)testDoesNotInitializeDevSettingsAfterInvalidation
244245

245246
RCTInstance *instance = [self makeInstance];
246247
[self waitForExpectations:@[ loadStarted ] timeout:5.0];
248+
249+
dispatch_semaphore_t jsThreadBlocked = dispatch_semaphore_create(0);
250+
dispatch_semaphore_t releaseJsThread = dispatch_semaphore_create(0);
251+
RCTJSThreadManager *jsThreadManager = [instance valueForKey:@"jsThreadManager"];
252+
[jsThreadManager dispatchToJSThread:^{
253+
dispatch_semaphore_signal(jsThreadBlocked);
254+
dispatch_semaphore_wait(releaseJsThread, DISPATCH_TIME_FOREVER);
255+
}];
256+
XCTAssertEqual(dispatch_semaphore_wait(jsThreadBlocked, dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC)), 0);
257+
247258
[instance invalidate];
248259

249260
loadComplete([NSError errorWithDomain:@"RCTInstanceTests" code:1 userInfo:nil], nil);
250261

251262
XCTAssertEqual([FakeDevSettings.initCounts countForObject:FakeDevSettingsInitialize], 0u);
263+
dispatch_semaphore_signal(releaseJsThread);
252264
}
253265

254266
- (void)testBundleLoadAwaitsMainQueueModuleSetup

0 commit comments

Comments
 (0)