From 3cfbca5a199556ca19f1885db31279f274c7e5ce Mon Sep 17 00:00:00 2001 From: cacaodev Date: Sat, 23 Oct 2010 10:14:26 +0200 Subject: [PATCH] CPScanner: When the scanner did not accumulate any string, do not change (to nil) the object passed as a ref in ...intoSring:ref() methods. With tests. --- Foundation/CPScanner.j | 7 +++++-- Tests/Foundation/CPScannerTest.j | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 Tests/Foundation/CPScannerTest.j diff --git a/Foundation/CPScanner.j b/Foundation/CPScanner.j index b5373f0af..e789c8603 100644 --- a/Foundation/CPScanner.j +++ b/Foundation/CPScanner.j @@ -140,11 +140,14 @@ - (BOOL)_performScanWithSelector:(SEL)s withObject:(id)arg into:(id)ref { var ret = [self performSelector:s withObject:arg]; - + + if (ret == nil) + return NO; + if (ref != nil) ref(ret); - return ret != NULL; + return YES; } /* ================================ */ diff --git a/Tests/Foundation/CPScannerTest.j b/Tests/Foundation/CPScannerTest.j new file mode 100644 index 000000000..8a74ffbdc --- /dev/null +++ b/Tests/Foundation/CPScannerTest.j @@ -0,0 +1,25 @@ +@import + +@implementation CPScannerTest : OJTestCase +{ +} + +- (void)testNothingScanned +{ + var x = @"x", + str = x, + scanner, + result; + + scanner = [CPScanner scannerWithString:@"a"]; + result = [scanner scanString:@"b" intoString:str]; + [self assertFalse:result message:"Result should be FALSE"]; + [self assertTrue:str === x message:"The string passed by reference should not change, is " + str]; + + scanner = [CPScanner scannerWithString:@"a"]; + result = [scanner scanUpToString:@"a" intoString:str]; + [self assertFalse:result message:"Result should be FALSE"]; + [self assertTrue:str === x message:"The string passed by reference should not change, is " + str]; +} + +@end \ No newline at end of file