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.

This commit is contained in:
cacaodev
2010-10-23 10:25:42 +02:00
parent 6b37bae2c2
commit 3cfbca5a19
2 changed files with 30 additions and 2 deletions
+5 -2
View File
@@ -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;
}
/* ================================ */
+25
View File
@@ -0,0 +1,25 @@
@import <Foundation/Foundation.j>
@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