Signal-iOS/Signal/test/util/UtilTest.m
2023-05-30 09:37:36 -07:00

100 lines
4.4 KiB
Objective-C

//
// Copyright 2014 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
#import "UtilTest.h"
#import <SignalCoreKit/NSDate+OWS.h>
#import <SignalCoreKit/NSObject+OWS.h>
#import <SignalCoreKit/NSString+OWS.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
#pragma mark -
@interface NSString (OWS_Test)
- (NSString *)removeAllCharactersIn:(NSCharacterSet *)characterSet;
- (NSString *)filterUnsafeFilenameCharacters;
@end
#pragma mark -
@implementation UtilTest
- (void)testRemoveAllCharactersIn
{
XCTAssert([[@"" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@""]);
XCTAssert([[@"1" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@"1"]);
XCTAssert([[@"a" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@""]);
XCTAssert([[@"A" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@""]);
XCTAssert([[@"abc123%^&" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@"123%^&"]);
XCTAssert([[@"" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@""]);
XCTAssert([[@"1" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@""]);
XCTAssert([[@"a" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@"a"]);
XCTAssert([[@"A" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@"A"]);
XCTAssert([[@"abc123%^&" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@"abc%^&"]);
}
- (void)testEnsureArabicNumerals
{
NSArray<NSString *> *zeroToNineTests = @[
@"০১২৩৪৫৬৭৮৯", // Bengali
@"၀၁၂၃၄၅၆၇၈၉", // Burmese
@"〇一二三四五六七八九", // Chinese (Simplified), Japanese
@"零一二三四五六七八九", // Chinese (Traditional)
@"०१२३४५६७८९", // Devanagari (Sanskrit, Hindi, and other Indian languages)
@"٠١٢٣٤٥٦٧٨٩", // Eastern Arabic
@"૦૧૨૩૪૫૬૭૮૯", // Gujarati
@"੦੧੨੩੪੫੬੭੮੯", // Gurmukhi (Punjabi)
@"೦೧೨೩೪೫೬೭೮೯", // Kannada
@"൦൧൨൩൪൫൬൭൮൯", // Malayalam
@"୦୧୨୩୪୫୬୭୮୯", // Odia
@"۰۱۲۳۴۵۶۷۸۹", // Persian, Urdu
@"௦௧௨௩௪௫௬௭௮௯", // Tamil
@"౦౧౨౩౪౫౬౭౮౯", // Telugu
@"๐๑๒๓๔๕๖๗๘๙", // Thai
@"0123456789", // Western arabic
];
for (NSString *zeroToNineTest in zeroToNineTests) {
XCTAssert([zeroToNineTest.ensureArabicNumerals isEqualToString:@"0123456789"]);
}
// In mixed strings, only replaces the numerals.
XCTAssert([@"نمرا ١٢٣٤٥ يا".ensureArabicNumerals isEqualToString:@"نمرا 12345 يا"]);
// Appropriately handles characters that extend across multiple unicode scalars
XCTAssert([@"123 👩🏻‍🔬🧛🏿‍♀️🤦🏽‍♀️🏳️‍🌈 ١٢٣".ensureArabicNumerals
isEqualToString:@"123 👩🏻‍🔬🧛🏿‍♀️🤦🏽‍♀️🏳️‍🌈 123"]);
// In strings without numerals, does nothing.
XCTAssert([@"a".ensureArabicNumerals isEqualToString:@"a"]);
XCTAssert([@"".ensureArabicNumerals isEqualToString:@""]);
}
- (void)testfilterUnsafeFilenameCharacters
{
XCTAssertEqualObjects(@"1".filterUnsafeFilenameCharacters, @"1");
XCTAssertEqualObjects(@"alice\u202Dbob".filterUnsafeFilenameCharacters, @"alice\uFFFDbob");
XCTAssertEqualObjects(@"\u202Dalicebob".filterUnsafeFilenameCharacters, @"\uFFFDalicebob");
XCTAssertEqualObjects(@"alicebob\u202D".filterUnsafeFilenameCharacters, @"alicebob\uFFFD");
XCTAssertEqualObjects(@"alice\u202Ebob".filterUnsafeFilenameCharacters, @"alice\uFFFDbob");
XCTAssertEqualObjects(@"\u202Ealicebob".filterUnsafeFilenameCharacters, @"\uFFFDalicebob");
XCTAssertEqualObjects(@"alicebob\u202E".filterUnsafeFilenameCharacters, @"alicebob\uFFFD");
XCTAssertEqualObjects(@"alice\u202Dbobalice\u202Ebob".filterUnsafeFilenameCharacters, @"alice\uFFFDbobalice\uFFFDbob");
}
- (void)testObjectComparison
{
XCTAssertTrue([NSObject isNullableObject:nil equalTo:nil]);
XCTAssertFalse([NSObject isNullableObject:@(YES) equalTo:nil]);
XCTAssertFalse([NSObject isNullableObject:nil equalTo:@(YES)]);
XCTAssertFalse([NSObject isNullableObject:@(YES) equalTo:@(NO)]);
XCTAssertTrue([NSObject isNullableObject:@(YES) equalTo:@(YES)]);
}
@end