From cdf8652494f3265ba3ecfedfd053bc2cbbc8f001 Mon Sep 17 00:00:00 2001 From: Benji York Date: Sat, 19 Aug 2006 13:06:04 +0000 Subject: [PATCH] make the controlFactory use a configurable set of classes --- forms.py | 43 +++++++++++++++++++++++++++---------------- real/real.py | 20 +++++++++++++++++--- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/forms.py b/forms.py index db00d26..1dd5a8b 100644 --- a/forms.py +++ b/forms.py @@ -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) @@ -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) diff --git a/real/real.py b/real/real.py index c507a42..df5893b 100644 --- a/real/real.py +++ b/real/real.py @@ -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 @@ -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)