Added. Check sending +load to categories, in addition to classes.

From-SVN: r43080
This commit is contained in:
Ovidiu Predescu 2001-06-09 17:54:21 +00:00
parent cd7894a510
commit 9a57c5d31a

View File

@ -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;
}