1#include "Test.h"
2#include <stdio.h>
3
4// Regression test for a bug where allocating a class as a subclass of an
5// unresolved class failed.
6
7static int loaded;
8
9static void load(Class self, SEL _cmd)
10{
11	loaded++;
12}
13
14int main()
15{
16	Class a, b, c, d, e;
17
18	assert(class_getInstanceSize(objc_allocateClassPair(Nil, "Empty", 0)) == sizeof(Class));
19	a = objc_allocateClassPair([Test class], "A", 0);
20	objc_registerClassPair(a);
21
22	b = objc_allocateClassPair(a, "B", 0);
23	class_addMethod(object_getClass(b), @selector(load), (IMP)load, "@:");
24
25	class_addIvar(b, "anIvar", 4, 2, "i");
26	objc_registerClassPair(b);
27
28	Ivar iv = class_getInstanceVariable(b, "anIvar");
29	size_t superSize = class_getInstanceSize([Test class]);
30	assert(ivar_getOffset(iv) == superSize);
31
32	class_getSuperclass(b);
33
34
35	c = objc_allocateClassPair(b, "C", 0);
36	objc_registerClassPair(c);
37	d = objc_allocateClassPair(c, "D", 0);
38	objc_registerClassPair(d);
39	e = objc_allocateClassPair(d, "E", 0);
40	objc_registerClassPair(e);
41	assert(loaded == 0);
42	assert(objc_getClass("C") == c);
43	assert(objc_getClass("D") == d);
44	assert(objc_getClass("E") == e);
45	objc_disposeClassPair(e);
46	assert(objc_getClass("E") == nil);
47
48	return 0;
49}
50
51
52