Skip to content

Commit

Permalink
make the controlFactory use a configurable set of classes
Browse files Browse the repository at this point in the history
  • Loading branch information
benji-york committed Aug 19, 2006
1 parent 9b62e75 commit cdf8652
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 19 deletions.
43 changes: 27 additions & 16 deletions forms.py
Expand Up @@ -72,22 +72,6 @@ def getForm(forms, id=None, name=None, action=None, index=None):

return disambiguate(matching_forms, '', index)

def controlFactory(control, form, browser):
if isinstance(control, ClientForm.Item):
# it is a subcontrol
return ItemControl(control, form, browser)
else:
t = control.type
if t in ('checkbox', 'select', 'radio'):
return ListControl(control, form, browser)
elif t in ('submit', 'submitbutton'):
return SubmitControl(control, form, browser)
elif t=='image':
return ImageControl(control, form, browser)
else:
return Control(control, form, browser)


class Control(SetattrErrorsMixin):
"""A control of a form."""
interface.implements(interfaces.IControl)
Expand Down Expand Up @@ -385,3 +369,30 @@ def getControl(self, label=None, name=None, index=None):
include_subcontrols=True)
control, form = disambiguate(intermediate, msg, index)
return controlFactory(control, form, self.browser)


class ControlFactory(object):
def __init__(self, listControlClass, submitControlClass,
imageControlClass, controlClass):
self.listControlClass = listControlClass
self.submitControlClass = submitControlClass
self.imageControlClass = imageControlClass
self.controlClass = controlClass

def __call__(self, control, form, browser):
if isinstance(control, ClientForm.Item):
# it is a subcontrol
return ItemControl(control, form, browser)
else:
t = control.type
if t in ('checkbox', 'select', 'radio'):
return self.listControlClass(control, form, browser)
elif t in ('submit', 'submitbutton'):
return self.submitControlClass(control, form, browser)
elif t=='image':
return self.imageControlClass(control, form, browser)
else:
return self.controlClass(control, form, browser)

controlFactory = ControlFactory(ListControl, SubmitControl, ImageControl,
Control)
20 changes: 17 additions & 3 deletions real/real.py
Expand Up @@ -12,15 +12,13 @@
#
##############################################################################
"""Browser-based Functional Doctests
$Id$
"""
__docformat__ = "reStructuredText"
from BeautifulSoup import BeautifulSoup
from StringIO import StringIO
from zope.testbrowser import interfaces
from zope.testbrowser.forms import getControl, getForm, getAllControls, \
controlFactory
ControlFactory, ListControl, SubmitControl, ImageControl, Control
from zope.testbrowser.real.proxy import ServerManager, PROXY_PORT
from zope.testbrowser.utilities import disambiguate, zeroOrOne, \
SetattrErrorsMixin, PystoneTimer
Expand All @@ -33,6 +31,22 @@
except ImportError:
from dummymodules import interface

class RealListControl(ListControl):
pass

class RealSubmitControl(SubmitControl):
pass

class RealImageControl(ImageControl):
pass

class RealControl(Control):
pass

controlFactory = ControlFactory(RealListControl, RealSubmitControl,
RealImageControl, RealControl)


class DummyResponse(object):
def __init__(self, contents, url):
self.stringIo = StringIO(contents)
Expand Down

0 comments on commit cdf8652

Please sign in to comment.