// // TestParser.m // ICeCoffEE // // Created by Nicholas Riley on 6/22/07. // Copyright 2007 Nicholas Riley. All rights reserved. // #import #import "ICeCoffEEParser.h" #include NSString *ICCF_ErrString(OSStatus err, NSString *context) { return [NSString stringWithFormat: @"%@ (%d)", context, (int)err]; } void ICCF_CheckRange(NSRange range) {} void ps(NSString *format, ...) { va_list args; va_start(args, format); NSString *s = [[NSString alloc] initWithFormat: format arguments: args]; va_end(args); printf("%s\n", [s cString]); [s release]; } void pr(NSString *s, NSRange r) { ps([[NSString alloc] initWithFormat: @"%@%@>%@<", s, [@"" stringByPaddingToLength: r.location withString: @" " startingAtIndex: 0], [@"" stringByPaddingToLength: r.length withString: @"-" startingAtIndex: 0]]); } CFBundleRef ICCF_bundle = NULL; int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSArray *a = [NSArray arrayWithContentsOfFile: @"urls.plist"]; NSCAssert(a != nil, @"Can't get array from urls.plist (wrong cwd? invalid format?)"); ICCF_StartIC(); unsigned pass = 0, fail = 0; NSEnumerator *e = [a objectEnumerator]; NSDictionary *d; while ( (d = [e nextObject]) != nil) { ps(@""); NSString *uri = [d objectForKey: @"uri"]; NSString *text = [d objectForKey: @"text"]; NSCAssert1(uri != nil, @"No URI in test case description %@", d); NSRange delimitedURIRange; if (text != nil) { NSArray *bits = [text componentsSeparatedByString: @"|"]; NSCAssert1([bits count] == 3, @"Sample text is not of the form 'foo|bar|baz': %@", text); text = [bits componentsJoinedByString: @""]; delimitedURIRange.location = [(NSString *)[bits objectAtIndex: 0] length]; delimitedURIRange.length = [(NSString *)[bits objectAtIndex: 1] length]; } else { text = uri; delimitedURIRange.location = 0; delimitedURIRange.length = [uri length]; } for (unsigned startOffset = 0 ; startOffset < delimitedURIRange.length ; ++startOffset) { NSRange initialSelectionRange = { delimitedURIRange.location + startOffset, delimitedURIRange.length != 0 }; // XXX figure XFAIL-type error checking NSRange enclosingRange; NSString *parsedURI = nil; NSException *parseException = nil; @try { enclosingRange = ICCF_URLEnclosingRange(text, delimitedURIRange); parsedURI = [text substringWithRange: enclosingRange]; } @catch (NSException *e) { parseException = e; } if ([uri isEqualToString: parsedURI]) { ++pass; continue; } ps(@"Text %@", text); pr(@"Available ", delimitedURIRange); pr(@"Starting ", initialSelectionRange); if (parseException != nil) { ps(@"Exception %@", parseException); } else { pr(@"Parsed ", enclosingRange); ps(@"Parsed %@", parsedURI); ps(@"Desired %@", uri); } ++fail; goto summary; } } summary: ps(@"PASS %d FAIL %d", pass, fail); ICCF_StopIC(); [pool release]; }