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

File twisted-web-test-util.3.diff, 3.2 KB (added by tom.prince, 3 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()