[Checkins] SVN: zope.copypastemove/trunk/ Moved zope.copypastemove related tests from zope.container here.
Hanno Schlichting
hannosch at hannosch.eu
Tue Dec 29 15:29:02 EST 2009
Log message for revision 107305:
Moved zope.copypastemove related tests from zope.container here.
Changed:
U zope.copypastemove/trunk/CHANGES.txt
U zope.copypastemove/trunk/setup.py
A zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectcopier.py
A zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectmover.py
-=-
Modified: zope.copypastemove/trunk/CHANGES.txt
===================================================================
--- zope.copypastemove/trunk/CHANGES.txt 2009-12-29 20:25:41 UTC (rev 107304)
+++ zope.copypastemove/trunk/CHANGES.txt 2009-12-29 20:29:02 UTC (rev 107305)
@@ -5,6 +5,7 @@
3.6.1 (unreleased)
------------------
+- Moved zope.copypastemove related tests from zope.container here.
3.6.0 (2009-12-16)
------------------
Modified: zope.copypastemove/trunk/setup.py
===================================================================
--- zope.copypastemove/trunk/setup.py 2009-12-29 20:25:41 UTC (rev 107304)
+++ zope.copypastemove/trunk/setup.py 2009-12-29 20:29:02 UTC (rev 107305)
@@ -44,8 +44,10 @@
package_dir = {'': 'src'},
namespace_packages=['zope',],
extras_require=dict(
- test=['zope.testing',
- 'zope.principalannotation']),
+ test=['zope.principalannotation',
+ 'zope.testing',
+ 'zope.traversing',
+ ]),
install_requires=['setuptools',
'zope.annotation',
'zope.component',
Copied: zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectcopier.py (from rev 107303, zope.container/trunk/src/zope/container/tests/test_objectcopier.py)
===================================================================
--- zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectcopier.py (rev 0)
+++ zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectcopier.py 2009-12-29 20:29:02 UTC (rev 107305)
@@ -0,0 +1,211 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+"""Object Copier Tests
+
+$Id$
+"""
+from unittest import TestCase, TestSuite, main, makeSuite
+
+import zope.component
+from zope.testing import doctest
+from zope.traversing.api import traverse
+from zope.component.eventtesting import getEvents, clearEvents
+from zope.copypastemove import ObjectCopier
+from zope.copypastemove.interfaces import IObjectCopier
+
+from zope.container import testing
+
+class File(object):
+ pass
+
+def test_copy_events():
+ """
+ Prepare an IObjectCopier::
+
+ >>> from zope import component
+ >>> component.provideAdapter(ObjectCopier, (None,), IObjectCopier)
+
+ We set things up in a root folder::
+
+ >>> from zope.container.sample import SampleContainer
+ >>> root = SampleContainer()
+
+ Prepare some objects::
+
+ >>> folder = SampleContainer()
+ >>> root[u'foo'] = File()
+ >>> root[u'folder'] = folder
+ >>> list(folder.keys())
+ []
+ >>> foo = traverse(root, 'foo') # wrap in ContainedProxy
+
+ Now make a copy::
+
+ >>> clearEvents()
+ >>> copier = IObjectCopier(foo)
+ >>> copier.copyTo(folder, u'bar')
+ u'bar'
+
+ Check that the copy has been done::
+
+ >>> list(folder.keys())
+ [u'bar']
+
+ Check what events have been sent::
+
+ >>> events = getEvents()
+ >>> [event.__class__.__name__ for event in events]
+ ['ObjectCopiedEvent', 'ObjectAddedEvent', 'ContainerModifiedEvent']
+
+ Check that the ObjectCopiedEvent includes the correct data::
+
+ >>> events[0].object is folder[u'bar']
+ True
+ >>> events[0].original is root[u'foo']
+ True
+ """
+
+
+class ObjectCopierTest(testing.ContainerPlacefulSetup, TestCase):
+
+ def setUp(self):
+ testing.ContainerPlacefulSetup.setUp(self)
+ self.buildFolders()
+ zope.component.provideAdapter(ObjectCopier, (None,), IObjectCopier)
+
+ def test_copytosame(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ copier.copyTo(container, 'file1')
+ self.failUnless('file1' in container)
+ self.failUnless('file1-2' in container)
+
+ def test_copytosamewithnewname(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ copier.copyTo(container, 'file2')
+ self.failUnless('file1' in container)
+ self.failUnless('file2' in container)
+
+ def test_copytoother(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ target = traverse(root, 'folder2')
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ copier.copyTo(target, 'file1')
+ self.failUnless('file1' in container)
+ self.failUnless('file1' in target)
+
+ def test_copytootherwithnewname(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ target = traverse(root, 'folder2')
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ copier.copyTo(target, 'file2')
+ self.failUnless('file1' in container)
+ self.failUnless('file2' in target)
+
+ def test_copytootherwithnamecollision(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ target = traverse(root, 'folder2')
+ target['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ copier.copyTo(target, 'file1')
+ # we do it twice, just to test auto-name generation
+ copier.copyTo(target, 'file1')
+ self.failUnless('file1' in container)
+ self.failUnless('file1' in target)
+ self.failUnless('file1-2' in target)
+ self.failUnless('file1-3' in target)
+
+ def test_copyable(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ self.failUnless(copier.copyable())
+
+ def test_copyableTo(self):
+ # A file should be copyable to a folder that has an
+ # object with the same id.
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ copier = IObjectCopier(file)
+ self.failUnless(copier.copyableTo(container, 'file1'))
+
+ def test_copyfoldertosibling(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder2')
+ source = traverse(root, '/folder1/folder1_1')
+ copier = IObjectCopier(source)
+ copier.copyTo(target)
+ self.failUnless('folder1_1' in target)
+
+ def test_copyfoldertosame(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder1')
+ source = traverse(root, '/folder1/folder1_1')
+ copier = IObjectCopier(source)
+ copier.copyTo(target)
+ self.failUnless('folder1_1' in target)
+
+ def test_copyfoldertosame2(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder1/folder1_1')
+ source = traverse(root, '/folder1/folder1_1/folder1_1_1')
+ copier = IObjectCopier(source)
+ copier.copyTo(target)
+ self.failUnless('folder1_1_1' in target)
+
+ def test_copyfolderfromroot(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder2')
+ source = traverse(root, '/folder1')
+ copier = IObjectCopier(source)
+ copier.copyTo(target)
+ self.failUnless('folder1' in target)
+
+ def test_copyfolderfromroot2(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder2/folder2_1/folder2_1_1')
+ source = traverse(root, '/folder1')
+ copier = IObjectCopier(source)
+ copier.copyTo(target)
+ self.failUnless('folder1' in target)
+
+def test_suite():
+ return TestSuite((
+ makeSuite(ObjectCopierTest),
+ doctest.DocTestSuite(setUp=testing.ContainerPlacefulSetup().setUp,
+ tearDown=testing.ContainerPlacefulSetup().tearDown),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')
Copied: zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectmover.py (from rev 107303, zope.container/trunk/src/zope/container/tests/test_objectmover.py)
===================================================================
--- zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectmover.py (rev 0)
+++ zope.copypastemove/trunk/src/zope/copypastemove/tests/test_objectmover.py 2009-12-29 20:29:02 UTC (rev 107305)
@@ -0,0 +1,228 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+"""Object Mover Tests
+
+$Id$
+"""
+from unittest import TestCase, TestSuite, main, makeSuite
+
+import zope.component
+from zope.testing import doctest
+from zope.traversing.api import traverse
+from zope.component.eventtesting import getEvents, clearEvents
+from zope.copypastemove import ObjectMover
+from zope.copypastemove.interfaces import IObjectMover
+
+from zope.container import testing
+
+class File(object):
+ pass
+
+def test_move_events():
+ """
+ We need a root folder::
+
+ >>> from zope.container.sample import SampleContainer
+ >>> root = SampleContainer()
+
+ Prepare the setup::
+
+ >>> from zope import component
+ >>> component.provideAdapter(ObjectMover, (None,), IObjectMover)
+
+ Prepare some objects::
+
+ >>> folder = SampleContainer()
+ >>> root[u'foo'] = File()
+ >>> root[u'folder'] = folder
+ >>> list(folder.keys())
+ []
+ >>> foo = traverse(root, 'foo') # wrap in ContainedProxy
+
+ Now move it::
+
+ >>> clearEvents()
+ >>> mover = IObjectMover(foo)
+ >>> mover.moveableTo(folder)
+ True
+ >>> mover.moveTo(folder, u'bar')
+ u'bar'
+
+ Check that the move has been done::
+
+ >>> list(root.keys())
+ [u'folder']
+ >>> list(folder.keys())
+ [u'bar']
+
+ Check what events have been sent::
+
+ >>> events = getEvents()
+ >>> [event.__class__.__name__ for event in events]
+ ['ObjectMovedEvent', 'ContainerModifiedEvent', 'ContainerModifiedEvent']
+
+ Verify that the ObjectMovedEvent includes the correct data::
+
+ >>> events[0].oldName, events[0].newName
+ (u'foo', u'bar')
+ >>> events[0].oldParent is root
+ True
+ >>> events[0].newParent is folder
+ True
+
+ Let's look the other events:
+
+ >>> events[1].object is folder
+ True
+ >>> events[2].object is root
+ True
+
+ """
+
+
+class ObjectMoverTest(testing.ContainerPlacefulSetup, TestCase):
+
+ def setUp(self):
+ testing.ContainerPlacefulSetup.setUp(self)
+ self.buildFolders()
+ zope.component.provideAdapter(ObjectMover, (None,), )
+
+ def test_movetosame(self):
+ # Should be a noop, because "moving" to same location
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ mover.moveTo(container, 'file1')
+ self.failUnless('file1' in container)
+ self.assertEquals(len(container), 2)
+
+ def test_movetosamewithnewname(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ mover.moveTo(container, 'file2')
+ self.failIf('file1' in container)
+ self.failUnless('file2' in container)
+
+ def test_movetoother(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ target = traverse(root, 'folder2')
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ mover.moveTo(target, 'file1')
+ self.failIf('file1' in container)
+ self.failUnless('file1' in target)
+
+ def test_movetootherwithnewname(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ target = traverse(root, 'folder2')
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ mover.moveTo(target, 'file2')
+ self.failIf('file1' in container)
+ self.failUnless('file2' in target)
+
+ def test_movetootherwithnamecollision(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ target = traverse(root, 'folder2')
+ target['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ mover.moveTo(target, 'file1')
+ self.failIf('file1' in container)
+ self.failUnless('file1' in target)
+ self.failUnless('file1-2' in target)
+
+ def test_moveable(self):
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ self.failUnless(mover.moveable())
+
+ def test_moveableTo(self):
+ # A file should be moveable to a folder that has an
+ # object with the same id.
+ root = self.rootFolder
+ container = traverse(root, 'folder1')
+ container['file1'] = File()
+ file = traverse(root, 'folder1/file1')
+ mover = IObjectMover(file)
+ self.failUnless(mover.moveableTo(container, 'file1'))
+
+ def test_movefoldertosibling(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder2')
+ source = traverse(root, '/folder1/folder1_1')
+ mover = IObjectMover(source)
+ mover.moveTo(target)
+ self.failUnless('folder1_1' in target)
+
+ def test_movefoldertosame(self):
+ # Should be a noop, because "moving" to same location
+ root = self.rootFolder
+ target = traverse(root, '/folder1')
+ source = traverse(root, '/folder1/folder1_1')
+ mover = IObjectMover(source)
+ mover.moveTo(target)
+ self.failUnless('folder1_1' in target)
+ self.assertEquals(len(target), 1)
+
+ def test_movefoldertosame2(self):
+ # Should be a noop, because "moving" to same location
+ root = self.rootFolder
+ target = traverse(root, '/folder1/folder1_1')
+ source = traverse(root, '/folder1/folder1_1/folder1_1_1')
+ mover = IObjectMover(source)
+ mover.moveTo(target)
+ self.failUnless('folder1_1_1' in target)
+ self.assertEquals(len(target), 1)
+
+ def test_movefolderfromroot(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder2')
+ source = traverse(root, '/folder1')
+ mover = IObjectMover(source)
+ mover.moveTo(target)
+ self.failUnless('folder1' in target)
+
+ def test_movefolderfromroot2(self):
+ root = self.rootFolder
+ target = traverse(root, '/folder2/folder2_1/folder2_1_1')
+ source = traverse(root, '/folder1')
+ mover = IObjectMover(source)
+ mover.moveTo(target)
+ self.failUnless('folder1' in target)
+
+
+def test_suite():
+ return TestSuite((
+ makeSuite(ObjectMoverTest),
+ doctest.DocTestSuite(setUp=testing.ContainerPlacefulSetup().setUp,
+ tearDown=testing.ContainerPlacefulSetup().tearDown),
+ ))
+
+if __name__=='__main__':
+ main(defaultTest='test_suite')
More information about the checkins
mailing list