mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 04:57:03 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user