[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