/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * */ #import #import static NSString *const niqqudStringB64 = @"15HWsNa816jWtdeQ16nWtNeB15nXqiwg15HWuNa816jWuNeQINeQ1rHXnNa515TWtNeZ150sINeQ1rXXqiDXlNa316nWuNa814HXnta315nWtNedLCDXldaw15DWtdeqINeU1rjXkNa416jWttelLg=="; @interface RCTNetworking () + (NSString *)decodeTextData:(NSData *)data fromResponse:(NSURLResponse *)response withCarryData:(NSMutableData *)inputCarryData; @end @interface RCTUnicodeDecodeTests : XCTestCase @end @implementation RCTUnicodeDecodeTests - (void)runTestForString:(NSString *)unicodeString usingEncoding:(NSString *)encodingName cutAt:(NSUInteger)cutPoint { CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding((CFStringRef)encodingName); NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); NSData *unicodeBytes = [unicodeString dataUsingEncoding:encoding]; NSURLResponse *fakeResponse = [[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:@"testurl://"] statusCode:200 HTTPVersion:@"1.1" headerFields:@{@"content-type": [NSString stringWithFormat:@"text/plain; charset=%@", encodingName]}]; XCTAssert([fakeResponse.textEncodingName isEqualToString:encodingName]); NSMutableData *carryStorage = [NSMutableData new]; NSMutableString *parsedString = [NSMutableString new]; [parsedString appendString:[RCTNetworking decodeTextData:[unicodeBytes subdataWithRange:NSMakeRange(0, cutPoint)] fromResponse:fakeResponse withCarryData:carryStorage] ?: @""]; [parsedString appendString:[RCTNetworking decodeTextData:[unicodeBytes subdataWithRange:NSMakeRange(cutPoint, unicodeBytes.length - cutPoint)] fromResponse:fakeResponse withCarryData:carryStorage] ?: @""]; XCTAssert(carryStorage.length == 0); XCTAssert([parsedString isEqualToString:unicodeString]); } - (void)testNiqqud { NSString *unicodeString = [[NSString alloc] initWithData:[[NSData alloc] initWithBase64EncodedString:niqqudStringB64 options:(NSDataBase64DecodingOptions)0] encoding:NSUTF8StringEncoding]; [self runTestForString:unicodeString usingEncoding:@"utf-8" cutAt:25]; } - (void)testEmojis { NSString *unicodeString = @"\U0001F602\U0001F602"; [self runTestForString:unicodeString usingEncoding:@"utf-8" cutAt:7]; } @end