[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')