def test_legacyRenderer(self): """ Flattening an L{IRenderer} succeeds with the same result as using the old flattener. """ class Legacy(Fragment): docFactory = stan(invisible(render=directive('foo'))) def render_foo(self, ctx, data): return '"&<>' fragment = Legacy() self.assertEqual( self.flatten(fragment), oldFlatten(fragment)) self.assertEqual( self.flatten(div(foo=fragment)), oldFlatten(div(foo=fragment)))
def test_legacyRenderer(self): """ Flattening an L{IRenderer} succeeds with the same result as using the old flattener. """ class Legacy(Fragment): docFactory = stan(invisible(render=directive('foo'))) def render_foo(self, ctx, data): return '"&<>' fragment = Legacy() self.assertEqual(self.flatten(fragment), oldFlatten(fragment)) self.assertEqual(self.flatten(div(foo=fragment)), oldFlatten(div(foo=fragment)))
def test_oldFlattenableOverriddenRend(self): """ Flattening L{Element} instances with an overridden C{rend} method flattened with the old flatten function results in the flattened version of whatever their C{rend} method returns. """ renders = [] class OldStyleElement(Element): docFactory = stan("Hello, world") def rend(self, ctx, data): return invisible(render=directive("foo"))[Element.rend( self, ctx, data)] def foo(self, request, tag): renders.append((self, request)) return p[tag] renderer(foo) result = [] element = OldStyleElement() request = FakeRequest() context = WovenContext() context.remember(request) finished = oldFlatten(element, context, result.append, lambda ign: ign) def cbFinished(ignored): self.assertEqual("".join(result), "<p>Hello, world</p>") self.assertEqual(renders, [(element, request)]) finished.addCallback(cbFinished) return finished
def test_oldFlattenableOverriddenRend(self): """ Flattening L{Element} instances with an overridden C{rend} method flattened with the old flatten function results in the flattened version of whatever their C{rend} method returns. """ renders = [] class OldStyleElement(Element): docFactory = stan("Hello, world") def rend(self, ctx, data): return invisible(render=directive("foo"))[Element.rend(self, ctx, data)] def foo(self, request, tag): renders.append((self, request)) return p[tag] renderer(foo) result = [] element = OldStyleElement() request = FakeRequest() context = WovenContext() context.remember(request) finished = oldFlatten(element, context, result.append, lambda ign: ign) def cbFinished(ignored): self.assertEqual("".join(result), "<p>Hello, world</p>") self.assertEqual(renders, [(element, request)]) finished.addCallback(cbFinished) return finished
def test_oldFlattenable(self): """ Flattening L{Element} instances with the old flatten function results in the flattened version of whatever their C{render} method returns. """ result = [] element = Element() element.docFactory = stan(['"&<>']) request = FakeRequest() context = WovenContext() context.remember(request) finished = oldFlatten(element, context, result.append, lambda ign: ign) finished.addCallback(lambda ign: "".join(result)) finished.addCallback(self.assertEqual, '"&<>') return finished
def test_oldFlattenableInAttribute(self): """ Flattening a L{Element} as the value of an attribute of a L{Tag} XML attribute escapes the element's flattened document. """ result = [] element = Element() element.docFactory = stan(['"&<>']) request = FakeRequest() context = WovenContext() context.remember(request) finished = oldFlatten(p(foo=element), context, result.append, lambda ign: ign) finished.addCallback(lambda ign: "".join(result)) finished.addCallback(self.assertEqual, '<p foo=""&<>"></p>') return finished
def test_oldFlattenableError(self): """ If the old flattener encounters an asynchronous Failure while flattening an L{IRenderable}, the returned L{Deferred} fires with the failure. """ result = Deferred() element = Element() element.docFactory = stan(result) request = FakeRequest() context = WovenContext() context.remember(request) accumulator = [] finished = oldFlatten(element, context, accumulator.append, lambda ign: ign) result.addErrback(lambda err: err.trap(RuntimeError)) finished = self.assertFailure(finished, RuntimeError) result.errback(RuntimeError("test error")) return finished