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