From 90140c1d043e61da7fcc4290bcc8179dd15d3b3c Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Tue, 5 Oct 2004 15:12:54 +0000 Subject: [PATCH] Fix issue 286. --- browser/tests/test_displaywidget.py | 84 +++++++++++++++++++++++++++++ browser/widget.py | 6 +-- 2 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 browser/tests/test_displaywidget.py diff --git a/browser/tests/test_displaywidget.py b/browser/tests/test_displaywidget.py new file mode 100644 index 0000000..8d54d05 --- /dev/null +++ b/browser/tests/test_displaywidget.py @@ -0,0 +1,84 @@ +############################################################################## +# +# Copyright (c) 2001, 2002 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## +"""Generic Text Widgets tests + +$Id: test_widgetdocs.py 27082 2004-08-12 20:03:58Z srichter $ +""" +import unittest +from zope.interface.verify import verifyClass +from zope.interface.exceptions import DoesNotImplement +from zope.publisher.browser import TestRequest +from zope.schema import TextLine +from zope.testing.doctestunit import DocTestSuite + +from zope.app.form.browser.widget import DisplayWidget + + +def test_implemented_interfaces(): + """Make sure that the display widget implements the correct interfaces. + + Like all browser-used widgets, DisplayWidget must implement + `IBrowserWidget`. + + >>> from zope.app.form.browser.interfaces import IBrowserWidget + >>> verifyClass(IBrowserWidget, DisplayWidget) + True + + But unlike most other widgets in this package, the display widget is *not* + an `IInputWidget`. + + >>> from zope.app.form.interfaces import IInputWidget + >>> try: + ... verifyClass(IInputWidget, DisplayWidget) + ... except DoesNotImplement: + ... 'not implemented' + 'not implemented' + """ + +def test_value_escaping(): + """Make sure that the returned values are correctly escaped. + + First we need to create a field that is the context of the display widget. + >>> field = TextLine(title = u'Title', + ... __name__ = u'title', + ... default = u'') + + >>> field = field.bind(None) + + Now we are ready to instantiate our widget. + + >>> widget = DisplayWidget(field, TestRequest()) + + If no data was specified in the widget, the field's default value will be + chosen. + + >>> widget() + u'<My Title>' + + Now let's set a value and make sure that, when output, it is also + correctly escaped. + + >>> widget.setRenderedValue(u'') + >>> widget() + u'<Another Title>' + """ + + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(DocTestSuite()) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='test_suite') diff --git a/browser/widget.py b/browser/widget.py index 2e4a5d0..83c0a16 100644 --- a/browser/widget.py +++ b/browser/widget.py @@ -19,7 +19,7 @@ import re, cgi import traceback -from xml.sax.saxutils import quoteattr +from xml.sax.saxutils import quoteattr, escape from zope.interface import implements from zope.schema.interfaces import ValidationError @@ -401,9 +401,9 @@ class DisplayWidget(BrowserWidget): def __call__(self): if self._renderedValueSet(): - return self._data + return escape(self._data) else: - return self.context.default + return escape(self.context.default) def renderTag(tag, **kw):