1/* 2 * This module is used in the unittests for object identity. 3 */ 4#include "Python.h" 5#include "pyobjc-api.h" 6 7#import <Foundation/Foundation.h> 8 9@interface OC_TestIdentity : NSObject 10{ 11 NSObject* storedObject; 12 int isClassic; 13} 14 15-(NSObject*)storedObject; 16-(void)setStoredClassicObject:(NSObject*)object; 17-(void)setStoredObject:(NSObject*)object; 18-(void)dealloc; 19 20-(void)setStoredObjectToResultOf:(SEL)aSelector on:(NSObject*)object; 21-(void)setStoredObjectToInteger:(int)value; 22-(void)setStoredObjectToUnsignedInteger:(unsigned int)value; 23-(void)setStoredObjectToLongLong:(long long)value; 24-(void)setStoredObjectToUnsignedLongLong:(unsigned long long)value; 25-(void)setStoredObjectToDouble:(double)value; 26-(void)setStoredObjectToFloat:(float)value; 27 28-(int)isSameObjectAsStored:(NSObject*)value; 29-(void)setStoredObjectToAProtocol; 30-(void)setStoredObjectAnInstanceOf:(Class) cls; 31-(void)setStoredObjectAnInstanceOfClassic:(Class) cls; 32 33-(void)writeStoredObjectToFile:(NSString*)fname; 34 35@end 36 37@implementation OC_TestIdentity 38-(void)dealloc 39{ 40 if (isClassic) { 41 /* pass, we could call free but why bother? */ 42 } else { 43 [storedObject release]; 44 } 45 [super dealloc]; 46} 47 48-(NSObject*)storedObject 49{ 50 if (isClassic) { 51 return storedObject; 52 } else { 53 return [[storedObject retain] autorelease]; 54 } 55} 56 57-(void)setStoredObject:(NSObject*)object 58{ 59 if (!isClassic) { 60 [storedObject release]; 61 } 62 [object retain]; 63 storedObject = object; 64 isClassic = 0; 65} 66 67-(void)setStoredClassicObject:(NSObject*)object; 68{ 69 if (!isClassic) { 70 [storedObject release]; 71 } 72 storedObject = object; 73 isClassic = 1; 74} 75 76-(void)setStoredObjectToResultOf:(SEL)aSelector on:(NSObject*)object 77{ 78 [self setStoredObject: [object performSelector: aSelector]]; 79} 80 81-(void)setStoredObjectToInteger:(int)value 82{ 83 [self setStoredObject: [NSNumber numberWithInt: value]]; 84} 85 86-(void)setStoredObjectToUnsignedInteger:(unsigned int)value 87{ 88 [self setStoredObject: [NSNumber numberWithUnsignedInt: value]]; 89} 90 91-(void)setStoredObjectToLongLong:(long long)value 92{ 93 [self setStoredObject: [NSNumber numberWithLongLong: value]]; 94} 95 96-(void)setStoredObjectToUnsignedLongLong:(unsigned long long)value 97{ 98 [self setStoredObject: [NSNumber numberWithUnsignedLongLong: value]]; 99} 100 101-(void)setStoredObjectToDouble:(double)value 102{ 103 [self setStoredObject: [NSNumber numberWithDouble: value]]; 104} 105 106-(void)setStoredObjectToFloat:(float)value 107{ 108 [self setStoredObject: [NSNumber numberWithFloat: value]]; 109} 110 111-(int)isSameObjectAsStored:(NSObject*)value 112{ 113 return value == storedObject; 114} 115 116-(void)setStoredObjectToAProtocol 117{ 118 [self setStoredClassicObject: (NSObject*)@protocol(NSObject) ]; 119} 120 121-(void)setStoredObjectAnInstanceOf:(Class) cls 122{ 123 [self setStoredObject: [[cls alloc] init]]; 124} 125-(void)setStoredObjectAnInstanceOfClassic:(Class)cls 126{ 127 [self setStoredClassicObject:[cls new]]; 128} 129 130-(void)writeStoredObjectToFile:(NSString*)fname 131{ 132 [(NSArray*)storedObject writeToFile:fname atomically:YES]; 133} 134 135@end 136 137static PyMethodDef identity_methods[] = { 138 { 0, 0, 0, 0 } 139}; 140 141void initidentity(void); 142void initidentity(void) 143{ 144 PyObject* m; 145 146 m = Py_InitModule4("identity", identity_methods, 147 NULL, NULL, PYTHON_API_VERSION); 148 149 PyObjC_ImportAPI(m); 150 PyModule_AddObject(m, "OC_TestIdentity", 151 PyObjCClass_New([OC_TestIdentity class])); 152 153} 154