diff --git a/Foundation/CPDateFormatter.j b/Foundation/CPDateFormatter.j index fefb3ebbe..a2131debc 100644 --- a/Foundation/CPDateFormatter.j +++ b/Foundation/CPDateFormatter.j @@ -1104,9 +1104,6 @@ var defaultDateFormatterBehavior = CPDateFormatterBehavior10_4, */ - (CPDate)dateFromString:(CPString)aString { - if (aString == nil) - return nil; - var format; if (_dateFormat != nil) @@ -1224,7 +1221,11 @@ var defaultDateFormatterBehavior = CPDateFormatterBehavior10_4, */ - (CPDate)_dateFromString:(CPString)aString format:(CPString)aFormat { - if (aString == nil || aFormat == nil) + // Interpret @"" as the date 2000-01-01 00:00:00 +0000, like in Cocoa. No idea why they picked this particular date. + if (!aString) + return [[CPDate alloc] initWithTimeIntervalSinceReferenceDate:-31622400]; + + if (aFormat == nil) return nil; var currentToken = [CPString new], diff --git a/Tests/Foundation/CPDateFormatterTest.j b/Tests/Foundation/CPDateFormatterTest.j index ee67f76b4..a1a2432ce 100644 --- a/Tests/Foundation/CPDateFormatterTest.j +++ b/Tests/Foundation/CPDateFormatterTest.j @@ -450,7 +450,7 @@ [_dateFormatter setDateFormat:@""]; var result = [_dateFormatter dateFromString:@""]; - [self assert:[result isEqualToDate:[[CPDate alloc] initWithString:@"2000-01-01 08:00:00 +0000"]] equals:YES]; + [self assert:[result isEqualToDate:[[CPDate alloc] initWithString:@"2000-01-01 00:00:00 +0000"]] equals:YES]; } - (void)testDateFromStringTokeny @@ -1180,6 +1180,19 @@ [self assertTrue:date === nil]; } +- (void)testGetObjectValueForEmptyStringReturnsReferenceDate +{ + [_dateFormatter setDateFormat:@"d mm"]; + + var date = nil, + error = @"", + result = [_dateFormatter getObjectValue:@ref(date) forString:@"" errorDescription:@ref(error)]; + + [self assertTrue:result]; + [self assert:[[CPDate alloc] initWithString:@"2000-01-01 00:00:00 +0000"] equals:date]; + [self assert:error equals:@""]; +} + - (void)testGetObjectValueReturnYes { [_dateFormatter setDateFormat:@"d mm"];