[Zope3-checkins] CVS: Zope3/src/zope/app/browser/container/tests - __init__.py:1.2 test_adding.py:1.2 test_contents.py:1.2

Jim Fulton jim@zope.com
Wed, 25 Dec 2002 09:14:01 -0500


Update of /cvs-repository/Zope3/src/zope/app/browser/container/tests
In directory cvs.zope.org:/tmp/cvs-serv15352/src/zope/app/browser/container/tests

Added Files:
	__init__.py test_adding.py test_contents.py 
Log Message:
Grand renaming:

- Renamed most files (especially python modules) to lower case.

- Moved views and interfaces into separate hierarchies within each
  project, where each top-level directory under the zope package
  is a separate project.

- Moved everything to src from lib/python.

  lib/python will eventually go away. I need access to the cvs
  repository to make this happen, however.

There are probably some bits that are broken. All tests pass
and zope runs, but I haven't tried everything. There are a number
of cleanups I'll work on tomorrow.



=== Zope3/src/zope/app/browser/container/tests/__init__.py 1.1 => 1.2 ===
--- /dev/null	Wed Dec 25 09:14:01 2002
+++ Zope3/src/zope/app/browser/container/tests/__init__.py	Wed Dec 25 09:12:30 2002
@@ -0,0 +1,2 @@
+#
+# This file is necessary to make this directory a package.


=== Zope3/src/zope/app/browser/container/tests/test_adding.py 1.1 => 1.2 ===
--- /dev/null	Wed Dec 25 09:14:01 2002
+++ Zope3/src/zope/app/browser/container/tests/test_adding.py	Wed Dec 25 09:12:30 2002
@@ -0,0 +1,116 @@
+##############################################################################
+#
+# Copyright (c) 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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.
+#
+##############################################################################
+"""Adding implementation tests
+
+$Id$
+"""
+
+from unittest import TestCase, main, makeSuite
+from zope.component.adapter import provideAdapter
+from zope.app.browser.container.adding import Adding
+from zope.app.interfaces.container import IAdding
+from zope.app.tests.placelesssetup import PlacelessSetup
+from zope.component.view import provideView
+from zope.proxy.context \
+     import getWrapperObject, getWrapperContainer, getWrapperData
+from zope.publisher.browser import TestRequest
+from zope.publisher.browser import BrowserView
+from zope.publisher.interfaces.browser import IBrowserPresentation
+from zope.app.event.tests.placelesssetup import getEvents
+from zope.app.interfaces.event import IObjectAddedEvent, IObjectModifiedEvent
+
+from zope.app.interfaces.container import IZopeContainer
+from zope.app.interfaces.container import IContainer
+from zope.app.container.zopecontainer import ZopeContainerAdapter
+
+
+
+class Container:
+
+    __implements__ = IContainer
+
+    def __init__(self):
+        self._data = {}
+
+    def setObject(self, name, obj):
+        self._data[name] = obj
+        return name
+
+    def __getitem__(self, name):
+        return self._data[name]
+
+class CreationView(BrowserView):
+
+    def action(self):
+        return 'been there, done that'
+
+class Test(PlacelessSetup, TestCase):
+
+    def setUp(self):
+        PlacelessSetup.setUp(self)
+        provideAdapter(IContainer, IZopeContainer, ZopeContainerAdapter)
+
+    def test(self):
+        container = Container()
+        request = TestRequest()
+        adding = Adding(container, request)
+        provideView(IAdding, "Thing", IBrowserPresentation, CreationView)
+        self.assertEqual(adding.contentName, None)
+        view = adding.publishTraverse(request, 'Thing=foo')
+        self.assertEqual(view.action(), 'been there, done that')
+        self.assertEqual(adding.contentName, 'foo')
+
+        # Make sure we don't have any events yet:
+        self.failIf(getEvents(IObjectModifiedEvent))
+        self.failIf(getEvents(IObjectAddedEvent))
+
+        o = Container() # any old instance will do
+        result = adding.add(o)
+
+        # Make sure the right events were generated:
+        self.failUnless(
+            getEvents(IObjectAddedEvent,
+                      filter =
+                      lambda event:
+                      event.object == o)
+            )
+        self.failUnless(
+            getEvents(IObjectModifiedEvent,
+                      filter =
+                      lambda event:
+                      event.object == container)
+            )
+
+        # Check the state of the container and result
+        self.assertEqual(container["foo"], o)
+        self.assertEqual(getWrapperContainer(result), container)
+        self.assertEqual(getWrapperObject(result), o)
+        self.assertEqual(getWrapperData(result)["name"], "foo")
+
+    def testNoNameGiven(self):
+        container = Container()
+        request = TestRequest()
+        adding = Adding(container, request)
+        provideView(IAdding, "Thing", IBrowserPresentation, CreationView)
+
+        self.assertEqual(adding.contentName, None)
+        view = adding.publishTraverse(request, 'Thing=')
+        self.assertEqual(adding.contentName, '')
+
+
+def test_suite():
+    return makeSuite(Test)
+
+if __name__=='__main__':
+    main(defaultTest='test_suite')


