Commit da47d69e authored by Martijn Faassen's avatar Martijn Faassen

Eliminated dependency on zope.app.testing (we still need it indirectly

now as zope.app.component needs it, and we still need that).
parent 8c4f9794
[buildout] [buildout]
develop = . develop = . zope.app.container
parts = test parts = test
[test] [test]
......
...@@ -59,7 +59,11 @@ setup(name='zope.container', ...@@ -59,7 +59,11 @@ setup(name='zope.container',
], include_dirs=['include']), ], include_dirs=['include']),
], ],
extras_require=dict(test=['zope.app.testing']), # we don't need zope.app.testing, but zope.app.component does and
# doesn't declare the dependency, and we need zope.app.component for
# testing
extras_require=dict(test=['zope.app.testing',
'zope.app.component']),
install_requires=['setuptools', install_requires=['setuptools',
'zope.interface', 'zope.interface',
'zope.app.publisher', 'zope.app.publisher',
......
...@@ -6,8 +6,8 @@ of items that can be placed in containers or on the types of ...@@ -6,8 +6,8 @@ of items that can be placed in containers or on the types of
containers an item can be placed in. We express these constraints in containers an item can be placed in. We express these constraints in
interfaces. Let's define some container and item interfaces: interfaces. Let's define some container and item interfaces:
>>> from zope.app.container.interfaces import IContainer, IContained >>> from zope.container.interfaces import IContainer, IContained
>>> from zope.app.container.constraints import containers, contains >>> from zope.container.constraints import containers, contains
>>> class IBuddyFolder(IContainer): >>> class IBuddyFolder(IContainer):
... contains('.IBuddy') ... contains('.IBuddy')
...@@ -35,7 +35,7 @@ folders: ...@@ -35,7 +35,7 @@ folders:
>>> class BuddyFolder: >>> class BuddyFolder:
... interface.implements(IBuddyFolder) ... interface.implements(IBuddyFolder)
>>> from zope.app.container.constraints import checkObject, checkFactory >>> from zope.container.constraints import checkObject, checkFactory
>>> from zope.component.factory import Factory >>> from zope.component.factory import Factory
>>> checkObject(BuddyFolder(), 'x', Buddy()) >>> checkObject(BuddyFolder(), 'x', Buddy())
......
...@@ -146,14 +146,14 @@ def dispatchToSublocations(object, event): ...@@ -146,14 +146,14 @@ def dispatchToSublocations(object, event):
Now we'll register it: Now we'll register it:
>>> from zope.app.testing import ztapi >>> from zope import component
>>> ztapi.subscribe([None, IObjectMovedEvent], None, handler) >>> component.provideHandler(handler, [None, IObjectMovedEvent])
We also register our dispatcher: We also register our dispatcher:
>>> ztapi.subscribe([None, IObjectMovedEvent], None, >>> component.provideHandler(dispatchToSublocations,
... dispatchToSublocations) ... [None, IObjectMovedEvent])
We can then call the dispatcher for the root object: We can then call the dispatcher for the root object:
>>> event = ObjectRemovedEvent(c) >>> event = ObjectRemovedEvent(c)
...@@ -382,14 +382,13 @@ def setitem(container, setitemf, name, object): ...@@ -382,14 +382,13 @@ def setitem(container, setitemf, name, object):
>>> from zope.container.interfaces import IObjectAddedEvent >>> from zope.container.interfaces import IObjectAddedEvent
>>> from zope.container.interfaces import IObjectMovedEvent >>> from zope.container.interfaces import IObjectMovedEvent
>>> from zope.app.testing import ztapi
>>> ztapi.subscribe([IItem, IObjectAddedEvent], None,
... lambda obj, event: obj.setAdded(event))
>>> ztapi.subscribe([IItem, IObjectMovedEvent], None,
... lambda obj, event: obj.setMoved(event))
>>> from zope import component
>>> component.provideHandler(lambda obj, event: obj.setAdded(event),
... [IItem, IObjectAddedEvent])
>>> component.provideHandler(lambda obj, event: obj.setMoved(event),
... [IItem, IObjectMovedEvent])
>>> item = Item() >>> item = Item()
>>> container = {} >>> container = {}
......
import os ##############################################################################
from zope.app.testing.functional import ZCMLLayer #
# Copyright (c) 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.
#
##############################################################################
"""Unit test logic for setting up and tearing down basic infrastructure
AppContainerLayer = ZCMLLayer( $Id: placelesssetup.py 95341 2009-01-28 15:59:18Z wosc $
os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'), """
__name__, 'AppContainerLayer', allow_teardown=True) from zope import component
from zope.component.testing import PlacelessSetup as CAPlacelessSetup
from zope.component.eventtesting import PlacelessSetup as EventPlacelessSetup
from zope.traversing.interfaces import ITraversable
import zope.traversing.testing
from zope.container.interfaces import IWriteContainer, INameChooser
from zope.container.contained import NameChooser
from zope.container.interfaces import ISimpleReadContainer
from zope.container.traversal import ContainerTraversable
# XXX we would like to swap the names of the *PlacelessSetup classes
# in here as that would seem to follow the convention better, but
# unfortunately that would break compatibility with zope.app.testing
# (which expects this PlacelessSetup) so it will have to wait.
class PlacelessSetup(object):
def setUp(self):
component.provideAdapter(NameChooser, (IWriteContainer,), INameChooser)
class ContainerPlacelessSetup(CAPlacelessSetup,
EventPlacelessSetup,
PlacelessSetup):
def setUp(self, doctesttest=None):
CAPlacelessSetup.setUp(self)
EventPlacelessSetup.setUp(self)
PlacelessSetup.setUp(self)
ps = ContainerPlacelessSetup()
setUp = ps.setUp
def tearDown():
tearDown_ = ps.tearDown
def tearDown(doctesttest=None):
tearDown_()
return tearDown
tearDown = tearDown()
del ps
class ContainerPlacefulSetup(ContainerPlacelessSetup):
def setUp(self, doctesttest=None):
ContainerPlacelessSetup.setUp(self, doctesttest)
zope.traversing.testing.setUp()
component.provideAdapter(ContainerTraversable,
(ISimpleReadContainer,), ITraversable)
def tearDown(self, docttesttest=None):
ContainerPlacelessSetup.tearDown(self)
##############################################################################
#
# Copyright (c) 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.
#
##############################################################################
"""Unit test logic for setting up and tearing down basic infrastructure
$Id$
"""
from zope.app.testing import ztapi
from zope.container.interfaces import IWriteContainer, INameChooser
from zope.container.contained import NameChooser
class PlacelessSetup(object):
def setUp(self):
ztapi.provideAdapter(IWriteContainer, INameChooser, NameChooser)
...@@ -18,8 +18,8 @@ $Id$ ...@@ -18,8 +18,8 @@ $Id$
from unittest import TestCase, main, makeSuite, TestSuite from unittest import TestCase, main, makeSuite, TestSuite
from zope.interface.verify import verifyObject from zope.interface.verify import verifyObject
from zope.testing.doctestunit import DocTestSuite from zope.testing.doctestunit import DocTestSuite
from zope.app.testing import placelesssetup from zope.component.testing import setUp, tearDown
from test_icontainer import TestSampleContainer from zope.container.tests.test_icontainer import TestSampleContainer
from zope.container.btree import BTreeContainer from zope.container.btree import BTreeContainer
from zope.container.interfaces import IBTreeContainer from zope.container.interfaces import IBTreeContainer
...@@ -169,8 +169,8 @@ def test_suite(): ...@@ -169,8 +169,8 @@ def test_suite():
makeSuite(TestBTreeContainer), makeSuite(TestBTreeContainer),
makeSuite(TestBTreeSpecials), makeSuite(TestBTreeSpecials),
DocTestSuite('zope.container.btree', DocTestSuite('zope.container.btree',
setUp=placelesssetup.setUp, setUp=setUp,
tearDown=placelesssetup.tearDown), tearDown=tearDown),
)) ))
if __name__=='__main__': if __name__=='__main__':
......
...@@ -26,7 +26,7 @@ import zope.interface ...@@ -26,7 +26,7 @@ import zope.interface
from zope.testing import doctest from zope.testing import doctest
from zope.container.contained import ContainedProxy from zope.container.contained import ContainedProxy
from zope.app.testing import placelesssetup from zope.container import testing
class MyOb(Persistent): class MyOb(Persistent):
pass pass
...@@ -319,8 +319,8 @@ def test_ContainedProxy_instances_have_no_instance_dictionaries(): ...@@ -319,8 +319,8 @@ def test_ContainedProxy_instances_have_no_instance_dictionaries():
def test_suite(): def test_suite():
return unittest.TestSuite(( return unittest.TestSuite((
doctest.DocTestSuite('zope.container.contained', doctest.DocTestSuite('zope.container.contained',
setUp=placelesssetup.setUp, setUp=testing.setUp,
tearDown=placelesssetup.tearDown), tearDown=testing.tearDown),
doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE), doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE),
)) ))
......
...@@ -16,12 +16,15 @@ ...@@ -16,12 +16,15 @@
$Id$ $Id$
""" """
import unittest import unittest
from zope.container.traversal import ContainerTraverser from zope.interface import Interface, implements
from zope.container.interfaces import IReadContainer from zope import component
from zope.app.testing import ztapi, placelesssetup
from zope.publisher.interfaces import NotFound from zope.publisher.interfaces import NotFound
from zope.publisher.browser import TestRequest from zope.publisher.browser import TestRequest
from zope.interface import implements from zope.publisher.interfaces.browser import IDefaultBrowserLayer
from zope.container.traversal import ContainerTraverser
from zope.container.interfaces import IReadContainer
from zope.container import testing
class TestContainer(object): class TestContainer(object):
implements(IReadContainer) implements(IReadContainer)
...@@ -40,7 +43,7 @@ class View(object): ...@@ -40,7 +43,7 @@ class View(object):
self.request = request self.request = request
class TraverserTest(placelesssetup.PlacelessSetup, unittest.TestCase): class TraverserTest(testing.ContainerPlacelessSetup, unittest.TestCase):
# The following two methods exist, so that other container traversers can # The following two methods exist, so that other container traversers can
# use these tests as a base. # use these tests as a base.
...@@ -60,7 +63,9 @@ class TraverserTest(placelesssetup.PlacelessSetup, unittest.TestCase): ...@@ -60,7 +63,9 @@ class TraverserTest(placelesssetup.PlacelessSetup, unittest.TestCase):
# Create the traverser # Create the traverser
self.traverser = self._getTraverser(foo2, self.request) self.traverser = self._getTraverser(foo2, self.request)
# Define a simple view for the container # Define a simple view for the container
ztapi.browserView(IReadContainer, 'viewfoo', View) component.provideAdapter(
View, (IReadContainer, IDefaultBrowserLayer), Interface,
name='viewfoo')
def test_itemTraversal(self): def test_itemTraversal(self):
self.assertEqual( self.assertEqual(
......
...@@ -19,14 +19,14 @@ from unittest import TestCase, main, makeSuite ...@@ -19,14 +19,14 @@ from unittest import TestCase, main, makeSuite
from zope.interface.verify import verifyObject from zope.interface.verify import verifyObject
from zope.container.interfaces import IContainer from zope.container.interfaces import IContainer
from zope.app.testing import placelesssetup from zope.container import testing
def DefaultTestData(): def DefaultTestData():
return [('3', '0'), ('2', '1'), ('4', '2'), ('6', '3'), ('0', '4'), return [('3', '0'), ('2', '1'), ('4', '2'), ('6', '3'), ('0', '4'),
('5', '5'), ('1', '6'), ('8', '7'), ('7', '8'), ('9', '9')] ('5', '5'), ('1', '6'), ('8', '7'), ('7', '8'), ('9', '9')]
class BaseTestIContainer(placelesssetup.PlacelessSetup): class BaseTestIContainer(testing.ContainerPlacelessSetup):
"""Base test cases for containers. """Base test cases for containers.
Subclasses must define a makeTestObject that takes no Subclasses must define a makeTestObject that takes no
......
...@@ -25,7 +25,7 @@ from zope.copypastemove import ObjectCopier ...@@ -25,7 +25,7 @@ from zope.copypastemove import ObjectCopier
from zope.copypastemove.interfaces import IObjectCopier from zope.copypastemove.interfaces import IObjectCopier
from zope.app.component.testing import PlacefulSetup from zope.app.component.testing import PlacefulSetup
from zope.app.testing import setup from zope.container import testing
from zope.app.folder import Folder from zope.app.folder import Folder
class File(object): class File(object):
...@@ -33,11 +33,16 @@ class File(object): ...@@ -33,11 +33,16 @@ class File(object):
def test_copy_events(): def test_copy_events():
""" """
Prepare the setup:: Prepare an IObjectCopier::
>>> root = setup.placefulSetUp(site=True) >>> from zope import component
>>> zope.component.provideAdapter(ObjectCopier, (None,), IObjectCopier) >>> component.provideAdapter(ObjectCopier, (None,), IObjectCopier)
We set things up in a root folder::
>>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Prepare some objects:: Prepare some objects::
>>> folder = Folder() >>> folder = Folder()
...@@ -50,7 +55,7 @@ def test_copy_events(): ...@@ -50,7 +55,7 @@ def test_copy_events():
Now make a copy:: Now make a copy::
>>> clearEvents() >>> clearEvents()
>>> copier = IObjectCopier(foo) >>> copier = IObjectCopier(foo)
>>> copier.copyTo(folder, u'bar') >>> copier.copyTo(folder, u'bar')
u'bar' u'bar'
...@@ -71,10 +76,6 @@ def test_copy_events(): ...@@ -71,10 +76,6 @@ def test_copy_events():
True True
>>> events[0].original is root[u'foo'] >>> events[0].original is root[u'foo']
True True
Finally, tear down::
>>> setup.placefulTearDown()
""" """
...@@ -204,7 +205,8 @@ class ObjectCopierTest(PlacefulSetup, TestCase): ...@@ -204,7 +205,8 @@ class ObjectCopierTest(PlacefulSetup, TestCase):
def test_suite(): def test_suite():
return TestSuite(( return TestSuite((
makeSuite(ObjectCopierTest), makeSuite(ObjectCopierTest),
doctest.DocTestSuite(), doctest.DocTestSuite(setUp=testing.ContainerPlacefulSetup().setUp,
tearDown=testing.ContainerPlacefulSetup().tearDown),
)) ))
if __name__=='__main__': if __name__=='__main__':
......
...@@ -25,18 +25,23 @@ from zope.copypastemove import ObjectMover ...@@ -25,18 +25,23 @@ from zope.copypastemove import ObjectMover
from zope.copypastemove.interfaces import IObjectMover from zope.copypastemove.interfaces import IObjectMover
from zope.app.component.testing import PlacefulSetup from zope.app.component.testing import PlacefulSetup
from zope.app.testing import setup
from zope.app.folder import Folder from zope.app.folder import Folder
from zope.container import testing
class File(object): class File(object):
pass pass
def test_move_events(): def test_move_events():
""" """
We need a root folder::
>>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Prepare the setup:: Prepare the setup::
>>> root = setup.placefulSetUp(site=True) >>> from zope import component
>>> zope.component.provideAdapter(ObjectMover, (None,), IObjectMover) >>> component.provideAdapter(ObjectMover, (None,), IObjectMover)
Prepare some objects:: Prepare some objects::
...@@ -85,9 +90,6 @@ def test_move_events(): ...@@ -85,9 +90,6 @@ def test_move_events():
>>> events[2].object is root >>> events[2].object is root
True True
Finally, tear down::
>>> setup.placefulTearDown()
""" """
...@@ -220,7 +222,8 @@ class ObjectMoverTest(PlacefulSetup, TestCase): ...@@ -220,7 +222,8 @@ class ObjectMoverTest(PlacefulSetup, TestCase):
def test_suite(): def test_suite():
return TestSuite(( return TestSuite((
makeSuite(ObjectMoverTest), makeSuite(ObjectMoverTest),
doctest.DocTestSuite(), doctest.DocTestSuite(setUp=testing.ContainerPlacefulSetup().setUp,
tearDown=testing.ContainerPlacefulSetup().tearDown),
)) ))
if __name__=='__main__': if __name__=='__main__':
......
...@@ -18,13 +18,14 @@ $Id$ ...@@ -18,13 +18,14 @@ $Id$
import unittest import unittest
from zope.testing.doctestunit import DocTestSuite from zope.testing.doctestunit import DocTestSuite
from zope.component.eventtesting import getEvents, clearEvents from zope.component.eventtesting import getEvents, clearEvents
from zope.app.testing import placelesssetup, setup from zope.container import testing
def test_order_events(): def test_order_events():
""" """
Prepare the setup:: Prepare the setup::
>>> root = setup.placefulSetUp(site=True) >>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Prepare some objects:: Prepare some objects::
...@@ -55,17 +56,15 @@ def test_order_events(): ...@@ -55,17 +56,15 @@ def test_order_events():
>>> IObjectModifiedEvent.providedBy(events[0]) >>> IObjectModifiedEvent.providedBy(events[0])
True True
Finally, tear down::
>>> setup.placefulTearDown()
""" """
def test_all_items_available_at_object_added_event(): def test_all_items_available_at_object_added_event():
""" """
Prepare the setup:: Prepare the setup::
>>> root = setup.placefulSetUp(site=True) >>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Now register an event subscriber to object added events. Now register an event subscriber to object added events.
>>> import zope.component >>> import zope.component
...@@ -84,16 +83,14 @@ def test_all_items_available_at_object_added_event(): ...@@ -84,16 +83,14 @@ def test_all_items_available_at_object_added_event():
>>> oc['foo'] = 'FOO' >>> oc['foo'] = 'FOO'
['foo'] ['foo']
Finally, tear down::
>>> setup.placefulTearDown()
""" """
def test_exception_causes_order_fix(): def test_exception_causes_order_fix():
""" """
Prepare the setup:: Prepare the setup::
>>> root = setup.placefulSetUp(site=True) >>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Now register an event subscriber to object added events that Now register an event subscriber to object added events that
throws an error. throws an error.
...@@ -121,17 +118,16 @@ def test_exception_causes_order_fix(): ...@@ -121,17 +118,16 @@ def test_exception_causes_order_fix():
>>> 'foo' in oc.keys() >>> 'foo' in oc.keys()
False False
Finally, tear down::
>>> setup.placefulTearDown()
""" """
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(DocTestSuite("zope.container.ordered", suite.addTest(DocTestSuite("zope.container.ordered",
setUp=placelesssetup.setUp, setUp=testing.setUp,
tearDown=placelesssetup.tearDown)) tearDown=testing.tearDown))
suite.addTest(DocTestSuite()) suite.addTest(DocTestSuite(
setUp=testing.ContainerPlacefulSetup().setUp,
tearDown=testing.ContainerPlacefulSetup().tearDown))
return suite return suite
if __name__ == '__main__': if __name__ == '__main__':
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment