mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 21:17:03 +00:00
132 lines
2.5 KiB
Plaintext
132 lines
2.5 KiB
Plaintext
@import <Foundation/Foundation.j>
|
|
|
|
@implementation ParentClass : CPObject
|
|
{
|
|
id ivar;
|
|
}
|
|
|
|
- (CPString)classNameString
|
|
{
|
|
return @"ParentClass";
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation ChildClass : ParentClass
|
|
{
|
|
}
|
|
|
|
- (id)ivar
|
|
{
|
|
return ivar;
|
|
}
|
|
|
|
- (void)setIvar:(id)newValue
|
|
{
|
|
ivar = newValue;
|
|
}
|
|
|
|
- (CPString)classNameString
|
|
{
|
|
return @"ChildClass";
|
|
}
|
|
|
|
- (CPString)parentClassNameString
|
|
{
|
|
return [super classNameString];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation GrandChildClass : ChildClass
|
|
{
|
|
}
|
|
|
|
- (CPString)classNameString
|
|
{
|
|
return @"GrandChildClass";
|
|
}
|
|
|
|
- (CPString)parentClassNameString
|
|
{
|
|
return [super classNameString];
|
|
}
|
|
|
|
- (CPString)grandParentClassNameString
|
|
{
|
|
return [super parentClassNameString];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation InheritanceTest : OJTestCase
|
|
{
|
|
ParentClass parentClass;
|
|
ChildClass childClass;
|
|
GrandChildClass grandChildClass;
|
|
}
|
|
|
|
- (void)setUp
|
|
{
|
|
parentClass = [[ParentClass alloc] init];
|
|
childClass = [[ChildClass alloc] init];
|
|
grandChildClass = [[GrandChildClass alloc] init];
|
|
}
|
|
|
|
- (void)testIvarInheritance
|
|
{
|
|
[self assert:nil equals:parentClass.ivar];
|
|
[self assert:nil equals:childClass.ivar];
|
|
[self assert:nil equals:grandChildClass.ivar];
|
|
|
|
parentClass.ivar = 1;
|
|
childClass.ivar = 2;
|
|
grandChildClass.ivar = 3;
|
|
|
|
[self assert:1 equals:parentClass.ivar];
|
|
[self assert:2 equals:childClass.ivar];
|
|
[self assert:3 equals:grandChildClass.ivar];
|
|
}
|
|
|
|
- (void)testIvarIndependence
|
|
{
|
|
parentClass.ivar = 1;
|
|
[self assert:1 equals:parentClass.ivar];
|
|
[self assert:nil equals:childClass.ivar];
|
|
[self assert:nil equals:grandChildClass.ivar];
|
|
|
|
childClass.ivar = 2;
|
|
[self assert:1 equals:parentClass.ivar];
|
|
[self assert:2 equals:childClass.ivar];
|
|
[self assert:nil equals:grandChildClass.ivar];
|
|
|
|
grandChildClass.ivar = 3;
|
|
[self assert:1 equals:parentClass.ivar];
|
|
[self assert:2 equals:childClass.ivar];
|
|
[self assert:3 equals:grandChildClass.ivar];
|
|
}
|
|
|
|
- (void)testMethodInheritance
|
|
{
|
|
[self assertThrows:function()
|
|
{
|
|
[parentClass setIvar:5];
|
|
}];
|
|
[childClass setIvar:5];
|
|
[grandChildClass setIvar:10];
|
|
[self assert:nil equals:parentClass.ivar];
|
|
[self assert:5 equals:childClass.ivar];
|
|
[self assert:10 equals:grandChildClass.ivar];
|
|
}
|
|
|
|
- (void)testSuper
|
|
{
|
|
[self assert:@"ParentClass" equals:[parentClass classNameString]];
|
|
[self assert:@"ParentClass" equals:[childClass parentClassNameString]];
|
|
[self assert:@"ParentClass" equals:[grandChildClass grandParentClassNameString]];
|
|
}
|
|
|
|
@end
|
|
|
|
|