예제 #1
0
    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')
예제 #3
0
    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)
예제 #4
0
 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')
예제 #5
0
    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)
예제 #6
0
 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')
예제 #7
0
 def test_repr(self):
     promise = Promise()
     self.assertTrue(str(promise))
     promise.fulfill(42, 43)
     self.assertTrue(str(promise))