diff options
author | Ovidiu Predescu <ovidiu@gcc.gnu.org> | 2001-06-09 17:54:21 +0000 |
---|---|---|
committer | Ovidiu Predescu <ovidiu@gcc.gnu.org> | 2001-06-09 17:54:21 +0000 |
commit | 9a57c5d31afe33d25f2146e30f0237c76514671d (patch) | |
tree | cebc5a5ab720ac40cb526966900883a5e4482da8 | |
parent | cd7894a5107cf60fddb047ae29b571d32c9182bc (diff) | |
download | gcc-9a57c5d31afe33d25f2146e30f0237c76514671d.zip gcc-9a57c5d31afe33d25f2146e30f0237c76514671d.tar.gz gcc-9a57c5d31afe33d25f2146e30f0237c76514671d.tar.bz2 |
Added. Check sending +load to categories, in addition to classes.
From-SVN: r43080
-rw-r--r-- | gcc/testsuite/objc/execute/load-3.m | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/gcc/testsuite/objc/execute/load-3.m b/gcc/testsuite/objc/execute/load-3.m new file mode 100644 index 0000000..e754393 --- /dev/null +++ b/gcc/testsuite/objc/execute/load-3.m @@ -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; +} |