Added. Check sending +load to categories, in addition to classes.
From-SVN: r43080
This commit is contained in:
parent
cd7894a510
commit
9a57c5d31a
|
@ -0,0 +1,108 @@
|
||||||
|
/*
|
||||||
|
load-3.m
|
||||||
|
|
||||||
|
Author: Ovidiu Predescu <ovidiu@cup.hp.com>
|
||||||
|
Date: June 3, 2001
|
||||||
|
|
||||||
|
Test if the +load methods are invoked, and are invoked in the
|
||||||
|
proper order.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <objc/objc.h>
|
||||||
|
#include <objc/Object.h>
|
||||||
|
|
||||||
|
@interface A : Object
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface B : A
|
||||||
|
@end
|
||||||
|
|
||||||
|
static a_load = 0;
|
||||||
|
static b_load = 0;
|
||||||
|
static a_category_load = 0;
|
||||||
|
static b_category_load = 0;
|
||||||
|
|
||||||
|
@implementation A (Category)
|
||||||
|
+ (void)load
|
||||||
|
{
|
||||||
|
a_category_load = 1;
|
||||||
|
printf("+[A(Category) load]\n");
|
||||||
|
|
||||||
|
if (a_load != 1)
|
||||||
|
{
|
||||||
|
printf("+load for A(Category) invoked before A's!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation B(Category)
|
||||||
|
+ (void)load
|
||||||
|
{
|
||||||
|
b_category_load = 1;
|
||||||
|
printf("+[B(Category) load]\n");
|
||||||
|
|
||||||
|
if (b_load != 1)
|
||||||
|
{
|
||||||
|
printf ("+load for B(Category) invoked before B!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation B
|
||||||
|
+ (void)load
|
||||||
|
{
|
||||||
|
b_load = 1;
|
||||||
|
printf("+[B load]\n");
|
||||||
|
|
||||||
|
if (a_load != 1)
|
||||||
|
{
|
||||||
|
printf("+load for B invoked before A's!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b_category_load != 0)
|
||||||
|
{
|
||||||
|
printf("+load for B invoked after B(Category)!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation A
|
||||||
|
+ (void)load
|
||||||
|
{
|
||||||
|
a_load = 1;
|
||||||
|
printf("+[A load]\n");
|
||||||
|
|
||||||
|
if (a_category_load != 0)
|
||||||
|
{
|
||||||
|
printf("+load for A(Category) invoked before A!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b_load != 0)
|
||||||
|
{
|
||||||
|
printf("+load for A invoked after B!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (b_category_load != 0)
|
||||||
|
{
|
||||||
|
printf("+load for B(Category) invoked before A and B!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
if (a_load + b_load + a_category_load + b_category_load != 4)
|
||||||
|
{
|
||||||
|
printf("Not all +load methods invoked!\n");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue