Some test case cleanups.

main
theraven 13 years ago
parent aad22cb092
commit 57a9acb13c

@ -1,37 +1,11 @@
#if __APPLE__
// Compile command: clang -o PropertyAttributeTest2 -framework Foundation PropertyAttributeTest2.m
#include <Foundation/Foundation.h>
#include <objc/runtime.h>
__attribute__((objc_root_class))
@interface Test { id isa; }
@end
@implementation Test
+ (id)class { return self; }
+ (id)new
{
return class_createInstance(self, 0);
}
- (void)dealloc
{
object_dispose(self);
}
- (id)retain
{
return self;
}
- (oneway void)release
{
}
@end
#else
#include "Test.h" #include "Test.h"
#endif
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <assert.h> #include <assert.h>
#pragma GCC diagnostic ignored "-Wobjc-property-no-attribute"
enum FooManChu { FOO, MAN, CHU }; enum FooManChu { FOO, MAN, CHU };
struct YorkshireTeaStruct { int pot; char lady; }; struct YorkshireTeaStruct { int pot; char lady; };
typedef struct YorkshireTeaStruct YorkshireTeaStructType; typedef struct YorkshireTeaStruct YorkshireTeaStructType;
@ -100,10 +74,7 @@ __attribute__((objc_root_class))
@property(getter=isIntReadOnlyGetter, readonly) int intReadonlyGetter; @property(getter=isIntReadOnlyGetter, readonly) int intReadonlyGetter;
@property(readwrite) int intReadwrite; @property(readwrite) int intReadwrite;
@property(assign) int intAssign; @property(assign) int intAssign;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wobjc-property-no-attribute"
@property id idDefault; @property id idDefault;
#pragma GCC diagnostic pop
@property(retain) id idRetain; @property(retain) id idRetain;
@property(copy) id idCopy; @property(copy) id idCopy;
@property(weak) id idWeak; @property(weak) id idWeak;
@ -117,6 +88,14 @@ __attribute__((objc_root_class))
@property(retain, nonatomic, getter=dynamicGetterSetter, setter=setDynamicGetterSetter:) id idDynamicGetterSetter; @property(retain, nonatomic, getter=dynamicGetterSetter, setter=setDynamicGetterSetter:) id idDynamicGetterSetter;
@end @end
@interface PropertyTest (Informal)
- (void)setStructDefault2: (struct YorkshireTeaStruct)tp;
- (void)setIntDefault2: (int)i;
- (struct YorkshireTeaStruct)structDefault2;
- (int)intDefault2;
@end
@implementation PropertyTest @implementation PropertyTest
@synthesize charDefault; @synthesize charDefault;
@synthesize doubleDefault; @synthesize doubleDefault;
@ -173,10 +152,7 @@ __attribute__((objc_root_class))
@property(getter=isIntReadOnlyGetter, readonly) int intReadonlyGetter; @property(getter=isIntReadOnlyGetter, readonly) int intReadonlyGetter;
@property(readwrite) int intReadwrite; @property(readwrite) int intReadwrite;
@property(assign) int intAssign; @property(assign) int intAssign;
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wobjc-property-no-attribute"
@property id idDefault; @property id idDefault;
#pragma GCC diagnostic pop
@property(retain) id idRetain; @property(retain) id idRetain;
@property(copy) id idCopy; @property(copy) id idCopy;
@property(weak) id idWeak; @property(weak) id idWeak;
@ -463,10 +439,7 @@ static int intDefault2Getter(id self, SEL _cmd) {
static void intDefault2Setter(id self, SEL _cmd, int value) { static void intDefault2Setter(id self, SEL _cmd, int value) {
Ivar ivar = class_getInstanceVariable(objc_getClass("PropertyTest"), "intDefault"); Ivar ivar = class_getInstanceVariable(objc_getClass("PropertyTest"), "intDefault");
#pragma GCC diagnostic push object_setIvar(self, ivar, (id)(intptr_t)value);
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"
object_setIvar(self, ivar, (id)value);
#pragma GCC diagnostic pop
} }
static struct YorkshireTeaStruct* structDefault2Getter(id self, SEL _cmd) { static struct YorkshireTeaStruct* structDefault2Getter(id self, SEL _cmd) {
@ -481,9 +454,6 @@ void structDefault2Setter(id self, SEL _cmd, struct YorkshireTeaStruct* value) {
int main(void) int main(void)
{ {
#if 0
return 1;
#else
testProperty("charDefault", "Tc,VcharDefault", ATTRS(ATTR("T", "c"), ATTR("V", "charDefault"))); testProperty("charDefault", "Tc,VcharDefault", ATTRS(ATTR("T", "c"), ATTR("V", "charDefault")));
testProperty("doubleDefault", "Td,VdoubleDefault", ATTRS(ATTR("T", "d"), ATTR("V", "doubleDefault"))); testProperty("doubleDefault", "Td,VdoubleDefault", ATTRS(ATTR("T", "d"), ATTR("V", "doubleDefault")));
testProperty("enumDefault", "Ti,VenumDefault", ATTRS(ATTR("T", "i"), ATTR("V", "enumDefault"))); testProperty("enumDefault", "Ti,VenumDefault", ATTRS(ATTR("T", "i"), ATTR("V", "enumDefault")));
@ -646,11 +616,8 @@ int main(void)
object_setClass(t, testClass); object_setClass(t, testClass);
t.intDefault = 2; t.intDefault = 2;
assert(t.intDefault == 2); assert(t.intDefault == 2);
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wobjc-method-access"
[t setIntDefault2:3]; [t setIntDefault2:3];
assert((int)[t intDefault2] == 3); assert((int)[t intDefault2] == 3);
#pragma GCC diagnostic pop
assert(t.intDefault == 3); assert(t.intDefault == 3);
struct YorkshireTeaStruct struct1 = { 2, 'A' }; struct YorkshireTeaStruct struct1 = { 2, 'A' };
@ -658,12 +625,9 @@ int main(void)
struct YorkshireTeaStruct readStruct = t.structDefault; struct YorkshireTeaStruct readStruct = t.structDefault;
assert(memcmp(&struct1, &readStruct, sizeof(struct1)) == 0); assert(memcmp(&struct1, &readStruct, sizeof(struct1)) == 0);
struct YorkshireTeaStruct struct2 = { 3, 'B' }; struct YorkshireTeaStruct struct2 = { 3, 'B' };
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wobjc-method-access"
[t setStructDefault2:struct2]; [t setStructDefault2:struct2];
id readStruct2 = [t structDefault2]; struct YorkshireTeaStruct readStruct2 = [t structDefault2];
assert(memcmp(&struct2, &readStruct2, sizeof(struct2)) == 0); assert(memcmp(&struct2, &readStruct2, sizeof(struct2)) == 0);
#pragma GCC diagnostic pop
readStruct = t.structDefault; readStruct = t.structDefault;
assert(memcmp(&struct2, &readStruct, sizeof(struct2)) == 0); assert(memcmp(&struct2, &readStruct, sizeof(struct2)) == 0);
@ -679,17 +643,14 @@ int main(void)
assert(t->idRetain == testValue); assert(t->idRetain == testValue);
assert(t->_idOther == nil); assert(t->_idOther == nil);
#if __APPLE__
// why does this test fail with gnu runtime?
Method idRetainSetter = class_getInstanceMethod(testClass, @selector(setIdRetain:)); Method idRetainSetter = class_getInstanceMethod(testClass, @selector(setIdRetain:));
Method idOtherSetter = class_getInstanceMethod(testClass, @selector(setIdOther:)); Method idOtherSetter = class_getInstanceMethod(testClass, @selector(setIdOther:));
method_setImplementation(idRetainSetter, method_getImplementation(idOtherSetter)); method_setImplementation(idRetainSetter, method_getImplementation(idOtherSetter));
idRetainSetter = class_getInstanceMethod(testClass, @selector(setIdRetain:));
id testValue2 = [Test new]; id testValue2 = [Test new];
t.idRetain = testValue2; t.idRetain = testValue2;
assert(t->idRetain == testValue); assert(t->idRetain == testValue);
assert(t->_idOther == testValue2); assert(t->_idOther == testValue2);
#endif // __APPLE__
return 0; return 0;
#endif // __has_feature(objc_property_clean_abi)
} }

Loading…
Cancel
Save