PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/react-native/ReactCommon/react/nativemodule/core/iostests
Просмотр файла: RCTTurboModuleTests.mm
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <XCTest/XCTest.h>
#import <ReactCommon/RCTTurboModule.h>
#import <hermes/hermes.h>
#import <react/featureflags/ReactNativeFeatureFlags.h>
#import <OCMock/OCMock.h>
using namespace facebook::react;
@interface RCTTestTurboModule : NSObject <RCTBridgeModule>
@end
@implementation RCTTestTurboModule
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(testMethodWhichTakesObject : (id)object) {}
@end
class StubNativeMethodCallInvoker : public NativeMethodCallInvoker {
public:
void invokeAsync(const std::string &methodName, NativeMethodCallFunc &&func) noexcept override
{
func();
}
void invokeSync(const std::string &methodName, NativeMethodCallFunc &&func) noexcept override
{
func();
}
};
@interface RCTTurboModuleTests : XCTestCase
@end
@implementation RCTTurboModuleTests {
std::unique_ptr<ObjCTurboModule> module_;
RCTTestTurboModule *instance_;
}
- (void)setUp
{
[super setUp];
instance_ = OCMClassMock([RCTTestTurboModule class]);
ObjCTurboModule::InitParams params = {
.moduleName = "TestModule",
.instance = instance_,
.jsInvoker = nullptr,
.nativeMethodCallInvoker = std::make_shared<StubNativeMethodCallInvoker>(),
.isSyncModule = false,
.shouldVoidMethodsExecuteSync = true,
};
module_ = std::make_unique<ObjCTurboModule>(params);
}
- (void)tearDown
{
module_ = nullptr;
instance_ = nil;
[super tearDown];
}
- (void)testInvokeTurboModuleWithNull
{
auto hermesRuntime = facebook::hermes::makeHermesRuntime();
facebook::jsi::Runtime *rt = hermesRuntime.get();
// Empty object
facebook::jsi::Value args[1] = {facebook::jsi::Object(*rt)};
module_->invokeObjCMethod(
*rt, VoidKind, "testMethodWhichTakesObject", @selector(testMethodWhichTakesObject:), args, 1);
OCMVerify(OCMTimes(1), [instance_ testMethodWhichTakesObject:@{}]);
// Object with one key
args[0].asObject(*rt).setProperty(*rt, "foo", "bar");
module_->invokeObjCMethod(
*rt, VoidKind, "testMethodWhichTakesObject", @selector(testMethodWhichTakesObject:), args, 1);
OCMVerify(OCMTimes(1), [instance_ testMethodWhichTakesObject:@{@"foo" : @"bar"}]);
// Object with key without value
args[0].asObject(*rt).setProperty(*rt, "foo", facebook::jsi::Value::null());
module_->invokeObjCMethod(
*rt, VoidKind, "testMethodWhichTakesObject", @selector(testMethodWhichTakesObject:), args, 1);
if (ReactNativeFeatureFlags::enableModuleArgumentNSNullConversionIOS()) {
OCMVerify(OCMTimes(1), [instance_ testMethodWhichTakesObject:@{@"foo" : (id)kCFNull}]);
} else {
OCMVerify(OCMTimes(2), [instance_ testMethodWhichTakesObject:@{}]);
}
// Null
args[0] = facebook::jsi::Value::null();
module_->invokeObjCMethod(
*rt, VoidKind, "testMethodWhichTakesObject", @selector(testMethodWhichTakesObject:), args, 1);
OCMVerify(OCMTimes(1), [instance_ testMethodWhichTakesObject:nil]);
}
@end
Выполнить команду
Для локальной разработки. Не используйте в интернете!