Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 import traceback | 6 import traceback |
| 7 import unittest | 7 import unittest |
| 8 | 8 |
| 9 | 9 |
| 10 from future import All, Future, Race | 10 from future import All, Future, Race |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 154 except_pass=(NotImplementedError,)) | 154 except_pass=(NotImplementedError,)) |
| 155 self.assertRaises(ValueError, race.Get) | 155 self.assertRaises(ValueError, race.Get) |
| 156 | 156 |
| 157 race = Race((Future(callback=throws_error), | 157 race = Race((Future(callback=throws_error), |
| 158 Future(callback=throws_error)), | 158 Future(callback=throws_error)), |
| 159 except_pass=(ValueError,)) | 159 except_pass=(ValueError,)) |
| 160 self.assertRaises(ValueError, race.Get) | 160 self.assertRaises(ValueError, race.Get) |
| 161 | 161 |
| 162 def testThen(self): | 162 def testThen(self): |
| 163 def assertIs42(val): | 163 def assertIs42(val): |
| 164 self.assertEquals(val, 42) | 164 self.assertEqual(val, 42) |
|
not at google - send to devlin
2014/08/05 18:47:18
assertEquals isn't a function, assertEqual is. how
ahernandez
2014/08/05 18:58:23
assertEquals is deprecated according to https://do
not at google - send to devlin
2014/08/05 20:01:25
not fussed. I'm constantly confused because gtest
| |
| 165 return val | |
| 165 | 166 |
| 166 then = Future(value=42).Then(assertIs42) | 167 then = Future(value=42).Then(assertIs42) |
| 167 # Shouldn't raise an error. | 168 # Shouldn't raise an error. |
| 168 then.Get() | 169 self.assertEqual(42, then.Get()) |
| 169 | 170 |
| 170 # Test raising an error. | 171 # Test raising an error. |
| 171 then = Future(value=41).Then(assertIs42) | 172 then = Future(value=41).Then(assertIs42) |
| 172 self.assertRaises(AssertionError, then.Get) | 173 self.assertRaises(AssertionError, then.Get) |
| 173 | 174 |
| 174 # Test setting up an error handler. | 175 # Test setting up an error handler. |
| 175 def handle(error): | 176 def handle(error): |
| 176 if isinstance(error, ValueError): | 177 if isinstance(error, ValueError): |
| 177 return 'Caught' | 178 return 'Caught' |
| 178 raise error | 179 raise error |
| 179 | 180 |
| 180 def raiseValueError(): | 181 def raiseValueError(): |
| 181 raise ValueError | 182 raise ValueError |
| 182 | 183 |
| 183 def raiseException(): | 184 def raiseException(): |
| 184 raise Exception | 185 raise Exception |
| 185 | 186 |
| 186 then = Future(callback=raiseValueError).Then(assertIs42, handle) | 187 then = Future(callback=raiseValueError).Then(assertIs42, handle) |
| 187 self.assertEquals(then.Get(), 'Caught') | 188 self.assertEqual('Caught', then.Get()) |
| 188 then = Future(callback=raiseException).Then(assertIs42, handle) | 189 then = Future(callback=raiseException).Then(assertIs42, handle) |
| 189 self.assertRaises(Exception, then.Get) | 190 self.assertRaises(Exception, then.Get) |
| 190 | 191 |
| 191 # Test chains of thens. | 192 # Test chains of thens. |
| 192 addOne = lambda val: val + 1 | 193 addOne = lambda val: val + 1 |
| 193 then = Future(value=40).Then(addOne).Then(addOne).Then(assertIs42) | 194 then = Future(value=40).Then(addOne).Then(addOne).Then(assertIs42) |
| 194 # Shouldn't raise an error. | 195 # Shouldn't raise an error. |
| 195 then.Get() | 196 self.assertEqual(42, then.Get()) |
| 196 | 197 |
| 197 # Test error in chain. | 198 # Test error in chain. |
| 198 then = Future(value=40).Then(addOne).Then(assertIs42).Then(addOne) | 199 then = Future(value=40).Then(addOne).Then(assertIs42).Then(addOne) |
| 199 self.assertRaises(AssertionError, then.Get) | 200 self.assertRaises(AssertionError, then.Get) |
| 200 | 201 |
| 201 # Test handle error in chain. | 202 # Test handle error in chain. |
| 202 def raiseValueErrorWithVal(val): | 203 def raiseValueErrorWithVal(val): |
| 203 raise ValueError | 204 raise ValueError |
| 204 | 205 |
| 205 then = Future(value=40).Then(addOne).Then(raiseValueErrorWithVal).Then( | 206 then = Future(value=40).Then(addOne).Then(raiseValueErrorWithVal).Then( |
| 206 addOne, handle).Then(lambda val: val + ' me') | 207 addOne, handle).Then(lambda val: val + ' me') |
| 207 self.assertEquals(then.Get(), 'Caught me') | 208 self.assertEquals(then.Get(), 'Caught me') |
| 208 | 209 |
| 209 # Test multiple handlers. | 210 # Test multiple handlers. |
| 210 def myHandle(error): | 211 def myHandle(error): |
| 211 if isinstance(error, AssertionError): | 212 if isinstance(error, AssertionError): |
| 212 return 10 | 213 return 10 |
| 213 raise error | 214 raise error |
| 214 | 215 |
| 215 then = Future(value=40).Then(assertIs42).Then(addOne, handle).Then(addOne, | 216 then = Future(value=40).Then(assertIs42).Then(addOne, handle).Then(addOne, |
| 216 myHandle) | 217 myHandle) |
| 217 self.assertEquals(then.Get(), 10) | 218 self.assertEquals(then.Get(), 10) |
| 218 | 219 |
| 220 def testThenResolvesReturnedFutures(self): | |
| 221 def returnsFortyTwo(): | |
| 222 return Future(value=42) | |
| 223 def inc(x): | |
| 224 return x + 1 | |
| 225 def incFuture(x): | |
| 226 return Future(value=x + 1) | |
| 227 | |
| 228 self.assertEqual(43, returnsFortyTwo().Then(inc).Get()) | |
| 229 self.assertEqual(43, returnsFortyTwo().Then(incFuture).Get()) | |
| 230 self.assertEqual(44, returnsFortyTwo().Then(inc).Then(inc).Get()) | |
| 231 self.assertEqual(44, returnsFortyTwo().Then(inc).Then(incFuture).Get()) | |
| 232 self.assertEqual(44, returnsFortyTwo().Then(incFuture).Then(inc).Get()) | |
| 233 self.assertEqual( | |
| 234 44, returnsFortyTwo().Then(incFuture).Then(incFuture).Get()) | |
| 235 | |
| 236 # The same behaviour should apply to error handlers. | |
| 237 def raisesSomething(): | |
| 238 def boom(): raise ValueError | |
| 239 return Future(callback=boom) | |
| 240 def shouldNotHappen(_): | |
| 241 raise AssertionError() | |
| 242 def oops(error): | |
| 243 return 'oops' | |
| 244 def oopsFuture(error): | |
| 245 return Future(value='oops') | |
| 246 | |
| 247 self.assertEqual( | |
| 248 'oops', raisesSomething().Then(shouldNotHappen, oops).Get()) | |
| 249 self.assertEqual( | |
| 250 'oops', raisesSomething().Then(shouldNotHappen, oopsFuture).Get()) | |
| 251 self.assertEqual( | |
| 252 'oops', | |
| 253 raisesSomething().Then(shouldNotHappen, raisesSomething) | |
| 254 .Then(shouldNotHappen, oops).Get()) | |
| 255 self.assertEqual( | |
| 256 'oops', | |
| 257 raisesSomething().Then(shouldNotHappen, raisesSomething) | |
| 258 .Then(shouldNotHappen, oopsFuture).Get()) | |
| 259 | |
| 219 | 260 |
| 220 if __name__ == '__main__': | 261 if __name__ == '__main__': |
| 221 unittest.main() | 262 unittest.main() |
| OLD | NEW |