react-native-macos/RNTester/RNTesterUnitTests/RCTUtilsTests.m

64 строки
2.1 KiB
Objective-C

/*
* Copyright (c) Facebook, Inc. and its 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 <React/RCTLog.h>
#import <React/RCTUtils.h>
static NSString * RCTLogsError(void (^block)(void))
{
__block NSString* loggedMessage = @"";
__block BOOL loggedError = NO;
RCTPerformBlockWithLogFunction(block, ^(RCTLogLevel level,
__unused RCTLogSource source,
__unused NSString *fileName,
__unused NSNumber *lineNumber,
NSString *message) {
loggedError = (level == RCTLogLevelError);
loggedMessage = message;
});
if (loggedError) {
return loggedMessage;
}
return nil;
}
@interface RCTUtilsTests : XCTestCase
@end
@implementation RCTUtilsTests
- (void)testRCTHumanReadableType
{
XCTAssertEqualObjects(RCTHumanReadableType(@"str"), @"string");
XCTAssertEqualObjects(RCTHumanReadableType([NSNumber numberWithInt:4]), @"number");
// If we could detect that this was definitely a boolean and not a number that would be ideal
// That seems difficult in ObjC though
XCTAssertEqualObjects(RCTHumanReadableType(@(YES)), @"boolean or number");
XCTAssertEqualObjects(RCTHumanReadableType(@(NO)), @"boolean or number");
// These ideally would just say number
XCTAssertEqualObjects(RCTHumanReadableType([NSNumber numberWithInt:0]), @"boolean or number");
XCTAssertEqualObjects(RCTHumanReadableType([NSNumber numberWithInt:1]), @"boolean or number");
}
- (void)testRCTValidateTypeOfViewCommandArgument
{
XCTAssertEqualObjects(RCTLogsError(^{
RCTValidateTypeOfViewCommandArgument(@"str", [NSNumber class], @"number", @"ScrollView", @"scrollTo", @"2nd");
}), @"ScrollView command scrollTo received 2nd argument of type string, expected number.");
XCTAssertEqualObjects(RCTLogsError(^{
RCTValidateTypeOfViewCommandArgument(@"str", [NSString class], @"string", @"ScrollView", @"scrollTo", @"1st");
}), nil);
}
@end