X-Git-Url: https://git.saurik.com/apple/objc4.git/blobdiff_plain/7c0e6487d7b67b6bf6c632300ee4b74e8950b051..7af964d1562d70f51a8e9aca24215ac3d83d0624:/test/createInstance.m diff --git a/test/createInstance.m b/test/createInstance.m new file mode 100644 index 0000000..5be912f --- /dev/null +++ b/test/createInstance.m @@ -0,0 +1,57 @@ +#import +#import +#ifndef OBJC_NO_GC +#include +#endif +#include "test.h" + +@interface Super { @public id isa; } @end +@implementation Super ++(void) initialize { } ++(Class) class { return self; } +@end + +@interface Sub : Super { int array[128]; } @end +@implementation Sub @end + +int main() +{ + Super *s; + + s = class_createInstance([Super class], 0); + testassert(s); + testassert(s->isa == [Super class]); + testassert(malloc_size(s) >= class_getInstanceSize([Super class])); + if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s)); + + object_dispose(s); + + s = class_createInstance([Sub class], 0); + testassert(s); + testassert(s->isa == [Sub class]); + testassert(malloc_size(s) >= class_getInstanceSize([Sub class])); + if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s)); + + object_dispose(s); + + s = class_createInstance([Super class], 100); + testassert(s); + testassert(s->isa == [Super class]); + testassert(malloc_size(s) >= class_getInstanceSize([Super class]) + 100); + if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s)); + + object_dispose(s); + + s = class_createInstance([Sub class], 100); + testassert(s); + testassert(s->isa == [Sub class]); + testassert(malloc_size(s) >= class_getInstanceSize([Sub class]) + 100); + if (objc_collecting_enabled()) testassert(auto_zone_is_valid_pointer(auto_zone(), s)); + + object_dispose(s); + + s = class_createInstance(Nil, 0); + testassert(!s); + + succeed(__FILE__); +}