You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
Objective-C
52 lines
1.2 KiB
Objective-C
#include "Test.h"
|
|
#include <stdio.h>
|
|
|
|
// Regression test for a bug where allocating a class as a subclass of an
|
|
// unresolved class failed.
|
|
|
|
static int loaded;
|
|
|
|
static void load(Class self, SEL _cmd)
|
|
{
|
|
loaded++;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
Class a, b, c, d, e;
|
|
|
|
assert(class_getInstanceSize(objc_allocateClassPair(Nil, "Empty", 0)) == sizeof(Class));
|
|
a = objc_allocateClassPair([Test class], "A", 0);
|
|
objc_registerClassPair(a);
|
|
|
|
b = objc_allocateClassPair(a, "B", 0);
|
|
class_addMethod(object_getClass(b), @selector(load), (IMP)load, "@:");
|
|
|
|
class_addIvar(b, "anIvar", 4, 2, "i");
|
|
objc_registerClassPair(b);
|
|
|
|
Ivar iv = class_getInstanceVariable(b, "anIvar");
|
|
size_t superSize = class_getInstanceSize([Test class]);
|
|
assert(ivar_getOffset(iv) == superSize);
|
|
|
|
class_getSuperclass(b);
|
|
|
|
|
|
c = objc_allocateClassPair(b, "C", 0);
|
|
objc_registerClassPair(c);
|
|
d = objc_allocateClassPair(c, "D", 0);
|
|
objc_registerClassPair(d);
|
|
e = objc_allocateClassPair(d, "E", 0);
|
|
objc_registerClassPair(e);
|
|
assert(loaded == 0);
|
|
assert(objc_getClass("C") == c);
|
|
assert(objc_getClass("D") == d);
|
|
assert(objc_getClass("E") == e);
|
|
objc_disposeClassPair(e);
|
|
assert(objc_getClass("E") == nil);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|