OSDN Git Service

Added. Check sending +load to categories, in addition to classes.
authorovidiu <ovidiu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Jun 2001 17:54:21 +0000 (17:54 +0000)
committerovidiu <ovidiu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 Jun 2001 17:54:21 +0000 (17:54 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@43080 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/objc/execute/load-3.m [new file with mode: 0644]

diff --git a/gcc/testsuite/objc/execute/load-3.m b/gcc/testsuite/objc/execute/load-3.m
new file mode 100644 (file)
index 0000000..e754393
--- /dev/null
@@ -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;
+}