1#! /usr/bin/python 2 3from PyObjCTools.TestSupport import * 4import objc 5 6import Foundation 7import CoreData 8 9class CoreDataTestObject (CoreData.NSManagedObject): 10 def __getattr__(self, k): 11 raise AttributeError(k) 12 13 def __setattr__(self, k, v): 14 super(CoreDataTestObject, self).__setattr__(k, v) 15 16 pass 17 18class Test (TestCase): 19 def setUp(self): 20 self.entity = CoreData.NSEntityDescription.new() 21 self.entity.setName_('TestEntity') 22 23 self.attribute = CoreData.NSAttributeDescription.new() 24 self.attribute.setName_('testAttribute') 25 self.attribute.setAttributeType_(CoreData.NSStringAttributeType) 26 27 self.entity.setProperties_([self.attribute]) 28 29 self.managedObjectModel = CoreData.NSManagedObjectModel.new() 30 self.managedObjectModel.setEntities_([self.entity]) 31 32 self.persistentStoreCoordinator = CoreData.NSPersistentStoreCoordinator.alloc().initWithManagedObjectModel_(self.managedObjectModel) 33 self.persistentStoreCoordinator.addPersistentStoreWithType_configuration_URL_options_error_(CoreData.NSInMemoryStoreType, None, None, None, None) 34 35 self.managedObjectContext = CoreData.NSManagedObjectContext.new() 36 self.managedObjectContext.setPersistentStoreCoordinator_(self.persistentStoreCoordinator) 37 38 def testModeledAttribute(self): 39 managedObject = CoreData.NSManagedObject.alloc().initWithEntity_insertIntoManagedObjectContext_(self.entity, self.managedObjectContext) 40 41 testValue = u'FooBarBaz' 42 43 managedObject.setValue_forKey_(testValue, u'testAttribute') 44 45 self.assertEquals(testValue, managedObject.valueForKey_(u'testAttribute')) 46 self.assertEquals(testValue, managedObject._.testAttribute) 47 48 testValue = u'BobFred' 49 managedObject.setValue_forKey_(testValue, u'testAttribute') 50 51 self.assertEquals(testValue, managedObject.valueForKey_(u'testAttribute')) 52 self.assertEquals(testValue, managedObject._.testAttribute) 53 54 testValue = u'Zebras have long legs.' 55 managedObject.testAttribute = testValue 56 57 self.assertEquals(testValue, managedObject.valueForKey_(u'testAttribute')) 58 self.assertEquals(testValue, managedObject._.testAttribute) 59 60 def testPythonicAttribute(self): 61 managedObject = CoreData.NSManagedObject.alloc().initWithEntity_insertIntoManagedObjectContext_(self.entity, self.managedObjectContext) 62 63 testValue = u'Ducks have webbed feet' 64 self.assertRaises(AttributeError, setattr, managedObject, 'attributeWithoutModel', testValue) 65 return 66 67 # XXX: this test is invalid, you cannot add arbitrary attributes 68 # to an object that is fully implemented in ObjC. 69 managedObject.attributeWithoutModel = testValue 70 71 self.assertEquals(testValue, managedObject.attributeWithoutModel) 72 73 self.assertRaises(Foundation.NSUnknownKeyException, managedObject.valueForKey_(u'attributeWithoutModel')) 74 75class TestSubclass (TestCase): 76 def setUp(self): 77 self.entity = CoreData.NSEntityDescription.new() 78 self.entity.setName_('TestObject') 79 self.entity.setManagedObjectClassName_('CoreDataTestObject') 80 81 self.attribute = CoreData.NSAttributeDescription.new() 82 self.attribute.setName_('testAttribute') 83 self.attribute.setAttributeType_(CoreData.NSStringAttributeType) 84 85 self.entity.setProperties_([self.attribute]) 86 87 self.managedObjectModel = CoreData.NSManagedObjectModel.new() 88 self.managedObjectModel.setEntities_([self.entity]) 89 90 self.persistentStoreCoordinator = CoreData.NSPersistentStoreCoordinator.alloc().initWithManagedObjectModel_(self.managedObjectModel) 91 self.persistentStoreCoordinator.addPersistentStoreWithType_configuration_URL_options_error_(CoreData.NSInMemoryStoreType, None, None, None, None) 92 93 self.managedObjectContext = CoreData.NSManagedObjectContext.new() 94 self.managedObjectContext.setPersistentStoreCoordinator_(self.persistentStoreCoordinator) 95 96 def testModeledAttribute(self): 97 managedObject = CoreDataTestObject.alloc().initWithEntity_insertIntoManagedObjectContext_(self.entity, self.managedObjectContext) 98 self.assert_(isinstance(managedObject, CoreDataTestObject)) 99 100 testValue = u'FooBarBaz' 101 102 managedObject.setValue_forKey_(testValue, u'testAttribute') 103 104 self.assertEquals(testValue, managedObject.valueForKey_(u'testAttribute')) 105 self.assertEquals(testValue, managedObject._.testAttribute) 106 107 testValue = u'BobFred' 108 managedObject.setValue_forKey_(testValue, u'testAttribute') 109 110 self.assertEquals(testValue, managedObject.valueForKey_(u'testAttribute')) 111 self.assertEquals(testValue, managedObject._.testAttribute) 112 113 self.assert_('testAttribute' not in managedObject.__dict__) 114 115 testValue = u'Zebras have long legs.' 116 managedObject._.testAttribute = testValue 117 118 self.assertEquals(testValue, managedObject.valueForKey_(u'testAttribute')) 119 self.assertEquals(testValue, managedObject._.testAttribute) 120 121 def testPythonicAttribute(self): 122 #self.fail("research recursion problem") 123 managedObject = CoreDataTestObject.alloc().initWithEntity_insertIntoManagedObjectContext_(self.entity, self.managedObjectContext) 124 self.assert_(isinstance(managedObject, CoreDataTestObject)) 125 126 testValue = u'Ducks have webbed feet' 127 managedObject.attributeWithoutModel = testValue 128 129 self.assertEquals(testValue, managedObject.attributeWithoutModel) 130 self.assert_('attributeWithoutModel' in managedObject.__dict__) 131 132 133if __name__ == "__main__": 134 main() 135