def test_response(self): promise = Promise() self.assertFalse(promise.done(), 'promise is not ready') response = Response(promise) self.assertFalse(response.done(), 'response is not ready') promise.fulfill(httplib2.Response({'status': 200,}), 'hello world') self.assertTrue(promise.done(), 'promise is ready') self.assertTrue(response.done(), 'response is ready') # wait doesn't block response.wait() self.assertTrue('status' in response, 'status missing') self.assertEqual(response['status'], 200, 'unexpected status item') self.assertEqual(response.status, 200, 'unexpected status attr') self.assertEqual(response.keys(), ['status'], 'unexpected keys') self.assertEqual(response.values(), [200], 'unexpected values') self.assertEqual(response.items(), [('status', 200)], 'unexpected values') self.assertEqual(len(response), 1, 'unexpected len') self.assertTrue(iter(response), 'iter failed') response['status'] = 304 self.assertEqual(response['status'], 304, 'unexpected status item after set') response.status = 404 self.assertEqual(response.status, 404, 'unexpected status attr after set') del response['status'] self.assertFalse('status' in response, 'status item not gone')
def test_response(self): promise = Promise() self.assertFalse(promise.done(), 'promise is not ready') response = Response(promise) self.assertFalse(response.done(), 'response is not ready') promise.fulfill(httplib2.Response({ 'status': 200, }), 'hello world') self.assertTrue(promise.done(), 'promise is ready') self.assertTrue(response.done(), 'response is ready') # wait doesn't block response.wait() self.assertTrue('status' in response, 'status missing') self.assertEqual(response['status'], 200, 'unexpected status item') self.assertEqual(response.status, 200, 'unexpected status attr') self.assertEqual(response.keys(), ['status'], 'unexpected keys') self.assertEqual(response.values(), [200], 'unexpected values') self.assertEqual(response.items(), [('status', 200)], 'unexpected values') self.assertEqual(len(response), 1, 'unexpected len') self.assertTrue(iter(response), 'iter failed') response['status'] = 304 self.assertEqual(response['status'], 304, 'unexpected status item after set') response.status = 404 self.assertEqual(response.status, 404, 'unexpected status attr after set') del response['status'] self.assertFalse('status' in response, 'status item not gone')
def test_callback(self): def callback(promise): promise.called = True promise = Promise(callback) promise.fulfill(42, 43) self.assertEqual(promise.get_response(), 42) self.assertEqual(promise.get_content(), 43) self.assertTrue(promise.called)
def test_set_and_flag(self): promise = Promise() self.assertFalse(promise.done(), 'promise does not start done') delay = 0.1 WaitAndSet(promise, 42, 43, delay).start() start = datetime.now() self.assertFalse(promise.done(), 'promise still not done') self.assertEqual(promise.get_response(), 42, 'expected response') self.assertEqual(promise.get_content(), 43, 'expected content') duration = datetime.now() - start min = timedelta(seconds=delay - 0.1) max = timedelta(seconds=delay + 0.1) self.assertTrue(min < duration and duration < max, 'took around 1s to get response and content') self.assertTrue(promise.done(), 'promise now done')
def test_callback_error_handling(self): class BooException(Exception): pass def failing_callback(promise): raise BooException('hoo!') promise = Promise(failing_callback) promise.fulfill(42, 43) self.assertIsInstance(promise.exception, BooException) self.assertRaises(BooException, promise.get_response) self.assertRaises(BooException, promise.get_content) class HooException(Exception): pass e = HooException('blah!') promise.fulfill(43, 44, (e.__class__, e, None)) self.assertIsInstance(promise.exception, HooException) self.assertRaises(HooException, promise.get_response) self.assertRaises(HooException, promise.get_content)
def test_done(self): promise = Promise() self.assertFalse(promise.done(), 'promise does not start done') promise.fulfill(42, 43) self.assertTrue(promise.done(), 'promise is done after call to fulfill')
def test_repr(self): promise = Promise() self.assertTrue(str(promise)) promise.fulfill(42, 43) self.assertTrue(str(promise))