=== Zope3/src/zope/app/browser/container/tests/test_contents.py 1.1 => 1.2 ===
--- /dev/null	Wed Dec 25 09:14:01 2002
+++ Zope3/src/zope/app/browser/container/tests/test_contents.py	Wed Dec 25 09:12:30 2002
@@ -0,0 +1,187 @@
+##############################################################################
+#
+# 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.0 (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.
+#
+##############################################################################
+"""
+
+Revision information:
+$Id$
+"""
+
+from unittest import TestCase, TestSuite, main, makeSuite
+from zope.app.tests.placelesssetup import PlacelessSetup
+from zope.component.adapter import provideAdapter
+
+from zope.app.interfaces.container import IZopeContainer
+from zope.app.interfaces.container import IContainer
+from zope.app.container.zopecontainer import ZopeContainerAdapter
+
+from zope.app.event.tests.placelesssetup import getEvents
+from zope.app.interfaces.event import IObjectRemovedEvent, IObjectModifiedEvent
+from zope.interface import Interface
+from zope.proxy.introspection import removeAllProxies
+
+
+class BaseTestContentsBrowserView(PlacelessSetup):
+    """Base class for testing browser contents.
+
+    Subclasses need to define a method, '_TestView__newContext', that
+    takes no arguments and that returns a new empty test view context.
+
+    Subclasses need to define a method, '_TestView__newView', that
+    takes a context object and that returns a new test view.
+    """
+
+    def setUp(self):
+        PlacelessSetup.setUp(self)
+        provideAdapter(IContainer, IZopeContainer, ZopeContainerAdapter)
+
+
+    def testInfo(self):
+        # Do we get the correct information back from ContainerContents?
+        container = self._TestView__newContext()
+        subcontainer = self._TestView__newContext()
+        container.setObject( 'subcontainer', subcontainer )
+        document = Document()
+        container.setObject( 'document', document )
+
+        fc = self._TestView__newView( container )
+        info_list = fc.listContentInfo()
+
+        self.assertEquals( len( info_list ), 2 )
+
+        ids = map( lambda x: x['id'], info_list )
+        self.assert_( 'subcontainer' in ids )
+
+        objects = map( lambda x: x['object'], info_list )
+        self.assert_( subcontainer in objects )
+
+        urls = map( lambda x: x['url'], info_list )
+        self.assert_( 'subcontainer' in urls )
+
+        self.failIf( filter( None, map( lambda x: x['icon'], info_list ) ) )
+
+    def testInfoWDublinCore(self):
+        container = self._TestView__newContext()
+        document = Document()
+        container.setObject( 'document', document )
+
+        from datetime import datetime
+        from zope.app.interfaces.dublincore import IZopeDublinCore
+        from zope.app.browser.container.contents \
+            import formatTime, getSize
+        class FauxDCAdapter:
+            __implements__ = IZopeDublinCore
+
+            def __init__(self, context):
+                pass
+            title = 'faux title'
+            size = 1024
+            created = datetime(2001, 1, 1, 1, 1, 1)
+            modified = datetime(2002, 2, 2, 2, 2, 2)
+
+        from zope.component.adapter \
+             import provideAdapter
+        provideAdapter(IDocument, IZopeDublinCore, FauxDCAdapter)
+
+        fc = self._TestView__newView( container )
+        info = fc.listContentInfo()[0]
+
+        self.assertEqual(info['id'], 'document')
+        self.assertEqual(info['url'], 'document')
+        self.assertEqual(info['object'], document)
+        self.assertEqual(info['title'], 'faux title')
+        size,label=info['size']['size'],info['size']['label']
+        self.assertEqual((size,label), getSize(FauxDCAdapter.size))
+        self.assertEqual(info['created'], formatTime(FauxDCAdapter.created))
+        self.assertEqual(info['modified'], formatTime(FauxDCAdapter.modified))
+
+    def testObjectSize(self):
+        from zope.app.browser.container.contents import getSize
+        class SizeableObject:
+            def __init__(self, size=0):
+                self.size=size
+            def getSize(self):
+                return self.size
+        self.assertEqual(getSize(SizeableObject(0)), (0, u'1 KB') )
+        self.assertEqual(getSize(SizeableObject(2048)), (2048, u'2 KB') )
+        self.assertEqual(getSize(SizeableObject(2000000)),(2000000,u'1.91 MB'))
+        self.assertEqual(getSize(SizeableObject('bob')), (0,u'N/A'))
+        self.assertEqual(getSize('dobbs'), (0,u'N/A'))
+
+
+    def testRemove( self ):
+        container = self._TestView__newContext()
+        subcontainer = self._TestView__newContext()
+        container.setObject('subcontainer', subcontainer)
+        document = Document()
+        container.setObject('document', document)
+        document2 = Document()
+        container.setObject('document2', document2)
+
+        fc = self._TestView__newView( container )
+
+        self.failIf(getEvents(IObjectModifiedEvent))
+        self.failIf(getEvents(IObjectRemovedEvent))
+
+        fc.removeObjects(['document2'])
+
+        self.failUnless(
+            getEvents(IObjectRemovedEvent,
+                      filter =
+                      lambda event:
+                      removeAllProxies(event.object) == document2)
+            )
+        self.failUnless(
+            getEvents(IObjectModifiedEvent,
+                      filter =
+                      lambda event:
+                      removeAllProxies(event.object) == container)
+            )
+
+        info_list = fc.listContentInfo()
+
+        self.assertEquals( len( info_list ), 2 )
+
+        ids = map( lambda x: x['id'], info_list )
+        self.assert_( 'subcontainer' in ids )
+
+        objects = map( lambda x: x['object'], info_list )
+        self.assert_( subcontainer in objects )
+
+        urls = map( lambda x: x['url'], info_list )
+        self.assert_( 'subcontainer' in urls )
+
+
+class IDocument(Interface):
+    pass
+
+class Document:
+    __implements__ = IDocument
+
+
+class Test(BaseTestContentsBrowserView, TestCase):
+
+    def _TestView__newContext(self):
+        from zope.app.container.sample import SampleContainer
+        return SampleContainer()
+
+    def _TestView__newView(self, container):
+        from zope.app.browser.container.contents import Contents
+        from zope.publisher.browser import TestRequest
+        return Contents(container, TestRequest())
+
+def test_suite():
+    return makeSuite(Test)
+
+if __name__=='__main__':
+    main(defaultTest='test_suite')