A number of set and array fixes and added tests for unordered accessor pattern in key value coding.

Reviewed by me.
This commit is contained in:
Francisco Ryan Tolmasky I
2010-12-25 02:18:02 -08:00
parent 232f1d008d
commit 9b75e37e1f
4 changed files with 97 additions and 6 deletions
+2 -5
View File
@@ -814,10 +814,7 @@ CPEnumerationReverse = 1 << 1;
*/
- (CPArray)arrayByAddingObject:(id)anObject
{
var array = [self copy];
array.push(anObject);
return array;
return self.concat(anObject);
}
/*!
@@ -826,7 +823,7 @@ CPEnumerationReverse = 1 << 1;
*/
- (CPArray)arrayByAddingObjectsFromArray:(CPArray)anArray
{
return slice(0).concat(anArray);
return self.concat(anArray);
}
/*
+7 -1
View File
@@ -356,6 +356,12 @@ var CPObjectAccessorsForClassKey = @"$CPObjectAccessorsForClassKey",
SEL _memberOfSelector;
}
// This allows things like setByAddingObject: to work (since they use [[self class] alloc] internally).
- (id)initWithObjects:(CPArray)objects count:(CPUInteger)aCount
{
return [[CPSet alloc] initWithObjects:objects count:aCount];
}
- (id)initWithTarget:(id)aTarget key:(CPString)aKey
{
self = [super initWithObjects:nil count:0];
@@ -368,7 +374,7 @@ var CPObjectAccessorsForClassKey = @"$CPObjectAccessorsForClassKey",
_countOfSelector = CPSelectorFromString("countOf" + capitalizedKey);
_enumeratorOfSelector = CPSelectorFromString("enumeratorOf" + capitalizedKey);
_memberOfSelector = CPSelectorFromString("memberOf" + capitalizedKey);
_memberOfSelector = CPSelectorFromString("memberOf" + capitalizedKey + ":");
}
return self;
+15
View File
@@ -102,6 +102,21 @@
return [[self alloc] initWithSet:set];
}
- (id)setByAddingObject:(id)anObject
{
return [[self class] setWithArray:[[self allObjects] arrayByAddingObject:anObject]];
}
- (id)setByAddingObjectsFromSet:(CPSet)aSet
{
return [self setByAddingObjectsFromArray:[aSet allObjects]];
}
- (id)setByAddingObjectsFromArray:(CPArray)anArray
{
return [[self class] setWithArray:[[self allObjects] arrayByAddingObjectsFromArray:anArray]];
}
/*
Basic initializer, returns an empty set
*/
+73
View File
@@ -612,3 +612,76 @@ var accessIVARS = YES;
}
@end
@implementation UnorderedAccessorClass : CPObject
{
}
- (id)memberOfObjects:(id)anObject
{
if ([[0, 1, 3, 5, 7] indexOfObjectIdenticalTo:anObject] !== CPNotFound)
return anObject;
return nil;
}
- (CPEnumerator)enumeratorOfObjects
{
return [[0, 1, 3, 5, 7] objectEnumerator];
}
- (CPUInteger)countOfObjects
{
return 5;
}
@end
@implementation CPKeyValueCodingTest (UnorderedAccessorPattern)
- (void)testUnorderedAccessorPattern
{
var object = [UnorderedAccessorClass new],
set = [object valueForKey:@"objects"];
[self assert:set equals:[CPSet setWithObjects:0, 1, 3, 5, 7]];
[self assertTrue:[set containsObject:0]];
[self assertTrue:[set containsObject:1]];
[self assertTrue:[set containsObject:3]];
[self assertTrue:[set containsObject:5]];
[self assertTrue:[set containsObject:7]];
[self assertFalse:[set containsObject:2]];
[self assertFalse:[set containsObject:4]];
[self assertFalse:[set containsObject:6]];
[self assertFalse:[set containsObject:8]];
[self assertFalse:[set containsObject:10]];
[self assert:[set setByAddingObjectsFromArray:[2, 3, 4, 5, 6]]
equals:[CPSet setWithObjects:0, 1, 2, 3, 4, 5, 6, 7]];
}
- (void)testObjectsAtIndexes_
{
var object = [ObjectsAtIndexesClass new],
array = [object valueForKey:@"objects"];
[self assert:5 equals:[array count]];
[self assert:@"one" equals:[array objectAtIndex:0]];
[self assert:@"two" equals:[array objectAtIndex:1]];
[self assert:@"three" equals:[array objectAtIndex:2]];
[self assert:@"four" equals:[array objectAtIndex:3]];
[self assert:@"five" equals:[array objectAtIndex:4]];
var indexes = [CPIndexSet indexSet];
[indexes addIndex:1];
[indexes addIndex:3];
[self assert:[@"two", @"four"] equals:[array objectsAtIndexes:indexes]];
}
@end