[Checkins] SVN: transaction/branches/sphinx/ Coverage for Transaction commit hooks APIs.

Tres Seaver cvs-admin at zope.org
Tue Dec 18 02:41:51 UTC 2012


Log message for revision 128742:
  Coverage for Transaction commit hooks APIs.

Changed:
  _U  transaction/branches/sphinx/
  U   transaction/branches/sphinx/transaction/_transaction.py
  U   transaction/branches/sphinx/transaction/tests/test__transaction.py

-=-
Modified: transaction/branches/sphinx/transaction/_transaction.py
===================================================================
--- transaction/branches/sphinx/transaction/_transaction.py	2012-12-18 02:41:50 UTC (rev 128741)
+++ transaction/branches/sphinx/transaction/_transaction.py	2012-12-18 02:41:51 UTC (rev 128742)
@@ -305,7 +305,6 @@
             return t, v, tb
         finally:
             del t, v, tb
-        
 
     def _saveAndRaiseCommitishError(self):
         t = None
@@ -316,7 +315,6 @@
             reraise(t, v, tb)
         finally:
             del t, v, tb
-            
 
     def getBeforeCommitHooks(self):
         """ See ITransaction.

Modified: transaction/branches/sphinx/transaction/tests/test__transaction.py
===================================================================
--- transaction/branches/sphinx/transaction/tests/test__transaction.py	2012-12-18 02:41:50 UTC (rev 128741)
+++ transaction/branches/sphinx/transaction/tests/test__transaction.py	2012-12-18 02:41:51 UTC (rev 128742)
@@ -540,6 +540,80 @@
             self.assertTrue(synch._before is t)
             self.assertTrue(synch._after is t) #called in _cleanup
 
+    def test_getBeforeCommitHooks_empty(self):
+        tm = self._makeOne()
+        self.assertEqual(list(tm.getBeforeCommitHooks()), [])
+
+    def test_addBeforeCommitHook(self):
+        def _hook(*args, **kw):
+            pass
+        tm = self._makeOne()
+        tm.addBeforeCommitHook(_hook, ('one',), dict(uno=1))
+        self.assertEqual(list(tm.getBeforeCommitHooks()),
+                         [(_hook, ('one',), {'uno': 1})])
+
+    def test_addBeforeCommitHook_w_kws(self):
+        def _hook(*args, **kw):
+            pass
+        tm = self._makeOne()
+        tm.addBeforeCommitHook(_hook, ('one',))
+        self.assertEqual(list(tm.getBeforeCommitHooks()),
+                         [(_hook, ('one',), {})])
+
+    def test_getAfterCommitHooks_empty(self):
+        tm = self._makeOne()
+        self.assertEqual(list(tm.getAfterCommitHooks()), [])
+
+    def test_addAfterCommitHook(self):
+        def _hook(*args, **kw):
+            pass
+        tm = self._makeOne()
+        tm.addAfterCommitHook(_hook, ('one',), dict(uno=1))
+        self.assertEqual(list(tm.getAfterCommitHooks()),
+                         [(_hook, ('one',), {'uno': 1})])
+
+    def test_addAfterCommitHook_wo_kws(self):
+        def _hook(*args, **kw):
+            pass
+        tm = self._makeOne()
+        tm.addAfterCommitHook(_hook, ('one',))
+        self.assertEqual(list(tm.getAfterCommitHooks()),
+                         [(_hook, ('one',), {})])
+
+    def test_callAfterCommitHook_w_error(self):
+        from transaction.tests.common import DummyLogger
+        from transaction.tests.common import Monkey
+        from transaction import _transaction
+        _hooked2 = []
+        def _hook1(*args, **kw):
+            raise ValueError()
+        def _hook2(*args, **kw):
+            _hooked2.append((args, kw))
+        logger = DummyLogger()
+        with Monkey(_transaction, _LOGGER=logger):
+            tm = self._makeOne()
+        logger._clear()
+        tm.addAfterCommitHook(_hook1, ('one',))
+        tm.addAfterCommitHook(_hook2, ('two',), dict(dos=2))
+        tm._callAfterCommitHooks()
+        # second hook gets called even if first raises
+        self.assertEqual(_hooked2, [((True, 'two',), {'dos': 2})])
+        self.assertEqual(len(logger._log), 1)
+        self.assertEqual(logger._log[0][0], 'error')
+        self.assertTrue(logger._log[0][1].startswith(
+                            "Error in after commit hook"))
+
+    def test_callAfterCommitHook_w_abort(self):
+        _hooked2 = [], []
+        def _hook1(*args, **kw):
+            raise ValueError()
+        def _hook2(*args, **kw):
+            _hooked2.append((args, kw))
+        tm = self._makeOne()
+        tm.addAfterCommitHook(_hook1, ('one',))
+        tm.addAfterCommitHook(_hook2, ('two',), dict(dos=2))
+        tm._callAfterCommitHooks()
+
     def test_note(self):
         t = self._makeOne()
         try:



More information about the checkins mailing list