Permalink
Browse files

Add basic tests for CommandChainDispatcher

  • Loading branch information...
1 parent 189ff13 commit aca86345382a3b8d2fd8822e25d44cde4859cb17 @bfroehle committed Jun 7, 2012
Showing with 75 additions and 0 deletions.
  1. +75 −0 IPython/core/tests/test_hooks.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+"""Tests for CommandChainDispatcher."""
+
+from __future__ import absolute_import
+
+#-----------------------------------------------------------------------------
+# Imports
+#-----------------------------------------------------------------------------
+
+import nose.tools as nt
+from IPython.core.error import TryNext
+from IPython.core.hooks import CommandChainDispatcher
+
+#-----------------------------------------------------------------------------
+# Local utilities
+#-----------------------------------------------------------------------------
+
+# Define two classes, one which succeeds and one which raises TryNext. Each
+# sets the attribute `called` to True when it is called.
+class Okay(object):
+ def __init__(self, message):
+ self.message = message
+ self.called = False
+ def __call__(self):
+ self.called = True
+ return self.message
+
+class Fail(object):
+ def __init__(self, message):
+ self.message = message
+ self.called = False
+ def __call__(self):
+ self.called = True
+ raise TryNext(self.message)
+
+#-----------------------------------------------------------------------------
+# Test functions
+#-----------------------------------------------------------------------------
+
+def test_command_chain_dispatcher_ff():
+ """Test two failing hooks"""
+ fail1 = Fail(u'fail1')
+ fail2 = Fail(u'fail2')
+ dp = CommandChainDispatcher([(0, fail1),
+ (10, fail2)])
+
+ try:
+ dp()
+ except TryNext as e:
+ nt.assert_equal(str(e), u'fail2')
+ else:
+ assert False, "Expected exception was not raised."
+
+ nt.assert_true(fail1.called)
+ nt.assert_true(fail2.called)
+
+def test_command_chain_dispatcher_fofo():
+ """Test a mixture of failing and succeeding hooks."""
+ fail1 = Fail(u'fail1')
+ fail2 = Fail(u'fail2')
+ okay1 = Okay(u'okay1')
+ okay2 = Okay(u'okay2')
+
+ dp = CommandChainDispatcher([(0, fail1),
+ # (5, okay1), # add this later
+ (10, fail2),
+ (15, okay2)])
+ dp.add(okay1, 5)
+
+ nt.assert_equal(dp(), u'okay1')
+
+ nt.assert_true(fail1.called)
+ nt.assert_true(okay1.called)
+ nt.assert_false(fail2.called)
+ nt.assert_false(okay2.called)

0 comments on commit aca8634

Please sign in to comment.