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 #define OBJC_GETCLASS objc_getClass
12 #define OBJC_GETCLASS objc_get_class
15 extern void abort(void);
16 extern int strcmp(const char *, const char *);
17 #define CHECK_IF(expr) if(!(expr)) abort()
20 - (const char *) method4;
25 + (const char *) method2;
28 @interface Derived: Root
29 - (const char *) method1;
30 - (const char *) method2;
31 - (const char *) method3;
34 @interface Root (Categ)
35 - (const char *) method3;
38 @implementation Root (Categ)
39 - (const char *) method3 { return "Root(Categ)::-method3"; }
40 - (const char *) method4 { return "Root(Categ)::-method4"; }
43 @implementation Derived
44 - (const char *) method1 { return "Derived::-method1"; }
45 - (const char *) method2 { return "Derived::-method2"; }
46 - (const char *) method3 { return "Derived::-method3"; }
50 #ifdef __NEXT_RUNTIME__
51 + initialize { return self; }
53 - (const char *) method1 { return "Root::-method1"; }
54 + (const char *) method2 { return "Root::+method2"; }
59 Class obj = OBJC_GETCLASS("Derived");
61 /* None of the following should elicit compiler-time warnings. */
63 CHECK_IF(!strcmp([Root method1], "Root::-method1"));
64 CHECK_IF(!strcmp([Root method2], "Root::+method2"));
65 CHECK_IF(!strcmp([Root method3], "Root(Categ)::-method3"));
66 CHECK_IF(!strcmp([Root method4], "Root(Categ)::-method4"));
67 CHECK_IF(!strcmp([Derived method1], "Root::-method1"));
68 CHECK_IF(!strcmp([Derived method2], "Root::+method2"));
69 CHECK_IF(!strcmp([Derived method3], "Root(Categ)::-method3"));
70 CHECK_IF(!strcmp([Derived method4], "Root(Categ)::-method4"));
71 CHECK_IF(!strcmp([obj method1], "Root::-method1"));
72 CHECK_IF(!strcmp([obj method2], "Root::+method2"));
73 CHECK_IF(!strcmp([obj method3], "Root(Categ)::-method3"));
74 CHECK_IF(!strcmp([obj method4], "Root(Categ)::-method4"));