[Zope3-checkins] CVS: ZODB4/Persistence/tests - testModule.py:1.16
Jeremy Hylton
jeremy@zope.com
Thu, 19 Sep 2002 14:26:10 -0400
Update of /cvs-repository/ZODB4/Persistence/tests
In directory cvs.zope.org:/tmp/cvs-serv23085/Persistence/tests
Modified Files:
testModule.py
Log Message:
Add tests of reload() that cause objects to get re-created.
=== ZODB4/Persistence/tests/testModule.py 1.15 => 1.16 ===
--- ZODB4/Persistence/tests/testModule.py:1.15 Thu Jul 18 18:41:57 2002
+++ ZODB4/Persistence/tests/testModule.py Thu Sep 19 14:26:10 2002
@@ -1,9 +1,11 @@
import os
import unittest
-from ZODB.MappingStorage import DB
+from ZODB.MappingStorage import DB, MappingStorage
from ZODB.utils import U64
+import ZODB.DB
+from Persistence.PersistentDict import PersistentDict
from Persistence.Module import PersistentModuleImporter
from Persistence import tests
from Transaction import get_transaction
@@ -189,6 +191,72 @@
j = o.m()
self.assertEqual(i + 1, j)
+class TestModuleReload(unittest.TestCase):
+
+ def setUp(self):
+ self.storage = MappingStorage()
+ self.open()
+ _dir, _file = os.path.split(tests.__file__)
+ self._pmtest = os.path.join(_dir, "_pmtest.py")
+
+ def open(self):
+ # open a new db and importer from the storage
+ self.db = ZODB.DB.DB(self.storage)
+ self.root = self.db.open().root()
+ self.importer = PersistentModuleImporter(self.root, verbose=1)
+ self.importer.install()
+
+ def close(self):
+ self.importer.uninstall()
+ self.db.close()
+
+ def testModuleReload(self):
+ self.importer.module_from_file("pmtest", self._pmtest)
+ get_transaction().commit()
+ import pmtest
+ pmtest._p_deactivate()
+ self.assertEqual(pmtest.a, 1)
+ pmtest.f(4)
+ self.close()
+ pmtest._p_deactivate()
+ self.open()
+ reload(pmtest)
+
+ def testClassReload(self):
+ self.importer.module_from_source("foo", src)
+ get_transaction().commit()
+ import foo
+ obj = foo.Foo()
+ obj.m()
+ self.root["d"] = d = PersistentDict()
+ d["m"] = obj
+ get_transaction().commit()
+ self.close()
+ foo._p_deactivate()
+ self.open()
+ reload(foo)
+
+## def testToplevelClassReload(self):
+## # XXX This test fails because you can't load the root if there
+## # is a persistent module in it.
+## self.importer.module_from_source("foo", src)
+## get_transaction().commit()
+## import foo
+## obj = foo.Foo()
+## obj.m()
+## self.root["m"] = obj
+## get_transaction().commit()
+## self.close()
+## foo._p_deactivate()
+## self.open()
+## reload(foo)
+
+def test_suite():
+ s = unittest.TestSuite()
+ for klass in TestModule, TestModuleReload:
+ s.addTest(unittest.makeSuite(klass))
+ return s
+
src = """\
from Persistence.Class import PersistentBaseClass
@@ -199,6 +267,3 @@
self.x += 1
return self.x
"""
-
-def test_suite():
- return unittest.makeSuite(TestModule)