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]
develop = .
develop = . zope.app.container
parts = test
[test]
......
......@@ -59,7 +59,11 @@ setup(name='zope.container',
], 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',
'zope.interface',
'zope.app.publisher',
......
......@@ -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
interfaces. Let's define some container and item interfaces:
>>> from zope.app.container.interfaces import IContainer, IContained
>>> from zope.app.container.constraints import containers, contains
>>> from zope.container.interfaces import IContainer, IContained
>>> from zope.container.constraints import containers, contains
>>> class IBuddyFolder(IContainer):
... contains('.IBuddy')
......@@ -35,7 +35,7 @@ folders:
>>> class BuddyFolder:
... interface.implements(IBuddyFolder)
>>> from zope.app.container.constraints import checkObject, checkFactory
>>> from zope.container.constraints import checkObject, checkFactory
>>> from zope.component.factory import Factory
>>> checkObject(BuddyFolder(), 'x', Buddy())
......
......@@ -146,14 +146,14 @@ def dispatchToSublocations(object, event):
Now we'll register it:
>>> from zope.app.testing import ztapi
>>> ztapi.subscribe([None, IObjectMovedEvent], None, handler)
>>> from zope import component
>>> component.provideHandler(handler, [None, IObjectMovedEvent])
We also register our dispatcher:
>>> ztapi.subscribe([None, IObjectMovedEvent], None,
... dispatchToSublocations)
>>> component.provideHandler(dispatchToSublocations,
... [None, IObjectMovedEvent])
We can then call the dispatcher for the root object:
>>> event = ObjectRemovedEvent(c)
......@@ -382,14 +382,13 @@ def setitem(container, setitemf, name, object):
>>> from zope.container.interfaces import IObjectAddedEvent
>>> 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()
>>> 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(
os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
__name__, 'AppContainerLayer', allow_teardown=True)
$Id: placelesssetup.py 95341 2009-01-28 15:59:18Z wosc $
"""
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$
from unittest import TestCase, main, makeSuite, TestSuite
from zope.interface.verify import verifyObject
from zope.testing.doctestunit import DocTestSuite
from zope.app.testing import placelesssetup
from test_icontainer import TestSampleContainer
from zope.component.testing import setUp, tearDown
from zope.container.tests.test_icontainer import TestSampleContainer
from zope.container.btree import BTreeContainer
from zope.container.interfaces import IBTreeContainer
......@@ -169,8 +169,8 @@ def test_suite():
makeSuite(TestBTreeContainer),
makeSuite(TestBTreeSpecials),
DocTestSuite('zope.container.btree',
setUp=placelesssetup.setUp,
tearDown=placelesssetup.tearDown),
setUp=setUp,
tearDown=tearDown),
))
if __name__=='__main__':
......
......@@ -26,7 +26,7 @@ import zope.interface
from zope.testing import doctest
from zope.container.contained import ContainedProxy
from zope.app.testing import placelesssetup
from zope.container import testing
class MyOb(Persistent):
pass
......@@ -319,8 +319,8 @@ def test_ContainedProxy_instances_have_no_instance_dictionaries():
def test_suite():
return unittest.TestSuite((
doctest.DocTestSuite('zope.container.contained',
setUp=placelesssetup.setUp,
tearDown=placelesssetup.tearDown),
setUp=testing.setUp,
tearDown=testing.tearDown),
doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE),
))
......
......@@ -16,12 +16,15 @@
$Id$
"""
import unittest
from zope.container.traversal import ContainerTraverser
from zope.container.interfaces import IReadContainer
from zope.app.testing import ztapi, placelesssetup
from zope.interface import Interface, implements
from zope import component
from zope.publisher.interfaces import NotFound
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):
implements(IReadContainer)
......@@ -40,7 +43,7 @@ class View(object):
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
# use these tests as a base.
......@@ -60,7 +63,9 @@ class TraverserTest(placelesssetup.PlacelessSetup, unittest.TestCase):
# Create the traverser
self.traverser = self._getTraverser(foo2, self.request)
# Define a simple view for the container
ztapi.browserView(IReadContainer, 'viewfoo', View)
component.provideAdapter(
View, (IReadContainer, IDefaultBrowserLayer), Interface,
name='viewfoo')
def test_itemTraversal(self):
self.assertEqual(
......
......@@ -19,14 +19,14 @@ from unittest import TestCase, main, makeSuite
from zope.interface.verify import verifyObject
from zope.container.interfaces import IContainer
from zope.app.testing import placelesssetup
from zope.container import testing
def DefaultTestData():
return [('3', '0'), ('2', '1'), ('4', '2'), ('6', '3'), ('0', '4'),
('5', '5'), ('1', '6'), ('8', '7'), ('7', '8'), ('9', '9')]
class BaseTestIContainer(placelesssetup.PlacelessSetup):
class BaseTestIContainer(testing.ContainerPlacelessSetup):
"""Base test cases for containers.
Subclasses must define a makeTestObject that takes no
......
......@@ -25,7 +25,7 @@ from zope.copypastemove import ObjectCopier
from zope.copypastemove.interfaces import IObjectCopier
from zope.app.component.testing import PlacefulSetup
from zope.app.testing import setup
from zope.container import testing
from zope.app.folder import Folder
class File(object):
......@@ -33,11 +33,16 @@ class File(object):
def test_copy_events():
"""
Prepare the setup::
Prepare an IObjectCopier::
>>> root = setup.placefulSetUp(site=True)
>>> zope.component.provideAdapter(ObjectCopier, (None,), IObjectCopier)
>>> from zope import component
>>> component.provideAdapter(ObjectCopier, (None,), IObjectCopier)
We set things up in a root folder::
>>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Prepare some objects::
>>> folder = Folder()
......@@ -50,7 +55,7 @@ def test_copy_events():
Now make a copy::
>>> clearEvents()
>>> copier = IObjectCopier(foo)
>>> copier = IObjectCopier(foo)
>>> copier.copyTo(folder, u'bar')
u'bar'
......@@ -71,10 +76,6 @@ def test_copy_events():
True
>>> events[0].original is root[u'foo']
True
Finally, tear down::
>>> setup.placefulTearDown()
"""
......@@ -204,7 +205,8 @@ class ObjectCopierTest(PlacefulSetup, TestCase):
def test_suite():
return TestSuite((
makeSuite(ObjectCopierTest),
doctest.DocTestSuite(),
doctest.DocTestSuite(setUp=testing.ContainerPlacefulSetup().setUp,
tearDown=testing.ContainerPlacefulSetup().tearDown),
))
if __name__=='__main__':
......
......@@ -25,18 +25,23 @@ from zope.copypastemove import ObjectMover
from zope.copypastemove.interfaces import IObjectMover
from zope.app.component.testing import PlacefulSetup
from zope.app.testing import setup
from zope.app.folder import Folder
from zope.container import testing
class File(object):
pass
def test_move_events():
"""
We need a root folder::
>>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Prepare the setup::
>>> root = setup.placefulSetUp(site=True)
>>> zope.component.provideAdapter(ObjectMover, (None,), IObjectMover)
>>> from zope import component
>>> component.provideAdapter(ObjectMover, (None,), IObjectMover)
Prepare some objects::
......@@ -85,9 +90,6 @@ def test_move_events():
>>> events[2].object is root
True
Finally, tear down::
>>> setup.placefulTearDown()
"""
......@@ -220,7 +222,8 @@ class ObjectMoverTest(PlacefulSetup, TestCase):
def test_suite():
return TestSuite((
makeSuite(ObjectMoverTest),
doctest.DocTestSuite(),
doctest.DocTestSuite(setUp=testing.ContainerPlacefulSetup().setUp,
tearDown=testing.ContainerPlacefulSetup().tearDown),
))
if __name__=='__main__':
......
......@@ -18,13 +18,14 @@ $Id$
import unittest
from zope.testing.doctestunit import DocTestSuite
from zope.component.eventtesting import getEvents, clearEvents
from zope.app.testing import placelesssetup, setup
from zope.container import testing
def test_order_events():
"""
Prepare the setup::
>>> root = setup.placefulSetUp(site=True)
>>> from zope.app.folder import rootFolder
>>> root = rootFolder()
Prepare some objects::
......@@ -55,17 +56,15 @@ def test_order_events():
>>> IObjectModifiedEvent.providedBy(events[0])
True
Finally, tear down::
>>> setup.placefulTearDown()
"""
def test_all_items_available_at_object_added_event():
"""
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.
>>> import zope.component
......@@ -84,16 +83,14 @@ def test_all_items_available_at_object_added_event():
>>> oc['foo'] = 'FOO'
['foo']
Finally, tear down::
>>> setup.placefulTearDown()
"""
def test_exception_causes_order_fix():
"""
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
throws an error.
......@@ -121,17 +118,16 @@ def test_exception_causes_order_fix():
>>> 'foo' in oc.keys()
False
Finally, tear down::
>>> setup.placefulTearDown()
"""
def test_suite():
suite = unittest.TestSuite()
suite.addTest(DocTestSuite("zope.container.ordered",
setUp=placelesssetup.setUp,
tearDown=placelesssetup.tearDown))
suite.addTest(DocTestSuite())
setUp=testing.setUp,
tearDown=testing.tearDown))
suite.addTest(DocTestSuite(
setUp=testing.ContainerPlacefulSetup().setUp,
tearDown=testing.ContainerPlacefulSetup().tearDown))
return suite
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