############################################################################# # # 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. # ############################################################################## """Form Directives Tests $Id: test_directives.py 67630 2006-04-27 00:54:03Z jim $ """ import os import unittest from cStringIO import StringIO from zope import component from zope.component.interfaces import ComponentLookupError from zope.configuration.xmlconfig import xmlconfig, XMLConfig from zope.traversing.interfaces import TraversalError from zope.interface import Interface, implements from zope.publisher.browser import TestRequest from zope.schema import TextLine, Int from zope.security.proxy import ProxyFactory import zope.app.component import zope.app.form.browser import zope.app.publisher.browser from zope.app.form.browser import TextWidget from zope.app.testing.placelesssetup import PlacelessSetup from zope.app.form.tests import utils tests_path = os.path.join( os.path.dirname(zope.app.publisher.browser.__file__), 'tests') template = """ %s """ request = TestRequest() class Schema(Interface): text = TextLine( title=u'Text', description=u'Nice text', required=False) class IC(Schema): pass class Ob(object): implements(IC) unwrapped_ob = Ob() ob = utils.securityWrap(unwrapped_ob, IC) class ISomeWidget(Interface): displayWidth = Int( title=u"Display Width", default=20, required=True) class SomeWidget(TextWidget): implements(ISomeWidget) class Test(PlacelessSetup, unittest.TestCase): def setUp(self): super(Test, self).setUp() XMLConfig('meta.zcml', zope.app.component)() XMLConfig('meta.zcml', zope.app.form.browser)() XMLConfig('meta.zcml', zope.app.publisher.browser)() from zope.app.testing import ztapi from zope.traversing.adapters import DefaultTraversable from zope.traversing.interfaces import ITraversable component.provideAdapter(DefaultTraversable, (None,), ITraversable) def testAddForm(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='add.html'), None) xmlconfig(StringIO(template % (""" """))) v = component.getMultiAdapter((ob, request), name='add.html') # expect to fail as standard macros are not configured self.assertRaises(TraversalError, v) def testEditForm(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='edit.html'), None) xmlconfig(StringIO(template % (""" """))) v = component.getMultiAdapter((ob, request), name='edit.html') # expect to fail as standard macros are not configured self.assertRaises(TraversalError, v) def testEditFormWithMenu(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='edit.html'), None) xmlconfig(StringIO(template % (''' '''))) v = component.queryMultiAdapter((ob, request), name='edit.html') # expect to fail as standard macros are not configured self.assertRaises(TraversalError, v) def testSchemaDisplay(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='view.html'), None) xmlconfig(StringIO(template % (''' '''))) v = component.queryMultiAdapter((ob, request), name='view.html') # expect to fail as standard macros are not configured self.assertRaises(TraversalError, v) def testAddFormWithWidget(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='add.html'), None) xmlconfig(StringIO(template % (''' ''')), ) view = component.queryMultiAdapter((ob, request), name='add.html') self.assert_(hasattr(view, 'text_widget')) self.assert_(isinstance(view.text_widget, SomeWidget)) self.assertEqual(view.text_widget.extra, u'foo') self.assertEqual(view.text_widget.displayWidth, 30) def testEditFormWithWidget(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='edit.html'), None) xmlconfig(StringIO(template % (''' ''')), ) view = component.queryMultiAdapter((ob, request), name='edit.html') self.assert_(hasattr(view, 'text_widget')) self.assert_(isinstance(view.text_widget, SomeWidget)) self.assertEqual(view.text_widget.extra, u'foo') self.assertEqual(view.text_widget.displayWidth, 30) def testSchemaDisplayWithWidget(self): self.assertEqual( component.queryMultiAdapter((ob, request), name='view.html'), None) xmlconfig(StringIO(template % (''' '''))) view = component.queryMultiAdapter((ob, request), name='view.html') self.assert_(hasattr(view, 'text_widget')) self.assert_(isinstance(view.text_widget, SomeWidget)) self.assertEqual(view.text_widget.extra, u'foo') self.assertEqual(view.text_widget.displayWidth, 30) def test_suite(): loader=unittest.TestLoader() return loader.loadTestsFromTestCase(Test) if __name__=='__main__': unittest.TextTestRunner().run(test_suite())