Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / common / extensions / docs / server2 / future_test.py
blob3b31a0c7d89ec9d46be5680c9b0048338ad4512d
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
6 import traceback
7 import unittest
9 from future import Future
11 class FutureTest(unittest.TestCase):
12 def testNoValueOrDelegate(self):
13 self.assertRaises(ValueError, Future)
15 def testValue(self):
16 future = Future(value=42)
17 self.assertEqual(42, future.Get())
18 self.assertEqual(42, future.Get())
20 def testDelegateValue(self):
21 assertFalse = self.assertFalse
22 class delegate(object):
23 def __init__(self):
24 self._get_called = False
25 def Get(self):
26 assertFalse(self._get_called)
27 self._get_called = True
28 return 42
30 future = Future(delegate=delegate())
31 self.assertEqual(42, future.Get())
32 self.assertEqual(42, future.Get())
34 def testErrorThrowingDelegate(self):
35 class FunkyException(Exception):
36 pass
38 # Set up a chain of functions to test the stack trace.
39 def qux():
40 raise FunkyException()
41 def baz():
42 return qux()
43 def bar():
44 return baz()
45 def foo():
46 return bar()
47 chain = [foo, bar, baz, qux]
49 assertFalse = self.assertFalse
50 class delegate(object):
51 def __init__(self):
52 self._get_called = False
53 def Get(self):
54 assertFalse(self._get_called)
55 self._get_called = True
56 return foo()
58 fail = self.fail
59 assertTrue = self.assertTrue
60 def assert_raises_full_stack(future, err):
61 try:
62 future.Get()
63 fail('Did not raise %s' % err)
64 except Exception as e:
65 assertTrue(isinstance(e, err))
66 stack = traceback.format_exc()
67 assertTrue(all(stack.find(fn.__name__) != -1 for fn in chain))
69 future = Future(delegate=delegate())
70 assert_raises_full_stack(future, FunkyException)
71 assert_raises_full_stack(future, FunkyException)
73 if __name__ == '__main__':
74 unittest.main()