##############################################################################
#
# 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.
#
##############################################################################
"""Support Functions for Widget Functional Tests
$Id: support.py 37569 2005-07-29 21:10:06Z poster $
"""
import re
from zope.configuration import xmlconfig
def registerEditForm(schema, widgets={}):
"""Registers an edit form for the specified schema.
widgets is a mapping of field name to dict. The dict for each field must
contain a 'class' item, which is the widget class, and any additional
widget attributes (e.g. text field size, rows, cols, etc.)
"""
widgetsXml = []
for field in widgets:
widgetsXml.append('')
xmlconfig.string("""
%s
""" % (schema.__identifier__, ''.join(widgetsXml)))
def defineSecurity(class_, schema):
class_ = '%s.%s' % (class_.__module__, class_.__name__)
schema = schema.__identifier__
xmlconfig.string("""
""" % (class_, schema, schema))
def defineWidgetView(field_interface, widget_class, view_type):
field_interface = field_interface.__identifier__
widget_class = '%s.%s' % (widget_class.__module__, widget_class.__name__)
view_type = '%s.%s' % (view_type.__module__, view_type.__name__)
xmlconfig.string("""
""" % (field_interface, widget_class, view_type))
def patternExists(pattern, source, flags=0):
return re.search(pattern, source, flags) is not None
def validationErrorExists(field, error_msg, source):
regex = re.compile(r'%s.*?name="field.(\w+)(?:\.[\w\.]+)?"' % (error_msg,),
re.DOTALL)
# compile it first because Python 2.3 doesn't allow flags in findall
return field in regex.findall(source)
def missingInputErrorExists(field, source):
return validationErrorExists(field, 'Required input is missing.', source)
def invalidValueErrorExists(field, source):
# assumes this error is displayed for select elements
return patternExists(
'Invalid value.*name="field.%s".*' % field,
source, re.DOTALL)
def updatedMsgExists(source):
return patternExists('
Updated .*
', source)