blob: 6ef798b3a86304df557fd410d9df860412d05c09 [file] [log] [blame]
/* APPLE LOCAL file radar 5002848 */
/* This program tests that for mangling a property type which uses a typedef name,
the underlying type is used for name mangling. This must compile and run with
no error. */
#include <Foundation/Foundation.h>
#include <CoreData/CoreData.h>
#include <objc/runtime.h>
/* { dg-options "-framework Foundation -framework CoreData -fobjc-new-property -mmacosx-version-min=10.5" } */
/* { dg-do run { target *-*-darwin* } } */
typedef NSString StoreVersionID ;
@interface Parent : NSManagedObject
@property(retain) StoreVersionID* foo;
@end
@implementation Parent
@dynamic foo;
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSEntityDescription *fooEntity;
NSAttributeDescription* fooAttribute;
Parent* testObject;
// Parent works fine
fooEntity = [[NSEntityDescription alloc] init];
[fooEntity setName:@"FooEntity_TestingProperties"];
[fooEntity setManagedObjectClassName:@"Parent"];
fooAttribute = [[[NSAttributeDescription alloc] init] autorelease];
[fooAttribute setName:@"foo"];
[fooAttribute setAttributeType:NSStringAttributeType];
[fooEntity setProperties:[NSArray arrayWithObject:fooAttribute]];
testObject = [[NSManagedObject alloc] initWithEntity:fooEntity insertIntoManagedObjectContext:nil];
objc_property_t propMetaData = class_getProperty([Parent class], "foo");
const char* propMetaAttributes = property_getAttributes(propMetaData);
char buffer[1 + strlen(propMetaAttributes)];
strcpy(buffer, propMetaAttributes);
char *state = buffer, *attribute;
while ((attribute = strsep(&state, ",")) != NULL) {
switch (attribute[0]) {
case 'T':
if (attribute[1] != '@') {
char* end = strchr(attribute, ',');
if (end) {
end[0] = '\0';
}
NSLog(@"Excepted property type encoding of either @\"NSString\" or @\"StoreVersionID\" but instead got %s", &attribute[1]);
break;
}
break;
default: break;
}
}
[testObject release];
[fooEntity release];
[pool release];
return 0;
}