From a4dae044df58f37ac0e760045bb8b3587ea3ae7e Mon Sep 17 00:00:00 2001 From: Phillip Pan Date: Tue, 13 Jun 2023 14:24:12 -0700 Subject: [PATCH] test RCTInstance initialization (#37860) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/37860 Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D46547013 fbshipit-source-id: 2b1593799ce2b5d29e7ea6df4373ff6c92b51065 --- .../react/bridgeless/iostests/RCTHostTests.mm | 8 ++++++++ .../react/test_utils/ios/Shims/ShimRCTInstance.h | 5 +++++ .../react/test_utils/ios/Shims/ShimRCTInstance.mm | 15 +++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/packages/react-native/ReactCommon/react/bridgeless/iostests/RCTHostTests.mm b/packages/react-native/ReactCommon/react/bridgeless/iostests/RCTHostTests.mm index 4e571b47ec0..58467be556b 100644 --- a/packages/react-native/ReactCommon/react/bridgeless/iostests/RCTHostTests.mm +++ b/packages/react-native/ReactCommon/react/bridgeless/iostests/RCTHostTests.mm @@ -40,10 +40,18 @@ static ShimRCTInstance *shimmedRCTInstance; }]; } +- (void)tearDown +{ + [shimmedRCTInstance reset]; + + [super tearDown]; +} + - (void)testStart { [_subject start]; OCMVerify(OCMTimes(1), [_mockHostDelegate hostDidStart:_subject]); + XCTAssertEqual(shimmedRCTInstance.initCount, 1); } @end diff --git a/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.h b/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.h index 50e1eb1f7fd..a0aee07975b 100644 --- a/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.h +++ b/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.h @@ -8,4 +8,9 @@ #import @interface ShimRCTInstance : NSObject + +@property (assign) int initCount; + +- (void)reset; + @end diff --git a/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm b/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm index 1e1b52c6154..017b45ac212 100644 --- a/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm +++ b/packages/react-native/ReactCommon/react/test_utils/ios/Shims/ShimRCTInstance.mm @@ -11,20 +11,34 @@ #import "RCTSwizzleHelpers.h" +static __weak ShimRCTInstance *weakShim = nil; + @implementation ShimRCTInstance - (instancetype)init { if (self = [super init]) { + _initCount = 0; RCTSwizzleInstanceSelector( [RCTInstance class], [ShimRCTInstance class], @selector(initWithDelegate: jsEngineInstance:bundleManager:turboModuleManagerDelegate:onInitialBundleLoad:moduleRegistry:)); + weakShim = self; } return self; } +- (void)reset +{ + RCTSwizzleInstanceSelector( + [RCTInstance class], + [ShimRCTInstance class], + @selector(initWithDelegate: + jsEngineInstance:bundleManager:turboModuleManagerDelegate:onInitialBundleLoad:moduleRegistry:)); + _initCount = 0; +} + - (instancetype)initWithDelegate:(id)delegate jsEngineInstance:(std::shared_ptr)jsEngineInstance bundleManager:(RCTBundleManager *)bundleManager @@ -32,6 +46,7 @@ onInitialBundleLoad:(RCTInstanceInitialBundleLoadCompletionBlock)onInitialBundleLoad moduleRegistry:(RCTModuleRegistry *)moduleRegistry { + weakShim.initCount++; return self; }