This is MiscRegexTest.m in view mode; [Download] [Up]
#import <eoaccess/eoaccess.h> #import "NSString+MiscRegex.h" #import <foundation/NSException.h> #import <foundation/NSAutoreleasePool.h> //#import <misckit/regexpr.h> #import "regexpr.h" #import <stdio.h> const char *strFromRange(NSRange range) { NSString *theString; if (range.location == NSNotFound) theString = [NSString stringWithFormat:@"{location = NSNotFound; length = %d}", range.length]; else theString = [NSString stringWithFormat:@"{location = %d; length = %d}", range.location, range.length]; return [theString cString]; } void MyLog(NSString *format, ...) { NSString *theString = nil; va_list args; const char *cString; int length = 0; va_start (args, format); theString = [[NSString alloc] initWithFormat:format arguments:args]; va_end(args); cString = [theString cString]; length = [theString cStringLength]; fwrite(cString, 1, length, stdout); putc('\n', stdout); [theString release]; } void PrintError(NSString *format, ...) { NSString *theString = nil; va_list args; const char *cString; int length = 0; va_start (args, format); theString = [[NSString alloc] initWithFormat:format arguments:args]; va_end(args); cString = [theString cString]; length = [theString cStringLength]; fwrite(cString, 1, length, stdout); putc('\n', stdout); fwrite(cString, 1, length, stderr); putc('\n', stderr); [theString release]; } void main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *testsFile = (argv[1])? [NSString stringWithCString:argv[1]] : @"MiscRegexTest.tests"; NSString *fileString = [[NSString alloc] initWithContentsOfFile:testsFile]; NSArray *strings = [fileString componentsSeparatedByString:@"\n"]; NSEnumerator *stringEnum = [strings objectEnumerator]; NSString *currLine; int num, i; re_set_syntax(RE_NO_BK_VBAR | RE_NO_BK_PARENS | RE_CONTEXT_INDEP_OPS); while ((currLine = [stringEnum nextObject]) && [currLine length]) { NSArray *tokens = [currLine componentsSeparatedByString:@"\t"]; NSString *currRegex = [tokens objectAtIndex:0]; NSString *currString = [tokens objectAtIndex:1]; NSString *expect = [tokens objectAtIndex:2]; NSString *currReplace = [tokens objectAtIndex:3]; NSString *afterReplace = [tokens objectAtIndex:4]; NSString *afterString; BOOL isValid; NSRange foundRange; if ([currRegex isEqual:@"-"]) continue; NS_DURING MyLog(@"String is: \"%@\"", currString); MyLog(@"Regex is: \"%@\"\n", currRegex); isValid = [currRegex isValidRegex]; MyLog(@"Valid regex? %s", isValid? "YES":"NO"); if (!isValid && ![expect isEqual:@"c"]) PrintError(@"ERROR**: regex '%@' supposed to be valid", currRegex); if (isValid && [expect isEqual:@"c"]) PrintError(@"ERROR**: regex should have been illegal"); foundRange = [currString rangeOfRegex:currRegex options:MiscFasterSearch]; MyLog(@"Range of first occurrence: %s", strFromRange(foundRange)); if (foundRange.location == NSNotFound && [expect isEqual:@"y"]) PrintError(@"ERROR**: regex not found but should have been"); if (foundRange.location != NSNotFound && [expect isEqual:@"n"]) PrintError(@"ERROR**: regex found but should not have been"); MyLog(@"Num : %d", num = [currString numOfRegex:currRegex]); MyLog(@"Num nocase : %d", [currString numOfRegex:currRegex options:NSCaseInsensitiveSearch]); for (i=-1; i <= num; i++) { NSRange findRange = [currString rangeOfRegex:currRegex occurrenceNum:i]; MyLog(@" Occurrence %2d: %s", i, strFromRange(findRange)); } for (i=-1; i <=num; i++) { NSRange findRange = [currString rangeOfRegex:currRegex options:NSBackwardsSearch occurrenceNum:i]; MyLog(@"Backwards Occurrence %2d: %s", i, strFromRange(findRange)); } for (i=0; i <=1; i++) { NSRange findRange = [currString rangeOfRegex:currRegex options:NSAnchoredSearch occurrenceNum:i]; MyLog(@"Anchored Occurrence %2d: %s", i, strFromRange(findRange)); } for (i=0; i <=1; i++) { NSRange findRange = [currString rangeOfRegex:currRegex options:NSAnchoredSearch|NSBackwardsSearch occurrenceNum:i]; MyLog(@"Back,Anch Occurrence %2d: %s", i, strFromRange(findRange)); } if (![currReplace isEqual:@"-"] && foundRange.location != NSNotFound) { NSString *substring = [currString substringFromRange:foundRange]; afterString = [substring stringByReplacingRegex:currRegex withString:currReplace options:MiscUseMatchSubstitutions]; if (![afterString isEqual:afterReplace]) PrintError(@"ERROR**: replace didn't work: was '%@', should be '%@'", afterString, afterReplace); } if (![currReplace isEqual:@"-"] && ![currReplace isEqual:@"&"]) { afterString = [currString stringByReplacingEveryOccurrenceOfRegex:currRegex withString:currReplace options:MiscUseMatchSubstitutions]; MyLog(@"After replace all with '%@': '%@'", currReplace, afterString); } afterString = [currString stringByReplacingEveryOccurrenceOfRegex:currRegex withString:@"[&]" options:MiscUseMatchSubstitutions]; MyLog(@"After replace all with '[&]': '%@'", afterString); MyLog(@"Matches for: %@",[currString stringsMatchedByRegex:currRegex]); MyLog(@"Components separated by: %@", [currString componentsSeparatedByRegex:currRegex]); for (i=-1; i <= num; i++) // shows what happens when occurrenceNum: isn't found // for (i=0; i < num; i++) { NSArray *keys = [NSArray arrayWithObjects:MiscBeforePiece, MiscMiddlePiece, MiscAfterPiece, MiscSubstringsPiece,nil]; NSDictionary *dict = [currString grep:currRegex forPieces:keys occurrenceNum:i]; MyLog(@"Occurrence %d",i); MyLog(@" Before: '%@'",[dict objectForKey:MiscBeforePiece]); MyLog(@" Middle: '%@'",[dict objectForKey:MiscMiddlePiece]); MyLog(@" After: '%@'",[dict objectForKey:MiscAfterPiece]); MyLog(@" Subs: %@", [dict objectForKey:MiscSubstringsPiece]); } MyLog(@"----------------------------------------------------------"); NS_HANDLER MyLog(@"%@: %@", [exception exceptionName], [exception exceptionReason]); MyLog(@"----------------------------------------------------------"); NS_ENDHANDLER } [pool release]; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.