mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			277 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			277 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Objective-C
		
	
| //
 | |
| //  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| #import "UtilTest.h"
 | |
| #import "DateUtil.h"
 | |
| #import "TestUtil.h"
 | |
| #import <SignalCoreKit/NSDate+OWS.h>
 | |
| #import <SignalCoreKit/NSObject+OWS.h>
 | |
| #import <SignalServiceKit/NSString+SSK.h>
 | |
| 
 | |
| @interface DateUtil (Test)
 | |
| 
 | |
| + (BOOL)dateIsOlderThanToday:(NSDate *)date now:(NSDate *)now;
 | |
| + (BOOL)dateIsOlderThanOneWeek:(NSDate *)date now:(NSDate *)now;
 | |
| + (BOOL)dateIsToday:(NSDate *)date now:(NSDate *)now;
 | |
| + (BOOL)dateIsThisYear:(NSDate *)date now:(NSDate *)now;
 | |
| + (BOOL)dateIsYesterday:(NSDate *)date now:(NSDate *)now;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @interface NSString (OWS_Test)
 | |
| 
 | |
| - (NSString *)removeAllCharactersIn:(NSCharacterSet *)characterSet;
 | |
| 
 | |
| - (NSString *)filterUnsafeFilenameCharacters;
 | |
| 
 | |
| @end
 | |
| 
 | |
| #pragma mark -
 | |
| 
 | |
| @implementation UtilTest
 | |
| 
 | |
| -(void) testRemoveAllCharactersIn {
 | |
| 
 | |
|     test([[@"" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@""]);
 | |
|     test([[@"1" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@"1"]);
 | |
|     test([[@"a" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@""]);
 | |
|     test([[@"A" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@""]);
 | |
|     test([[@"abc123%^&" removeAllCharactersIn:NSCharacterSet.letterCharacterSet] isEqual:@"123%^&"]);
 | |
| 
 | |
|     test([[@"" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@""]);
 | |
|     test([[@"1" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@""]);
 | |
|     test([[@"a" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@"a"]);
 | |
|     test([[@"A" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@"A"]);
 | |
|     test([[@"abc123%^&" removeAllCharactersIn:NSCharacterSet.decimalDigitCharacterSet] isEqual:@"abc%^&"]);
 | |
| }
 | |
| 
 | |
| -(void) testDigitsOnly {
 | |
|     test([@"".digitsOnly isEqual:@""]);
 | |
|     test([@"1".digitsOnly isEqual:@"1"]);
 | |
|     test([@"a".digitsOnly isEqual:@""]);
 | |
|     test([@"(555) 235-7111".digitsOnly isEqual:@"5552357111"]);
 | |
| }
 | |
| 
 | |
| - (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)testDateComparison
 | |
| {
 | |
|     NSDate *firstDate = [NSDate new];
 | |
| 
 | |
|     NSDate *sameDate = [NSDate dateWithTimeIntervalSinceReferenceDate:firstDate.timeIntervalSinceReferenceDate];
 | |
|     NSDate *laterDate = [NSDate dateWithTimeIntervalSinceReferenceDate:firstDate.timeIntervalSinceReferenceDate + 1.f];
 | |
| 
 | |
|     XCTAssertEqual(firstDate.timeIntervalSinceReferenceDate, sameDate.timeIntervalSinceReferenceDate);
 | |
|     XCTAssertNotEqual(firstDate.timeIntervalSinceReferenceDate, laterDate.timeIntervalSinceReferenceDate);
 | |
|     XCTAssertEqualObjects(firstDate, sameDate);
 | |
|     XCTAssertNotEqualObjects(firstDate, laterDate);
 | |
|     XCTAssertTrue(firstDate.timeIntervalSinceReferenceDate < laterDate.timeIntervalSinceReferenceDate);
 | |
|     XCTAssertFalse([firstDate isBeforeDate:sameDate]);
 | |
|     XCTAssertTrue([firstDate isBeforeDate:laterDate]);
 | |
|     XCTAssertFalse([laterDate isBeforeDate:firstDate]);
 | |
|     XCTAssertFalse([firstDate isAfterDate:sameDate]);
 | |
|     XCTAssertFalse([firstDate isAfterDate:laterDate]);
 | |
|     XCTAssertTrue([laterDate isAfterDate:firstDate]);
 | |
| }
 | |
| 
 | |
| - (void)testDateComparators
 | |
| {
 | |
|     // Use a specific reference date to make this test deterministic,
 | |
|     // and to avoid failing around midnight, new year's, etc.
 | |
|     NSDateComponents *nowDateComponents = [NSDateComponents new];
 | |
|     nowDateComponents.year = 2015;
 | |
|     nowDateComponents.month = 8;
 | |
|     nowDateComponents.day = 31;
 | |
|     nowDateComponents.hour = 8;
 | |
|     NSDate *now = [[NSCalendar currentCalendar] dateFromComponents:nowDateComponents];
 | |
| 
 | |
|     NSDateFormatter *formatter = [NSDateFormatter new];
 | |
|     formatter.dateStyle = NSDateFormatterLongStyle;
 | |
|     formatter.timeStyle = NSDateFormatterLongStyle;
 | |
|     OWSLogInfo(@"now: %@", [formatter stringFromDate:now]);
 | |
| 
 | |
|     NSDate *oneSecondAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kSecondInterval];
 | |
|     NSDate *oneMinuteAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kMinuteInterval];
 | |
|     NSDate *oneDayAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kDayInterval];
 | |
|     NSDate *threeDaysAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kDayInterval * 3];
 | |
|     NSDate *tenDaysAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kDayInterval * 10];
 | |
|     NSDate *oneYearAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kYearInterval];
 | |
|     NSDate *twoYearsAgo =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] - kYearInterval * 2];
 | |
| 
 | |
|     NSDate *oneSecondAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kSecondInterval];
 | |
