[Zope3-checkins] CVS: Zope3/src/zope/app/form/tests - test_widget_geddon_deprecations.py:1.1 test_utility.py:1.15

Jim Fulton jim@zope.com
Thu, 5 Jun 2003 16:13:10 -0400


Update of /cvs-repository/Zope3/src/zope/app/form/tests
In directory cvs.zope.org:/tmp/cvs-serv24717/src/zope/app/form/tests

Modified Files:
	test_utility.py 
Added Files:
	test_widget_geddon_deprecations.py 
Log Message:
Changed the way widgets are created and stored in forms.
Widgets (views on fields) were stored in attributes with the same
names as the fields. This led to conflicts with other view attribute
names in some cases. Now widgets are stored in attributes with names
equal to the field name with an added suffix of '_widget'. For
example, the widget for a title field is named "title_widget".


=== Added File Zope3/src/zope/app/form/tests/test_widget_geddon_deprecations.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (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.
#
##############################################################################
"""XXX short summary goes here.

$Id: test_widget_geddon_deprecations.py,v 1.1 2003/06/05 20:13:09 jim Exp $
"""

from zope.testing.doctestunit import DocTestSuite
from zope.publisher.browser import TestRequest
from zope.app.form import utility
from zope.app.form.widget import Widget, CustomWidget
from zope.schema import Text
from zope.schema.interfaces import IText
from zope.app.tests.placelesssetup import setUp, tearDown
from zope.component.view import provideView
from zope.publisher.interfaces.browser import IBrowserPresentation
import warnings

class TestView:

    bar = CustomWidget(Widget, uncle='bob')
    
    def __init__(self, context, request):
        self.context, self.request = context, request

class TestWidget:
    
    def __init__(self, context, request):
        self.context, self.request = context, request

    def __call__(self):
        return '42'

theField = Text(__name__="foo")


def test_widget_in_wrong_name():
    """
    >>> warned = None
    >>> def fakewarn(*args, **kw):
    ...     global warned
    ...     warned = args

    >>> utility.warn = fakewarn
    
    >>> request = TestRequest()
    >>> view = TestView(None, request)
    >>> view.foo = Widget(theField, request)
    >>> int(hasattr(view, 'foo_widget'))
    0

    >>> warned
    >>> utility.setUpWidget(view, 'foo', Text())

    >>> print warned[0]
    View (TestView) saved a widget (foo) without a '_widget' suffix.
    Url: http://127.0.0.1

    >>> warned[1].__name__
    'DeprecationWarning'

    >>> int(hasattr(view, 'foo_widget'))
    1

    >>> utility.warn = warnings.warn
    """

def test_widget_gets_warning_w_custom_widget_in_wrong_name():
    """
    >>> warned = None
    >>> def fakewarn(*args, **kw):
    ...     global warned
    ...     warned = args

    >>> utility.warn = fakewarn

    >>> request = TestRequest()
    >>> view = TestView(None, request)
    >>> int(hasattr(view, 'bar_widget'))
    0


    >>> warned
    >>> utility.setUpWidget(view, 'bar', Text())

    >>> print warned[0]
    View (TestView) saved a widget (bar) without a '_widget' suffix.
    Url: http://127.0.0.1

    >>> warned[1].__name__
    'DeprecationWarning'

    >>> view.bar_widget.uncle
    'bob'

    Make sure we updated the old attr:

    >>> view.bar.uncle
    'bob'

    >>> utility.warn = warnings.warn
    """

def test_clients_using_wrong_name():
    """
    >>> warned = None
    >>> def fakewarn(*args, **kw):
    ...     global warned
    ...     warned = args

    >>> utility.warn = fakewarn

    >>> setUp()
    >>> provideView(IText, 'test', IBrowserPresentation, TestWidget)

    >>> request = TestRequest()
    >>> view = TestView(None, request)
    >>> utility.setUpWidget(view, 'foo', Text(), vname='test')
    >>> view.foo_widget()
    '42'
    >>> warned
    >>> view.foo()
    '42'

    >>> print warned[0]
    View (TestView) saved a widget (foo) without a '_widget' suffix.
    Url: http://127.0.0.1

    >>> warned[1].__name__
    'DeprecationWarning'
    
    >>> tearDown()
    """

def test_suite(): return DocTestSuite()
if __name__ == '__main__': unittest.main()


=== Zope3/src/zope/app/form/tests/test_utility.py 1.14 => 1.15 ===
--- Zope3/src/zope/app/form/tests/test_utility.py:1.14	Wed Jun  4 07:13:48 2003
+++ Zope3/src/zope/app/form/tests/test_utility.py	Thu Jun  5 16:13:09 2003
@@ -75,12 +75,12 @@
 
 class ViewWithCustomTitleWidgetFactory(BrowserView):
 
-    def title(self, context, request):
+    def title_widget(self, context, request):
         w = W(context, request)
         w.custom = 1
         return w
 
-    directlyProvides(title, IViewFactory)
+    directlyProvides(title_widget, IViewFactory)
 
 def kw(**kw):
     return kw
@@ -129,8 +129,8 @@
         request = TestRequest()
         view = BrowserView(c, request)
         setUpWidget(view, 'title', I['title'])
-        self.assertEqual(view.title(), u'title: ')
-        self.assertEqual(view.title.getData(), None)
+        self.assertEqual(view.title_widget(), u'title: ')
+        self.assertEqual(view.title_widget.getData(), None)
 
 
     def test_setUpWidget_w_request_data(self):
@@ -139,8 +139,8 @@
         request.form['field.title'] = u'xxx'
         view = BrowserView(c, request)
         setUpWidget(view, 'title', I['title'])
-        self.assertEqual(view.title(), u'title: xxx')
-        self.assertEqual(view.title.getData(), u'xxx')
+        self.assertEqual(view.title_widget(), u'title: xxx')
+        self.assertEqual(view.title_widget.getData(), u'xxx')
 
     def test_setUpWidget_w_request_data_and_initial_data(self):
         c = C()
@@ -148,8 +148,8 @@
         request.form['field.title'] = u'xxx'
         view = BrowserView(c, request)
         setUpWidget(view, 'title', I['title'], u'yyy')
-        self.assertEqual(view.title(), u'title: xxx')
-        self.assertEqual(view.title.getData(), u'xxx')
+        self.assertEqual(view.title_widget(), u'title: xxx')
+        self.assertEqual(view.title_widget.getData(), u'xxx')
 
     def test_setUpWidget_w_request_data_and_initial_data_force(self):
         c = C()
@@ -157,16 +157,16 @@
         request.form['field.title'] = u'xxx'
         view = BrowserView(c, request)
         setUpWidget(view, 'title', I['title'], u'yyy', force=1)
-        self.assertEqual(view.title(), u'title: yyy')
-        self.assertEqual(view.title.getData(), u'xxx')
+        self.assertEqual(view.title_widget(), u'title: yyy')
+        self.assertEqual(view.title_widget.getData(), u'xxx')
 
     def test_setUpWidget_w_initial_data(self):
         c = C()
         request = TestRequest()
         view = BrowserView(c, request)
         setUpWidget(view, 'title', I['title'], u'yyy')
-        self.assertEqual(view.title(), u'title: yyy')
-        self.assertEqual(view.title.getData(), None)
+        self.assertEqual(view.title_widget(), u'title: yyy')
+        self.assertEqual(view.title_widget.getData(), None)
 
     def test_setUpWidget_w_bad_initial_data(self):
         c = C()
@@ -179,35 +179,35 @@
         c = C()
         request = TestRequest()
         view = BrowserView(c, request)
-        view.title = w = W(I['title'], request)
+        view.title_widget = w = W(I['title'], request)
         setUpWidget(view, 'title', I['title'], u'yyy')
-        self.assertEqual(view.title(), u'title: yyy')
-        self.assertEqual(view.title.getData(), None)
-        self.assertEqual(view.title, w)
+        self.assertEqual(view.title_widget(), u'title: yyy')
+        self.assertEqual(view.title_widget.getData(), None)
+        self.assertEqual(view.title_widget, w)
 
     def test_setUpWidget_w_Custom_widget(self):
         c = C()
         request = TestRequest()
         view = ViewWithCustomTitleWidgetFactory(c, request)
         setUpWidget(view, 'title', I['title'], u'yyy')
-        self.assertEqual(view.title(), u'title: yyy')
-        self.assertEqual(view.title.getData(), None)
-        self.assertEqual(view.title.custom, 1)
+        self.assertEqual(view.title_widget(), u'title: yyy')
+        self.assertEqual(view.title_widget.getData(), None)
+        self.assertEqual(view.title_widget.custom, 1)
 
     def test_setupWidgets(self):
         c = C()
         request = TestRequest()
         view = BrowserView(c, request)
         setUpWidgets(view, I)
-        self.assertEqual(view.title(), u'title: ')
-        self.assertEqual(view.description(), u'description: ')
+        self.assertEqual(view.title_widget(), u'title: ')
+        self.assertEqual(view.description_widget(), u'description: ')
 
     def test_setupWidgets_via_names(self):
         c = C()
         request = TestRequest()
         view = BrowserView(c, request)
         setUpWidgets(view, I, names=['title'])
-        self.assertEqual(view.title(), u'title: ')
+        self.assertEqual(view.title_widget(), u'title: ')
         self.failIf(hasattr(view, 'description'))
 
     def test_setupWidgets_bad_field_name(self):
@@ -225,18 +225,18 @@
         request = TestRequest()
         view = BrowserView(c, request)
         setUpWidgets(view, I, prefix='spam')
-        self.assertEqual(view.title.prefix, 'spam')
-        self.assertEqual(view.description.prefix, 'spam')
+        self.assertEqual(view.title_widget.prefix, 'spam')
+        self.assertEqual(view.description_widget.prefix, 'spam')
 
     def test_setupWidgets_w_initial_data_and_custom_widget(self):
         c = C()
         request = TestRequest()
         view = BrowserView(c, request)
-        view.title = w = W(I['title'], request)
+        view.title_widget = w = W(I['title'], request)
         setUpWidgets(view, I, initial=kw(title=u"ttt", description=u"ddd"))
-        self.assertEqual(view.title(), u'title: ttt')
-        self.assertEqual(view.description(), u'description: ddd')
-        self.assertEqual(view.title, w)
+        self.assertEqual(view.title_widget(), u'title: ttt')
+        self.assertEqual(view.description_widget(), u'description: ddd')
+        self.assertEqual(view.title_widget, w)
 
     def test_setupWidgets_w_initial_data_and_request_data(self):
         c = C()
@@ -244,7 +244,7 @@
         request.form['field.title'] = u'yyy'
         view = BrowserView(c, request)
         setUpWidgets(view, I, initial=kw(title=u"ttt", description=u"ddd"))
-        self.assertEqual(view.title(), u'title: yyy')
+        self.assertEqual(view.title_widget(), u'title: yyy')
 
     def test_setupWidgets_w_initial_data_forced_and_request_data(self):
         c = C()
@@ -253,7 +253,7 @@
         view = BrowserView(c, request)
         setUpWidgets(view, I, force=1,
                      initial=kw(title=u"ttt", description=u"ddd"))
-        self.assertEqual(view.title(), u'title: ttt')
+        self.assertEqual(view.title_widget(), u'title: ttt')
 
     def test_setupEditWidgets_w_custom_widget(self):
         c = C()
@@ -261,11 +261,11 @@
         c.description = u'cd'
         request = TestRequest()
         view = BrowserView(c, request)
-        view.title = w = W(I['title'], request)
+        view.title_widget = w = W(I['title'], request)
         setUpEditWidgets(view, I)
-        self.assertEqual(view.title(), u'title: ct')
-        self.assertEqual(view.description(), u'description: cd')
-        self.assertEqual(view.title, w)
+        self.assertEqual(view.title_widget(), u'title: ct')
+        self.assertEqual(view.description_widget(), u'description: cd')
+        self.assertEqual(view.title_widget, w)
 
     def test_setupEditWidgets_w_form_data(self):
         c = C()
@@ -276,8 +276,8 @@
         request.form['field.description'] = u'fd'
         view = BrowserView(c, request)
         setUpEditWidgets(view, I)
-        self.assertEqual(view.title(), u'title: ft')
-        self.assertEqual(view.description(), u'description: fd')
+        self.assertEqual(view.title_widget(), u'title: ft')
+        self.assertEqual(view.description_widget(), u'description: fd')
 
     def test_setupEditWidgets_via_names(self):
         c = C()
@@ -286,7 +286,7 @@
         request.form['field.title'] = u'ft'
         view = BrowserView(c, request)
         setUpEditWidgets(view, I, names=['title'])
-        self.assertEqual(view.title(), u'title: ft')
+        self.assertEqual(view.title_widget(), u'title: ft')
         self.failIf(hasattr(view, 'description'))
 
     def test_setupEditWidgets_and_accessors(self):
@@ -296,8 +296,8 @@
         request = TestRequest()
         view = BrowserView(c, request)
         setUpEditWidgets(view, Ia)
-        self.assertEqual(view.getTitle(), u'getTitle: ct')
-        self.assertEqual(view.getDescription(), u'getDescription: cd')
+        self.assertEqual(view.getTitle_widget(), u'getTitle: ct')
+        self.assertEqual(view.getDescription_widget(), u'getDescription: cd')
 
     def test_setupWidgets_bad_field_name(self):
         c = C()
@@ -319,8 +319,8 @@
         request.form['field.description'] = u'ft'
         view = BrowserView(c, request)
         setUpEditWidgets(view, I, force=1)
-        self.assertEqual(view.title(), u'title: ct')
-        self.assertEqual(view.description(), u'description: cd')
+        self.assertEqual(view.title_widget(), u'title: ct')
+        self.assertEqual(view.description_widget(), u'description: cd')
 
     def test_setupEditWidgets_w_custom_widget_and_prefix(self):
         c = C()
@@ -328,11 +328,11 @@
         c.description = u'cd'
         request = TestRequest()
         view = BrowserView(c, request)
-        view.title = w = W(I['title'], request)
+        view.title_widget = w = W(I['title'], request)
         setUpEditWidgets(view, I, prefix='eggs')
-        self.assertEqual(view.title.prefix, 'eggs')
-        self.assertEqual(view.description.prefix, 'eggs')
-        self.assertEqual(view.title, w)
+        self.assertEqual(view.title_widget.prefix, 'eggs')
+        self.assertEqual(view.description_widget.prefix, 'eggs')
+        self.assertEqual(view.title_widget, w)
 
     def test_setupEditWidgets_w_other_data(self):
         c = C()
@@ -342,16 +342,16 @@
         request = TestRequest()
         view = BrowserView(c, request)
         setUpEditWidgets(view, I)
-        self.assertEqual(view.title(), u'title: ')
-        self.assertEqual(view.description(), u'description: ')
+        self.assertEqual(view.title_widget(), u'title: ')
+        self.assertEqual(view.description_widget(), u'description: ')
         setUpEditWidgets(view, I, c2)
-        self.assertEqual(view.title(), u'title: ct')
-        self.assertEqual(view.description(), u'description: cd')
+        self.assertEqual(view.title_widget(), u'title: ct')
+        self.assertEqual(view.description_widget(), u'description: cd')
 
         view = BrowserView(c2, request)
         setUpEditWidgets(view, I)
-        self.assertEqual(view.title(), u'title: ct')
-        self.assertEqual(view.description(), u'description: cd')
+        self.assertEqual(view.title_widget(), u'title: ct')
+        self.assertEqual(view.description_widget(), u'description: cd')
 
     def test_setupEditWidgets_w_bad_data(self):
         class Forbidden(AttributeError): pass
@@ -376,8 +376,8 @@
         request.form['field.title'] = u'ft'
         view = BrowserView(c, request)
         setUpWidgets(view, I, initial=kw(title=u"ttt", description=u"ddd"))
-        self.assertEqual(view.title(), u'title: ft')
-        self.assertEqual(view.description(), u'description: ddd')
+        self.assertEqual(view.title_widget(), u'title: ft')
+        self.assertEqual(view.description_widget(), u'description: ddd')
 
 
     def test_getWidgetsData(self):