Index: chrome/common/extensions/docs/server2/future_test.py |
diff --git a/chrome/common/extensions/docs/server2/future_test.py b/chrome/common/extensions/docs/server2/future_test.py |
index 440994bbabecdf2a94e1fc56fb006a16098b3277..1c188d1ccdf6f25e2dd4cfceb0cb7b749de1a743 100755 |
--- a/chrome/common/extensions/docs/server2/future_test.py |
+++ b/chrome/common/extensions/docs/server2/future_test.py |
@@ -159,6 +159,63 @@ class FutureTest(unittest.TestCase): |
except_pass=(ValueError,)) |
self.assertRaises(ValueError, race.Get) |
+ def testThen(self): |
+ def assertIs42(val): |
+ self.assertEquals(val, 42) |
+ |
+ then = Future(value=42).Then(assertIs42) |
+ # Shouldn't raise an error. |
+ then.Get() |
+ |
+ # Test raising an error. |
+ then = Future(value=41).Then(assertIs42) |
+ self.assertRaises(AssertionError, then.Get) |
+ |
+ # Test setting up an error handler. |
+ def handle(error): |
+ if isinstance(error, ValueError): |
+ return 'Caught' |
+ raise error |
+ |
+ def raiseValueError(): |
+ raise ValueError |
+ |
+ def raiseException(): |
+ raise Exception |
+ |
+ then = Future(callback=raiseValueError).Then(assertIs42, handle) |
+ self.assertEquals(then.Get(), 'Caught') |
+ then = Future(callback=raiseException).Then(assertIs42, handle) |
+ self.assertRaises(Exception, then.Get) |
+ |
+ # Test chains of thens. |
+ addOne = lambda val: val + 1 |
+ then = Future(value=40).Then(addOne).Then(addOne).Then(assertIs42) |
+ # Shouldn't raise an error. |
+ then.Get() |
+ |
+ # Test error in chain. |
+ then = Future(value=40).Then(addOne).Then(assertIs42).Then(addOne) |
+ self.assertRaises(AssertionError, then.Get) |
+ |
+ # Test handle error in chain. |
+ def raiseValueErrorWithVal(val): |
+ raise ValueError |
+ |
+ then = Future(value=40).Then(addOne).Then(raiseValueErrorWithVal).Then( |
+ addOne, handle).Then(lambda val: val + ' me') |
+ self.assertEquals(then.Get(), 'Caught me') |
+ |
+ # Test multiple handlers. |
+ def myHandle(error): |
+ if isinstance(error, AssertionError): |
+ return 10 |
+ raise error |
+ |
+ then = Future(value=40).Then(assertIs42).Then(addOne, handle).Then(addOne, |
+ myHandle) |
+ self.assertEquals(then.Get(), 10) |
+ |
if __name__ == '__main__': |
unittest.main() |