|     NSDate *oneMinuteAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kMinuteInterval];
 | |
|     NSDate *oneDayAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kDayInterval];
 | |
|     NSDate *threeDaysAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kDayInterval * 3];
 | |
|     NSDate *tenDaysAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kDayInterval * 10];
 | |
|     NSDate *oneYearAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kYearInterval];
 | |
|     NSDate *twoYearsAhead =
 | |
|         [NSDate dateWithTimeIntervalSinceReferenceDate:[now timeIntervalSinceReferenceDate] + kYearInterval * 2];
 | |
| 
 | |
|     OWSLogInfo(@"oneSecondAgo: %@", [formatter stringFromDate:oneSecondAgo]);
 | |
| 
 | |
|     XCTAssertTrue([DateUtil dateIsToday:oneSecondAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsToday:oneMinuteAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:oneDayAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:threeDaysAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:tenDaysAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:oneYearAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:twoYearsAgo now:now]);
 | |
| 
 | |
|     XCTAssertTrue([DateUtil dateIsToday:oneSecondAhead now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsToday:oneMinuteAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:oneDayAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:threeDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:tenDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:oneYearAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsToday:twoYearsAhead now:now]);
 | |
| 
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneSecondAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneMinuteAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsYesterday:oneDayAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:threeDaysAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:tenDaysAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneYearAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:twoYearsAgo now:now]);
 | |
| 
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneSecondAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneMinuteAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneDayAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:threeDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:tenDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:oneYearAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:twoYearsAhead now:now]);
 | |
| 
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:oneSecondAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:oneMinuteAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:oneDayAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:threeDaysAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:tenDaysAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:oneYearAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:twoYearsAgo now:now]);
 | |
| 
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:oneSecondAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:oneMinuteAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:oneDayAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:threeDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:tenDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:oneYearAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:twoYearsAhead now:now]);
 | |
| 
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneSecondAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneMinuteAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneDayAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:threeDaysAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:tenDaysAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:oneYearAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanOneWeek:twoYearsAgo now:now]);
 | |
| 
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneSecondAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneMinuteAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneDayAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:threeDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:tenDaysAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:oneYearAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:twoYearsAhead now:now]);
 | |
