Ticket #5527: twisted-web-test-util.3.diff

File twisted-web-test-util.3.diff, 3.2 KB (added by tom.prince, 5 years ago)

Simpified patch.

  • twisted/web/test/test_testutil.py

     
     1# Copyright (c) Twisted Matrix Laboratories.
     2# See LICENSE for details.
     3
     4"""
     5Tests for L{twisted.web.testutil}.
     6"""
     7
     8from twisted.trial.unittest import TestCase
     9
     10from twisted.web.server import NOT_DONE_YET
     11from twisted.web.resource import Resource
     12from twisted.web.testutil import render, makeTestRequest
     13
     14
     15class RenderTestCase(TestCase):
     16    """
     17    Tests for L{render}.
     18    """
     19
     20    def test_render(self):
     21        request = makeTestRequest()
     22        class TestResource(Resource):
     23            def render(self, request):
     24                return "test-result"
     25        d = render(TestResource(), request)
     26        def cbRendered(res):
     27            self.assertEqual(res, "test-result")
     28        d.addCallback(cbRendered)
     29        return d
     30
     31
     32    def test_render_write(self):
     33        request = makeTestRequest()
     34        class TestResource(Resource):
     35            def render(self, request):
     36                request.write("test-result")
     37                return ""
     38        d = render(TestResource(), request)
     39        def cbRendered(res):
     40            self.assertEqual(res, "test-result")
     41        d.addCallback(cbRendered)
     42        return d
     43
     44    def test_render_NOT_DONE_YET(self):
     45        request = makeTestRequest()
     46        class TestResource(Resource):
     47            def render(self, request):
     48                return NOT_DONE_YET
     49        d = render(TestResource(), request)
     50        def cbRendered(res):
     51            self.assertEqual(res, "test-result")
     52        d.addCallback(cbRendered)
     53        request.write("test-result")
     54        request.finish()
     55        return d
  • twisted/web/testutil.py

     
     1# Copyright (c) Twisted Matrix Laboratories.
     2# See LICENSE for details.
     3
     4"""
     5General helpers for L{twisted.web} unit tests.
     6"""
     7
     8from cStringIO import StringIO
     9
     10from twisted.internet.defer import succeed
     11from twisted.web import server
     12
     13from twisted.web.test.test_web import DummyChannel #FIXME
     14
     15def render(resource, request):
     16    result = resource.render(request)
     17    if isinstance(result, str):
     18        request.write(result)
     19        request.finish()
     20        return succeed(request.written.getvalue())
     21    elif result is server.NOT_DONE_YET:
     22        if request.finished:
     23            return succeed(request.written.getvalue())
     24        else:
     25            d = request.notifyFinish()
     26            d.addCallback(lambda _: request.written.getvalue())
     27            return d
     28    else:
     29        raise ValueError("Unexpected return value: %r" % (result,))
     30
     31class _TestRequest(server.Request):
     32    def __init__(self):
     33        server.Request.__init__(self, DummyChannel(), False)
     34        self.written = StringIO()
     35        self.content = StringIO()
     36        self.method = 'GET'
     37
     38    def write(self, data):
     39        self.written.write(data)
     40
     41def makeTestRequest():
     42    return _TestRequest()