def test(store): from Foo import Foo from Bar import Bar from BarReq import BarReq # Create a Foo and a Bar that refers to it f = Foo() f.setX(3) store.addObject(f) store.saveChanges() b = Bar() b.setFoo(f) store.addObject(b) store.saveChanges() # Test fetching store.clear() results = store.fetchObjectsOfClass(Bar) assert len(results) b = results[0] f1 = b.foo() f2 = b.foo() assert f1 is not None, 'got None instead of a Foo' assert f1 is f2 # test uniqueness assert b.foo().x() == 3 # Fetch in reverse order store.clear() f = store.fetchObjectsOfClass(Foo)[0] b = store.fetchObjectsOfClass(Bar)[0] assert b.foo() is f # Test None, set, save and retrieve b.setFoo(None) store.saveChanges() store.clear() b = store.fetchObjectsOfClass(Bar)[0] assert b.foo() is None # Test the assertions in setFoo() b = BarReq() try: b.setFoo(None) except Exception: pass else: NoException('b.setFoo(None) # None not allowed') try: b.setFoo('x') except Exception: pass else: NoException('b.setFoo("x") # wrong type not allowed') try: b.setFoo(Bar()) except Exception: pass else: NoException('b.setFoo(Bar()) # wrong class not allowed') def NoException(codeString): raise Exception('Failed to raise exception for: ' + codeString)