| 
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:oneSecondAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:oneMinuteAgo now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:oneDayAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsThisYear:oneYearAgo now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsThisYear:twoYearsAgo now:now]);
 | |
| 
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:oneSecondAhead now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:oneMinuteAhead now:now]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:oneDayAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsThisYear:oneYearAhead now:now]);
 | |
|     XCTAssertFalse([DateUtil dateIsThisYear:twoYearsAhead now:now]);
 | |
| }
 | |
| 
 | |
| - (NSDate *)dateWithYear:(NSInteger)year
 | |
|                    month:(NSInteger)month
 | |
|                      day:(NSInteger)day
 | |
|                     hour:(NSInteger)hour
 | |
|                   minute:(NSInteger)minute
 | |
| {
 | |
|     NSDateComponents *components = [NSDateComponents new];
 | |
|     components.year = year;
 | |
|     components.month = month;
 | |
|     components.day = day;
 | |
|     components.hour = hour;
 | |
|     components.minute = minute;
 | |
|     return [[NSCalendar currentCalendar] dateFromComponents:components];
 | |
| }
 | |
| 
 | |
| - (void)testDateComparators_timezoneVMidnight
 | |
| {
 | |
|     NSDateFormatter *formatter = [NSDateFormatter new];
 | |
|     formatter.dateStyle = NSDateFormatterLongStyle;
 | |
|     formatter.timeStyle = NSDateFormatterLongStyle;
 | |
| 
 | |
|     NSDate *yesterdayBeforeMidnight = [self dateWithYear:2015 month:8 day:10 hour:23 minute:55];
 | |
|     OWSLogInfo(@"yesterdayBeforeMidnight: %@", [formatter stringFromDate:yesterdayBeforeMidnight]);
 | |
| 
 | |
|     NSDate *todayAfterMidnight = [self dateWithYear:2015 month:8 day:11 hour:0 minute:5];
 | |
|     OWSLogInfo(@"todayAfterMidnight: %@", [formatter stringFromDate:todayAfterMidnight]);
 | |
| 
 | |
|     NSDate *todayNoon = [self dateWithYear:2015 month:8 day:11 hour:12 minute:0];
 | |
|     OWSLogInfo(@"todayNoon: %@", [formatter stringFromDate:todayNoon]);
 | |
| 
 | |
|     // Before Midnight, after Midnight.
 | |
|     XCTAssertFalse([DateUtil dateIsToday:yesterdayBeforeMidnight now:todayAfterMidnight]);
 | |
|     XCTAssertTrue([DateUtil dateIsYesterday:yesterdayBeforeMidnight now:todayAfterMidnight]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:yesterdayBeforeMidnight now:todayAfterMidnight]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:yesterdayBeforeMidnight now:todayAfterMidnight]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:yesterdayBeforeMidnight now:todayAfterMidnight]);
 | |
| 
 | |
|     // Before Midnight, noon.
 | |
|     XCTAssertFalse([DateUtil dateIsToday:yesterdayBeforeMidnight now:todayNoon]);
 | |
|     XCTAssertTrue([DateUtil dateIsYesterday:yesterdayBeforeMidnight now:todayNoon]);
 | |
|     XCTAssertTrue([DateUtil dateIsOlderThanToday:yesterdayBeforeMidnight now:todayNoon]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:yesterdayBeforeMidnight now:todayNoon]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:yesterdayBeforeMidnight now:todayNoon]);
 | |
| 
 | |
|     // After Midnight, noon.
 | |
|     XCTAssertTrue([DateUtil dateIsToday:todayAfterMidnight now:todayNoon]);
 | |
|     XCTAssertFalse([DateUtil dateIsYesterday:todayAfterMidnight now:todayNoon]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanToday:todayAfterMidnight now:todayNoon]);
 | |
|     XCTAssertFalse([DateUtil dateIsOlderThanOneWeek:todayAfterMidnight now:todayNoon]);
 | |
|     XCTAssertTrue([DateUtil dateIsThisYear:todayAfterMidnight now:todayNoon]);
 | |
| }
 | |
| 
 | |
| - (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
 |