blob: 2a7bab9db0b0314ac7b4faef5c06297eceb53d85 [file] [log] [blame] [edit]
/*
* Copyright 2012 ZXing authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#import "ZXCalendarParsedResultTestCase.h"
@implementation ZXCalendarParsedResultTestCase
static double EPSILON = 0.0000000001;
static NSDateFormatter *DATE_TIME_FORMAT = nil;
+ (void)initialize {
DATE_TIME_FORMAT = [[NSDateFormatter alloc] init];
DATE_TIME_FORMAT.dateFormat = @"yyyyMMdd'T'HHmmss'Z'";
}
- (void)testStartEnd {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"DTEND:20080505T234555Z\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:@"20080505T234555Z"];
}
- (void)testNoVCalendar {
[self doTestWithContents:@"BEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"DTEND:20080505T234555Z\r\n"
@"END:VEVENT"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:@"20080505T234555Z"];
}
- (void)testStart {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:nil];
}
- (void)testDuration {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"DURATION:P1D\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:@"20080505T123456Z"];
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"DURATION:P1DT2H3M4S\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:@"20080505T143800Z"];
}
- (void)testSummary {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"SUMMARY:foo\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:@"foo"
location:nil
startString:@"20080504T123456Z"
endString:nil];
}
- (void)testLocation {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"LOCATION:Miami\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:@"Miami"
startString:@"20080504T123456Z"
endString:nil];
}
- (void)testDescription {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"DESCRIPTION:This is a test\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:@"This is a test"
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:nil];
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"DESCRIPTION:This is a test\r\n\t with a continuation\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:@"This is a test with a continuation"
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:nil];
}
- (void)testGeo {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"GEO:-12.345;-45.678\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:nil
organizer:nil
attendees:nil
latitude:-12.345
longitude:-45.678];
}
- (void)testOrganizer {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"ORGANIZER:mailto:bob@example.org\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:nil
organizer:@"bob@example.org"
attendees:nil
latitude:NAN
longitude:NAN];
}
- (void)testAttendees {
[self doTestWithContents:@"BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\n"
@"DTSTART:20080504T123456Z\r\n"
@"ATTENDEE:mailto:bob@example.org\r\n"
@"ATTENDEE:mailto:alice@example.org\r\n"
@"END:VEVENT\r\nEND:VCALENDAR"
description:nil
summary:nil
location:nil
startString:@"20080504T123456Z"
endString:nil
organizer:nil
attendees:@[@"bob@example.org", @"alice@example.org"]
latitude:NAN
longitude:NAN];
}
- (void)testVEventEscapes {
[self doTestWithContents:@"BEGIN:VEVENT\n"
@"CREATED:20111109T110351Z\n"
@"LAST-MODIFIED:20111109T170034Z\n"
@"DTSTAMP:20111109T170034Z\n"
@"UID:0f6d14ef-6cb7-4484-9080-61447ccdf9c2\n"
@"SUMMARY:Summary line\n"
@"CATEGORIES:Private\n"
@"DTSTART;TZID=Europe/Vienna:20111110T110000\n"
@"DTEND;TZID=Europe/Vienna:20111110T120000\n"
@"LOCATION:Location\\, with\\, escaped\\, commas\n"
@"DESCRIPTION:Meeting with a friend\\nlook at homepage first\\n\\n\n"
@" \\n\n"
@"SEQUENCE:1\n"
@"X-MOZ-GENERATION:1\n"
@"END:VEVENT"
description:@"Meeting with a friend\nlook at homepage first\n\n\n \n"
summary:@"Summary line"
location:@"Location, with, escaped, commas"
startString:@"20111110T110000Z"
endString:@"20111110T120000Z"];
}
- (void)testAllDayValueDate {
[self doTestWithContents:@"BEGIN:VEVENT\n"
@"DTSTART;VALUE=DATE:20111110\n"
@"DTEND;VALUE=DATE:20111110\n"
@"END:VEVENT"
description:nil
summary:nil
location:nil
startString:@"20111110T000000Z"
endString:@"20111110T000000Z"];
}
- (void)doTestWithContents:(NSString *)contents
description:(NSString *)description
summary:(NSString *)summary
location:(NSString *)location
startString:(NSString *)startString
endString:(NSString *)endString {
[self doTestWithContents:contents
description:description
summary:summary
location:location
startString:startString
endString:endString
organizer:nil
attendees:nil
latitude:NAN
longitude:NAN];
}
- (void)doTestWithContents:(NSString *)contents
description:(NSString *)description
summary:(NSString *)summary
location:(NSString *)location
startString:(NSString *)startString
endString:(NSString *)endString
organizer:(NSString *)organizer
attendees:(NSArray *)attendees
latitude:(double)latitude
longitude:(double)longitude {
ZXResult *fakeResult = [ZXResult resultWithText:contents rawBytes:NULL length:0 resultPoints:nil format:kBarcodeFormatQRCode];
ZXParsedResult *result = [ZXResultParser parseResult:fakeResult];
STAssertEquals(result.type, kParsedResultTypeCalendar, @"Types do not match");
ZXCalendarParsedResult *calResult = (ZXCalendarParsedResult *)result;
STAssertEqualObjects(calResult.description, description, @"Descriptions do not match");
STAssertEqualObjects(calResult.summary, summary, @"Summaries do not match");
STAssertEqualObjects(calResult.location, location, @"Locations do not match");
STAssertEqualObjects([DATE_TIME_FORMAT stringFromDate:calResult.start], startString, @"Starts do not match");
STAssertEqualObjects([DATE_TIME_FORMAT stringFromDate:calResult.end], endString, @"Ends do not match");
STAssertEqualObjects(organizer, calResult.organizer, @"Organizers do not match");
STAssertEqualObjects(attendees, calResult.attendees, @"Attendees do not match");
[self assertEqualOrNAN:latitude actual:calResult.latitude];
[self assertEqualOrNAN:longitude actual:calResult.longitude];
}
- (void)assertEqualOrNAN:(double)expected actual:(double)actual {
if (isnan(expected)) {
STAssertTrue(isnan(actual), @"Expected %f to be NAN", actual);
} else {
STAssertEqualsWithAccuracy(actual, expected, EPSILON, @"Expected %f to equal %f", actual, expected);
}
}
@end