Annotation of ExtFile/tests/testProxyTM.py, revision 1.1

1.1     ! dwinter     1: #
        !             2: # Tests TMRegistry and ProxyTM
        !             3: #
        !             4: 
        !             5: import os, sys
        !             6: if __name__ == '__main__':
        !             7:     execfile(os.path.join(sys.path[0], 'framework.py'))
        !             8: 
        !             9: from Testing import ZopeTestCase
        !            10: 
        !            11: from OFS.SimpleItem import SimpleItem
        !            12: from Products.ExtFile import transaction
        !            13: from Products.ExtFile.TM import TMRegistry, registry
        !            14: from Products.ExtFile.TM import ProxyTM
        !            15: 
        !            16: 
        !            17: class Target(SimpleItem):
        !            18:     begin_called = 0
        !            19:     finish_called = 0
        !            20:     abort_called = 0
        !            21:     def _begin(self):
        !            22:         self.begin_called = 1
        !            23:     def _finish(self):
        !            24:         self.finish_called = 1
        !            25:     def _abort(self):
        !            26:         self.abort_called = 1
        !            27: 
        !            28: def tr():
        !            29:     t = transaction.get()
        !            30:     if hasattr(t, '_objects'):
        !            31:         return t._objects   # ZODB <= 3.2
        !            32:     elif hasattr(t, '_resources'):
        !            33:         return t._resources # ZODB >= 3.4
        !            34: 
        !            35: 
        !            36: class TestTMRegistry(ZopeTestCase.TestCase):
        !            37: 
        !            38:     def afterSetUp(self):
        !            39:         self.reg = TMRegistry()
        !            40: 
        !            41:     def testRegister(self):
        !            42:         self.assertEqual(len(self.reg), 0)
        !            43:         self.reg.register(Target())
        !            44:         self.assertEqual(len(self.reg), 1)
        !            45:         self.reg.register(Target())
        !            46:         self.assertEqual(len(self.reg), 2)
        !            47: 
        !            48:     def testCount(self):
        !            49:         self.assertEqual(self.reg.count(), 0)
        !            50:         self.reg.register(Target())
        !            51:         self.assertEqual(self.reg.count(), 1)
        !            52:         self.reg.register(Target())
        !            53:         self.assertEqual(self.reg.count(), 2)
        !            54: 
        !            55:     def testContains(self):
        !            56:         target1, target2 = Target(), Target()
        !            57:         self.reg.register(target1)
        !            58:         self.reg.register(target2)
        !            59:         self.failUnless(self.reg.contains(target1))
        !            60:         self.failUnless(self.reg.contains(target2))
        !            61: 
        !            62:     def testRemove(self):
        !            63:         target1, target2 = Target(), Target()
        !            64:         self.reg.register(target1)
        !            65:         self.reg.register(target2)
        !            66:         self.reg.remove(target1)
        !            67:         self.reg.remove(target2)
        !            68:         self.failIf(self.reg.contains(target1))
        !            69:         self.failIf(self.reg.contains(target2))
        !            70: 
        !            71:     def testGet(self):
        !            72:         target1 = Target()
        !            73:         self.reg.register(target1)
        !            74:         tm = self.reg.get(target1)
        !            75:         self.failUnless(isinstance(tm, ProxyTM))
        !            76:         self.assertEqual(target1, tm._target)
        !            77: 
        !            78: 
        !            79: class TestProxyTM(ZopeTestCase.Sandboxed, ZopeTestCase.TestCase):
        !            80: 
        !            81:     def testRegister(self):
        !            82:         tm = ProxyTM(Target())
        !            83:         self.assertEqual(len(tr()), 0)
        !            84:         tm._register()
        !            85:         self.assertEqual(len(tr()), 1)
        !            86:         try:
        !            87:             self.assertEqual(tr()[0].manager, tm)
        !            88:         except AttributeError:
        !            89:             pass # ZODB <= 3.2
        !            90: 
        !            91:     def testLastRegisteredComesFirst(self):
        !            92:         tm1, tm2 = ProxyTM(Target()), ProxyTM(Target())
        !            93:         tm1._register()
        !            94:         tm2._register()
        !            95:         self.assertEqual(len(tr()), 2)
        !            96:         # Now make sure that tm2 comes first in the
        !            97:         # transaction's _resources list
        !            98:         try:
        !            99:             self.assertEqual(tr()[0].manager, tm2)
        !           100:             self.assertEqual(tr()[1].manager, tm1)
        !           101:         except AttributeError:
        !           102:             pass # ZODB <= 3.2
        !           103: 
        !           104:     def testBeginIsForwarded(self):
        !           105:         target = Target()
        !           106:         registry.register(target)
        !           107:         tm = registry.get(target)
        !           108:         tm._begin()
        !           109:         self.failUnless(target.begin_called)
        !           110: 
        !           111:     def testFinishIsForwarded(self):
        !           112:         target = Target()
        !           113:         registry.register(target)
        !           114:         tm = registry.get(target)
        !           115:         tm._finish()
        !           116:         self.failUnless(target.finish_called)
        !           117:         # _finish removes the TM from the registry
        !           118:         self.failIf(registry.contains(target))
        !           119: 
        !           120:     def testAbortIsForwarded(self):
        !           121:         target = Target()
        !           122:         registry.register(target)
        !           123:         tm = registry.get(target)
        !           124:         tm._abort()
        !           125:         self.failUnless(target.abort_called)
        !           126:         # _abort removes the TM from the registry
        !           127:         self.failIf(registry.contains(target))
        !           128: 
        !           129:     def testCommitCallsFinish(self):
        !           130:         target = Target()
        !           131:         registry.register(target)
        !           132:         transaction.commit()
        !           133:         self.failUnless(target.finish_called)
        !           134:         # _finish removes the TM from the registry
        !           135:         self.failIf(registry.contains(target))
        !           136: 
        !           137:     def testAbortCallsAbort(self):
        !           138:         target = Target()
        !           139:         registry.register(target)
        !           140:         transaction.abort()
        !           141:         self.failUnless(target.abort_called)
        !           142:         # _abort removes the TM from the registry
        !           143:         self.failIf(registry.contains(target))
        !           144: 
        !           145: 
        !           146: def test_suite():
        !           147:     from unittest import TestSuite, makeSuite
        !           148:     suite = TestSuite()
        !           149:     suite.addTest(makeSuite(TestTMRegistry))
        !           150:     suite.addTest(makeSuite(TestProxyTM))
        !           151:     return suite
        !           152: 
        !           153: if __name__ == '__main__':
        !           154:     framework()
        !           155: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>