mirror of
https://github.com/darlinghq/darling-objc4.git
synced 2024-11-27 06:00:32 +00:00
100 lines
2.0 KiB
Objective-C
100 lines
2.0 KiB
Objective-C
// TEST_CONFIG
|
|
|
|
#include "test.h"
|
|
#include "testroot.i"
|
|
|
|
int state = 0;
|
|
int catstate = 0;
|
|
int deallocstate = 0;
|
|
|
|
@interface Deallocator : TestRoot @end
|
|
@implementation Deallocator
|
|
-(void)dealloc {
|
|
deallocstate = 1;
|
|
SUPER_DEALLOC();
|
|
}
|
|
@end
|
|
|
|
|
|
@interface Super : TestRoot @end
|
|
@implementation Super
|
|
+(void)initialize {
|
|
if (self == [Super class]) {
|
|
testprintf("in +[Super initialize]\n");
|
|
testassert(state == 2);
|
|
state = 3;
|
|
} else {
|
|
testprintf("in +[Super initialize] on behalf of Sub\n");
|
|
testassert(state == 3);
|
|
state = 4;
|
|
}
|
|
}
|
|
-(void)load { fail("-[Super load] called!"); }
|
|
+(void)load {
|
|
testprintf("in +[Super load]\n");
|
|
testassert(state == 0);
|
|
state = 1;
|
|
}
|
|
@end
|
|
|
|
@interface Sub : Super { } @end
|
|
@implementation Sub
|
|
+(void)load {
|
|
testprintf("in +[Sub load]\n");
|
|
testassert(state == 1);
|
|
state = 2;
|
|
}
|
|
-(void)load { fail("-[Sub load] called!"); }
|
|
@end
|
|
|
|
@interface SubNoLoad : Super { } @end
|
|
@implementation SubNoLoad @end
|
|
|
|
@interface Super (Category) @end
|
|
@implementation Super (Category)
|
|
-(void)load { fail("-[Super(Category) load called!"); }
|
|
+(void)load {
|
|
testprintf("in +[Super(Category) load]\n");
|
|
testassert(state >= 1);
|
|
catstate++;
|
|
}
|
|
@end
|
|
|
|
|
|
@interface Sub (Category) @end
|
|
@implementation Sub (Category)
|
|
-(void)load { fail("-[Sub(Category) load called!"); }
|
|
+(void)load {
|
|
testprintf("in +[Sub(Category) load]\n");
|
|
testassert(state >= 2);
|
|
catstate++;
|
|
|
|
// test autorelease pool
|
|
__autoreleasing id x;
|
|
x = AUTORELEASE([Deallocator new]);
|
|
}
|
|
@end
|
|
|
|
|
|
@interface SubNoLoad (Category) @end
|
|
@implementation SubNoLoad (Category)
|
|
-(void)load { fail("-[SubNoLoad(Category) load called!"); }
|
|
+(void)load {
|
|
testprintf("in +[SubNoLoad(Category) load]\n");
|
|
testassert(state >= 1);
|
|
catstate++;
|
|
}
|
|
@end
|
|
|
|
int main()
|
|
{
|
|
testassert(state == 2);
|
|
testassert(catstate == 3);
|
|
testassert(deallocstate == 1);
|
|
[Sub class];
|
|
testassert(state == 4);
|
|
testassert(catstate == 3);
|
|
|
|
succeed(__FILE__);
|
|
}
|