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