Files
cappuccino/Tests/Foundation/CPSetTest.j
T
Francisco Ryan Tolmasky I 3947bd65f2 Reimplementation of CPSet as a class-cluster, and better set support for valueForKey:
1. CPSet and CPMutableSet are now abstract super classes that create appropriate concrete subclasses behind the scenes.
2. CPSet subclassers need only implement -count, -member:, and -objectEnumerator.
3. CPMutableSet subclassers need only implement -count, -member:, -objectEnumerator:, -addObject:, and removeObject:.
4. Added more CPSet tests.
5. Added _CPKeyValueCodingSet which subclasses CPSet for set returns in valueForKey:.

Reviewed by me.
2010-12-25 01:01:19 -08:00

211 lines
8.4 KiB
Plaintext

@import <Foundation/CPSet.j>
@implementation CPSetTest : OJTestCase
{
CPSet set;
}
- (void)assertSet:(CPSet)aSet onlyHasObjects:(CPArray)objects
{
[self assert:[objects count] equals:[aSet count]];
var allObjects = [aSet allObjects],
index = 0,
count = [objects count];
[self assert:[objects count] equals:[allObjects count]];
for (; index < count; ++index)
{
var object = objects[index];
if ([allObjects indexOfObjectIdenticalTo:object] === CPNotFound)
return [self fail:@"Set does not contain " + object];
}
}
- (void)testEmptySet
{
var set = [CPSet set];
[self assert:@"{(\n)}" equals:[set description]];
[self assert:0 equals:[set count]];
[self assert:[] equals:[set allObjects]];
[self assert:nil equals:[set anyObject]];
[self assert:NO equals:[set containsObject:RAND()]];
[self assert:nil equals:[set member:RAND()]];
var object,
objectEnumerator = [set objectEnumerator];
while ((object = [objectEnumerator nextObject]) !== nil)
[self fail:@"Empty set had non-empty enumerator"];
[self assertTrue:[set isSubsetOfSet:set]];
[self assertTrue:[set isSubsetOfSet:[CPSet set]]];
// Empty set intersects nothing!
[self assertFalse:[set intersectsSet:set]];
[self assertFalse:[set intersectsSet:[CPSet set]]];
[self assertTrue:[set isEqualToSet:set]];
[self assertTrue:[set isEqualToSet:[CPSet set]]];
var copy = [set copy];
[self assert:@"{(\n)}" equals:[copy description]];
[self assertTrue:[set isEqualToSet:copy]];
}
- (void)testSetWithArray_
{
[self assertSet:[CPSet setWithArray:[]] onlyHasObjects:[]];
[self assertSet:[CPSet setWithArray:[@"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithArray:[@"a", @"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithArray:[@"a", @"a", @"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithArray:[@"a", @"b"]] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithArray:[@"a", @"b", @"a"]] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithArray:[@"a", @"b", @"a", 0]] onlyHasObjects:[@"a", @"b", 0]];
}
- (void)testSetWithObject
{
[self assertSet:[CPSet setWithObject:nil] onlyHasObjects:[]];
[self assertSet:[CPSet setWithObject:undefined] onlyHasObjects:[]];
[self assertSet:[CPSet setWithObject:0] onlyHasObjects:[0]];
[self assertSet:[CPSet setWithObject:@"a"] onlyHasObjects:[@"a"]];
}
- (void)testSetWithObjects_count_
{
[self assertSet:[CPSet setWithObjects:[] count:0] onlyHasObjects:[]];
[self assertSet:[CPSet setWithObjects:[@"a"] count:1] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"a"] count:2] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"a", @"a"] count:3] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"b"] count:2] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"b", @"a"] count:3] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"b", @"a", 0] count:4] onlyHasObjects:[@"a", @"b", 0]];
[self assertSet:[CPSet setWithObjects:[@"a", nil, undefined, 0] count:4] onlyHasObjects:[@"a", 0]];
[self assertSet:[CPSet setWithObjects:[] count:4] onlyHasObjects:[]];
[self assertSet:[CPSet setWithObjects:[@"a"] count:2] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"a"] count:0] onlyHasObjects:[]];
[self assertSet:[CPSet setWithObjects:[@"a", @"a", @"a"] count:1] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"b"] count:1] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"b", @"a"] count:2] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:[@"a", @"b", @"a", 0] count:10] onlyHasObjects:[@"a", @"b", 0]];
[self assertSet:[CPSet setWithObjects:[@"a", nil, undefined, 0] count:3] onlyHasObjects:[@"a"]];
}
- (void)testSetWithObjects_count_
{
[self assertSet:[CPSet setWithObjects:nil] onlyHasObjects:[]];
[self assertSet:[CPSet setWithObjects:@"a"] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", nil] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", @"a"] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", nil, @"a"] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", @"a", @"a"] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", @"a", @"a"] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", @"b"] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:@"a", @"b", nil] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:@"a", nil, @"b"] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", @"b", @"a"] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:@"a", @"b", @"a", 0] onlyHasObjects:[@"a", @"b", 0]];
[self assertSet:[CPSet setWithObjects:@"a", @"b", @"a", 0, nil] onlyHasObjects:[@"a", @"b", 0]];
[self assertSet:[CPSet setWithObjects:@"a", @"b", @"a", nil, 0] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithObjects:@"a", nil, undefined, 0] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithObjects:@"a", undefined, 0, nil] onlyHasObjects:[@"a", 0]];
}
- (void)testSetWithSet_
{
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:nil]] onlyHasObjects:[]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", nil]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", nil, @"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"a", @"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"a", @"a"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"b"]] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"b", nil]] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", nil, @"b"]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"b", @"a"]] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"b", @"a", 0]] onlyHasObjects:[@"a", @"b", 0]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"b", @"a", 0, nil]] onlyHasObjects:[@"a", @"b", 0]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", @"b", @"a", nil, 0]] onlyHasObjects:[@"a", @"b"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", nil, undefined, 0]] onlyHasObjects:[@"a"]];
[self assertSet:[CPSet setWithSet:[CPSet setWithObjects:@"a", undefined, 0, nil]] onlyHasObjects:[@"a", 0]];
}
- (void)testAddObject
{
var set = [CPSet new];
[self assertFalse:[set containsObject:"foo"]];
[set addObject:"foo"];
[self assertTrue:[set containsObject:"foo"]];
}
- (void)testAddZeroObject
{
var set = [CPSet new];
[self assertFalse:[set containsObject:0]];
[set addObject:0];
[self assertTrue:[set containsObject:0]];
}
- (void)testRemoveObject
{
var set = [CPSet new];
[set addObject:"foo"];
[self assertTrue:[set containsObject:"foo"]];
[set removeObject:"foo"];
[self assertFalse:[set containsObject:"foo"]];
}
- (void)testRemoveZeroObject
{
var set = [CPSet new];
[set addObject:0];
[self assertTrue:[set containsObject:0]];
[set removeObject:0];
[self assertFalse:[set containsObject:0]];
}
- (void)testAddNilObject
{
var set = [CPSet new];
[self assertFalse:[set containsObject:nil]];
[set addObject:nil];
[self assertFalse:[set containsObject:nil]];
}
- (void)testRemoveNilObject
{
var set = [CPSet new];
[set addObject:nil];
[self assertFalse:[set containsObject:nil]];
[set removeObject:nil];
[self assertFalse:[set containsObject:nil]];
}
- (void)testDescription
{
var set = [CPSet new];
[self assert:@"{(\n)}" equals:[set description]];
[set addObject:"horizon"];
[set addObject:"surfer"];
[set addObject:"7"];
[self assertSet:set onlyHasObjects:["horizon", "surfer", "7"]];
}
@end