1 /* Test if instance methods of root classes are used as class methods, if no
2 "real" methods are found. For receivers of type 'id' and 'Class', all
3 root classes must be considered. */
4 /* Author: Ziemowit Laski <zlaski@apple.com>. */
9 #ifdef __NEXT_RUNTIME__
10 #include <objc/objc-runtime.h>
11 #define OBJC_GETCLASS objc_getClass
13 #include <objc/objc-api.h>
14 #define OBJC_GETCLASS objc_get_class
18 extern void abort(void);
19 extern int strcmp(const char *, const char *);
21 #define CHECK_IF(expr) if(!(expr)) abort()
24 - (const char *) method4;
29 + (const char *) method2;
32 @interface Derived: Root
33 - (const char *) method1;
34 - (const char *) method2;
35 - (const char *) method3;
38 @interface Root (Categ)
39 - (const char *) method3;
42 @implementation Root (Categ)
43 - (const char *) method3 { return "Root(Categ)::-method3"; }
44 - (const char *) method4 { return "Root(Categ)::-method4"; }
47 @implementation Derived
48 - (const char *) method1 { return "Derived::-method1"; }
49 - (const char *) method2 { return "Derived::-method2"; }
50 - (const char *) method3 { return "Derived::-method3"; }
54 #ifdef __NEXT_RUNTIME__
55 + initialize { return self; }
57 - (const char *) method1 { return "Root::-method1"; }
58 + (const char *) method2 { return "Root::+method2"; }
63 Class obj = OBJC_GETCLASS("Derived");
65 /* None of the following should elicit compiler-time warnings. */
67 CHECK_IF(!strcmp([Root method1], "Root::-method1"));
68 CHECK_IF(!strcmp([Root method2], "Root::+method2"));
69 CHECK_IF(!strcmp([Root method3], "Root(Categ)::-method3"));
70 CHECK_IF(!strcmp([Root method4], "Root(Categ)::-method4"));
71 CHECK_IF(!strcmp([Derived method1], "Root::-method1"));
72 CHECK_IF(!strcmp([Derived method2], "Root::+method2"));
73 CHECK_IF(!strcmp([Derived method3], "Root(Categ)::-method3"));
74 CHECK_IF(!strcmp([Derived method4], "Root(Categ)::-method4"));
75 CHECK_IF(!strcmp([obj method1], "Root::-method1"));
76 CHECK_IF(!strcmp([obj method2], "Root::+method2"));
77 CHECK_IF(!strcmp([obj method3], "Root(Categ)::-method3"));
78 CHECK_IF(!strcmp([obj method4], "Root(Categ)::-method4"));