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.
92 lines
1.9 KiB
Objective-C
92 lines
1.9 KiB
Objective-C
#import "Test.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef __has_attribute
|
|
#if __has_attribute(objc_root_class)
|
|
__attribute__((objc_root_class))
|
|
#endif
|
|
#endif
|
|
@interface Foo
|
|
-(id)bar;
|
|
-(void)setBar:(id)b;
|
|
@end
|
|
@implementation Foo
|
|
- (id)bar
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
- (void)setBar: (id)b
|
|
{
|
|
return;
|
|
}
|
|
@end
|
|
|
|
int main(void)
|
|
{
|
|
Class foo = objc_getClass("Foo");
|
|
Method barMethod = class_getInstanceMethod(foo, @selector(bar));
|
|
Method setBarMethod = class_getInstanceMethod(foo,@selector(setBar:));
|
|
char arg[16];
|
|
|
|
memset(&arg[0], '\0', 16 * sizeof(char));
|
|
method_getReturnType(barMethod, &arg[0], 16);
|
|
assert(0 == strcmp(&arg[0],"@"));
|
|
|
|
char* expected[3] = {"@", ":", "" };
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
memset(&arg[0], '\0', 16 * sizeof(char));
|
|
method_getArgumentType(barMethod, i, &arg[0], 16);
|
|
assert(0 == strcmp(&arg[0],expected[i]));
|
|
}
|
|
|
|
|
|
memset(&arg[0], '\0', 16 * sizeof(char));
|
|
method_getReturnType(setBarMethod, &arg[0], 16);
|
|
assert(0 == strcmp(&arg[0],"v"));
|
|
|
|
expected[2] = "@";
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
memset(&arg[0], '\0', 16 * sizeof(char));
|
|
method_getArgumentType(setBarMethod, i, &arg[0], 16);
|
|
assert(0 == strcmp(&arg[0],expected[i]));
|
|
}
|
|
|
|
char *arg_copied = method_copyReturnType(barMethod);
|
|
assert(0 == strcmp(arg_copied,"@"));
|
|
free(arg_copied);
|
|
arg_copied = NULL;
|
|
|
|
for (int i = 0; i < 2; i++)
|
|
{
|
|
arg_copied = method_copyArgumentType(barMethod, i);
|
|
assert(0 == strcmp(arg_copied,expected[i]));
|
|
free(arg_copied);
|
|
}
|
|
|
|
arg_copied = method_copyArgumentType(barMethod, 2);
|
|
assert(NULL == arg_copied);
|
|
|
|
|
|
|
|
arg_copied = method_copyReturnType(setBarMethod);
|
|
assert(0 == strcmp(arg_copied,"v"));
|
|
free(arg_copied);
|
|
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
arg_copied = method_copyArgumentType(setBarMethod, i);
|
|
assert(0 == strcmp(arg_copied,expected[i]));
|
|
free(arg_copied);
|
|
}
|
|
|
|
|
|
return 0;
|
|
}
|