[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/ Replaced by separate branch. Will be merged back into trunk and replace folder.py

Charlie Clark charlie at begeistert.org
Thu Aug 20 05:26:59 EDT 2009


Log message for revision 102990:
  Replaced by separate branch. Will be merged back into trunk and replace folder.py

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml
  D   Products.CMFDefault/trunk/Products/CMFDefault/browser/new_folder.py
  D   Products.CMFDefault/trunk/Products/CMFDefault/browser/templates/contents.pt
  D   Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/new_folder_utest.txt
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_folder.py
  D   Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_new_folder.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml	2009-08-20 09:25:58 UTC (rev 102989)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/configure.zcml	2009-08-20 09:26:59 UTC (rev 102990)
@@ -31,21 +31,7 @@
 
   <adapter factory=".metadata.MinimalMetadataSchemaAdapter"/>
 
-  <utility
-      component=".new_folder.contents_delta_vocabulary"
-      name="cmf.contents delta vocabulary"
-      provides="zope.schema.interfaces.IVocabularyFactory"
-      />
-      
   <browser:page
-      for="Products.CMFCore.interfaces.IFolderish"
-      layer="..interfaces.ICMFDefaultSkin"
-      name="contents.html"
-      class=".new_folder.ContentsView"
-      permission="cmf.ListFolderContents"
-      />
-
-  <browser:page
       for="Products.CMFCore.interfaces.IMutableMinimalDublinCore"
       layer="..interfaces.ICMFDefaultSkin"
       name="properties.html"

Deleted: Products.CMFDefault/trunk/Products/CMFDefault/browser/new_folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/new_folder.py	2009-08-20 09:25:58 UTC (rev 102989)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/new_folder.py	2009-08-20 09:26:59 UTC (rev 102990)
@@ -1,414 +0,0 @@
-import urllib
-
-from DocumentTemplate import sequence
-
-from zope.interface import Interface, directlyProvides
-from zope import schema
-from zope.schema import Bool, TextLine, Int, Choice
-from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
-
-from zope.formlib import form
-
-from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
-from Products.Five.formlib.formbase import PageForm
-
-from Products.CMFCore.interfaces import IDynamicType
-
-from Products.CMFDefault.exceptions import CopyError
-from Products.CMFDefault.exceptions import zExceptions_Unauthorized
-from Products.CMFDefault.permissions import ListFolderContents
-from Products.CMFDefault.permissions import ManageProperties
-from Products.CMFDefault.formlib.form import ContentEditFormBase
-from Products.CMFDefault.utils import Message as _
-
-from utils import ViewBase
-from utils import decode
-from utils import memoize
-
-def contents_delta_vocabulary(context):
-    """Vocabulary for the pulldown for moving objects up
-    and down."""
-    length = len(context.contentIds())
-    deltas = [SimpleTerm(str(i), str(i), str(i)) 
-            for i in range(1, min(5, length)) + range(5, length, 5)]
-    return SimpleVocabulary(deltas)
-
-class IFolderItem(Interface):
-    """Schema for folderish objects contents."""
-    
-    select = Bool(
-        required=False)
-        
-    name = TextLine(
-        title=u"Name",
-        required=False,
-        readonly=True)
-
-class IDeltaItem(Interface):
-    """Schema for delta"""    
-    delta = Choice(
-        title=u"By",
-        description=u"Move an object up or down the chosen number of places.",
-        required=False,
-        vocabulary=u'cmf.contents delta vocabulary',
-        default=u'1')
-        
-
-class ContentsView(ContentEditFormBase):
-    """Folder contents view"""
-    
-    template = ViewPageTemplateFile('templates/contents.pt')
-    
-    object_actions = form.Actions(
-        form.Action(
-            name='rename',
-            label=_(u'Rename'),
-            validator='validate_items',
-            condition='has_subobjects',
-            success='handle_rename'),
-        form.Action(
-            name='cut',
-            label=_(u'Cut'),
-            condition='has_subobjects',
-            validator='validate_items',
-            success='handle_cut'),
-        form.Action(
-            name='copy',
-            label=_(u'Copy'),
-            condition='has_subobjects',
-            validator='validate_items',
-            success='handle_copy'),
-        form.Action(
-            name='paste',
-            label=_(u'Paste'),
-            condition='check_clipboard_data',
-            success='handle_paste'),
-        form.Action(
-            name='delete',
-            label=_(u'Delete'),
-            condition='has_subobjects',
-            validator='validate_items',
-            success='handle_delete')
-            )
-            
-    delta_actions = form.Actions(
-        form.Action(
-            name='up',
-            label=_(u'Up'),
-            condition='is_orderable',
-            validator='validate_items',
-            success='handle_up'),
-        form.Action(
-            name='down',
-            label=_(u'Down'),
-            condition='is_orderable',
-            validator='validate_items',
-            success='handle_down')
-            )
-            
-    absolute_actions = form.Actions(
-        form.Action(
-            name='top',
-            label=_(u'Top'),
-            condition='is_orderable',
-            validator='validate_items',
-            success='handle_top'),
-        form.Action(
-            name='bottom',
-            label=_(u'Bottom'),
-            condition='is_orderable',
-            validator='validate_items',
-            success='handle_bottom')
-            )
-
-    sort_actions = form.Actions(
-        form.Action(
-            name='sort_order',
-            label=_(u'Set as Default Sort'),
-            condition='can_sort_be_changed',
-            validator='validate_items',
-            success='handle_top')
-            )
-            
-    actions = object_actions + delta_actions + absolute_actions + sort_actions
-    
-    errors = ()
-    
-    def __init__(self, *args, **kw):
-        super(ContentsView, self).__init__(*args, **kw)
-        self.form_fields = form.FormFields()
-        self.delta_field = form.FormFields(IDeltaItem)
-        self.contents = self.context.contentValues()
-        
-        for item in self.contents:
-            for n, f in schema.getFieldsInOrder(IFolderItem):
-                field = form.FormField(f, n, item.id)
-                self.form_fields += form.FormFields(field)
-          
-    @memoize
-    @decode
-    def up_info(self):
-        """Link to the contens view of the parent object"""
-        up_obj = self.context.aq_inner.aq_parent
-        mtool = self._getTool('portal_membership')
-        allowed = mtool.checkPermission(ListFolderContents, up_obj)
-        if allowed:
-            if IDynamicType.providedBy(up_obj):
-                up_url = up_obj.getActionInfo('object/folderContents')['url']
-                return {'icon': '%s/UpFolder_icon.gif' % self._getPortalURL(),
-                        'id': up_obj.getId(),
-                        'url': up_url}
-            else:
-                return {'icon': '',
-                        'id': 'Root',
-                        'url': ''}
-        else:
-            return {}
-        
-    def setUpWidgets(self, ignore_request=False):
-        """Create widgets for the folder contents."""
-        data = {}
-        for i in self.contents:
-            data['%s.name' %i.id] = i.getId()
-        self.widgets = form.setUpDataWidgets(
-                self.form_fields, self.prefix, self.context,
-                self.request, data=data, ignore_request=ignore_request)
-        self.widgets += form.setUpDataWidgets(self.delta_field, self.prefix,
-                        self.context, self.request, ignore_request=ignore_request)
-                
-    def _get_sorting(self):
-        """How should the contents be sorted"""
-        key = self.request.form.get('key', None)
-        if key:
-            return (key, self.request.form.get('reverse', 0))
-        else:
-            return self.context.getDefaultSorting()
-    
-    def column_headings(self):
-        (key, reverse) = self._get_sorting()
-        columns = ( {'key': 'Type',
-                     'title': _(u'Type'),
-                     'colspan': '2'}
-                  , {'key': 'getId',
-                     'title': _(u'Name')}
-                  , {'key': 'modified',
-                     'title': _(u'Last Modified')}
-                  , {'key': 'position',
-                     'title': _(u'Position')}
-                  )
-        for column in columns:
-            if key == column['key'] and not reverse and key != 'position':
-                query = urllib.urlencode({'key':column['key'], 'reverse':1})
-            else:
-                query = urllib.urlencode({'key':column['key']})
-            column['url'] = '%s?%s' % (self._getViewURL(), query)
-        return tuple(columns)
-        
-    def _get_items(self):
-        (key, reverse) = self._get_sorting()
-        items = self.contents
-        return sequence.sort(items,
-                             ((key, 'cmp', reverse and 'desc' or 'asc'),))
-    
-    def layout_fields(self):
-        """Return the widgets for the form in the interface field order"""
-        fields = []
-
-        for item in self._get_items():
-            field = {'ModificationDate':item.ModificationDate()}
-            field['select'] = self.widgets['%s.select' % item.getId()]
-            field['name'] = self.widgets['%s.name' % item.getId()]
-            field['url'] = item.absolute_url()
-            field['title'] = item.TitleOrId()
-            field['icon'] = item.icon
-            field['position'] = self.context.contentIds().index(item.getId()) + 1
-            field['type'] = item.Type() or None
-            fields.append(field.copy())
-        return fields
-                
-    def _get_ids(self, data):
-        """Strip prefixes from ids that have been selected"""
-        ids = [k.split(".")[0] for k, v in data.items() if v == True]
-        return ids
-        
-    
-    #Action conditions
-    @memoize
-    def has_subobjects(self, action=None):
-        """Return false if the user cannot rename subobjects"""
-        return bool(self.contents)
-    
-    @memoize
-    def check_clipboard_data(self, action=None):
-        """Any data in the clipboard"""
-        return bool(self.context.cb_dataValid())
-    
-    @memoize
-    def can_sort_be_changed(self, action=None):
-        """Returns true if the default sort key may be changed 
-            may be sorted for display"""
-        items_move_allowed = self._checkPermission(ManageProperties)
-        return items_move_allowed and not \
-            self._get_sorting() == self.context.getDefaultSorting()
-
-    @memoize
-    def is_orderable(self, action=None):
-        """Returns true if the displayed contents can be
-            reorded."""
-        (key, reverse) = self._get_sorting()        
-        return key == 'position' and len(self.contents) > 1
-
-    #Actions validators
-    def validate_items(self, action=None, data=None):
-        """Check whether any items have been selected for 
-        the requested action."""
-        if data is None:
-            data = {}
-        if len(self._get_ids(data)) == 0:
-            return [_(u"Please select one or more items first.")]
-        else:
-            return []
-            
-    #Action handlers
-    def handle_rename(self, action, data):
-        """Redirect to rename view passing the ids of objects to be renamed"""
-        return self._setRedirect('portal_types', 'object/rename_items')
-    
-    def handle_cut(self, action, data):
-        """Cut the selected objects and put them in the clipboard"""
-        ids = self._get_ids(data)
-        
-        try:
-            self.context.manage_cutObjects(ids, self.request)
-            if len(ids) == 1:
-                self.status = _(u'Item cut.')
-            else:
-                self.status = _(u'Items cut.')
-        except CopyError:
-            self.status = _(u'CopyError: Cut failed.')
-        except zExceptions_Unauthorized:
-            self.status = _(u'Unauthorized: Cut failed.')
-        return self._setRedirect('portal_types', 'object/folderContents')    
-
-    def handle_copy(self, action, data):
-        """Copy the selected objects to the clipboard"""
-        ids = self._get_ids(data)
-
-        try:
-            self.context.manage_copyObjects(ids, self.request)
-            if len(ids) == 1:
-                self.status = _(u'Item copied.')
-            else:
-                self.status = _(u'Items copied.')
-        except CopyError:
-            self.status = _(u'CopyError: Copy failed.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-    
-    def handle_paste(self, action, data):
-        """Paste the objects from the clipboard into the folder"""
-        try:
-            result = self.context.manage_pasteObjects(self.request['__cp'])
-            if len(result) == 1:
-                self.status = _(u'Item pasted.')
-            else:
-                self.status = _(u'Items pasted.')
-        except CopyError, error:
-            self.status = _(u'CopyError: Paste failed.')
-            self.request['RESPONSE'].expireCookie('__cp', 
-                    path='%s' % (self.request['BASEPATH1'] or "/"))
-
-        except zExceptions_Unauthorized:
-            self.status = _(u'Unauthorized: Paste failed.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-
-    def handle_delete(self, action, data):
-        """Delete the selected objects"""
-        ids = self._get_ids(data)
-        self.context.manage_delObjects(list(ids))
-        if len(ids) == 1:
-            self.status = _(u'Item deleted.')
-        else:
-            self.status = _(u'Items deleted.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-    
-    def handle_up(self, action, data):
-        """Move the selected objects up the selected number of places"""
-        ids = self._get_ids(data)
-        delta = self.request.form.get('delta', 1)
-        subset_ids = [ obj.getId()
-                       for obj in self.context.listFolderContents() ]
-        try:
-            attempt = self.context.moveObjectsUp(ids, delta,
-                                                 subset_ids=subset_ids)
-            if attempt == 1:
-                self.status = _(u'Item moved up.')
-            elif attempt > 1:
-                self.status = _(u'Items moved up.')
-            else:
-                self.status = _(u'Nothing to change.')
-        except ValueError:
-            self.status = _(u'ValueError: Move failed.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-
-    def handle_down(self, action, data):
-        """Move the selected objects down the selected number of places"""
-        ids = self._get_ids(data)
-        delta = self.request.form.get('delta', 1)
-        subset_ids = [ obj.getId()
-                       for obj in self.context.listFolderContents() ]
-        try:
-            attempt = self.context.moveObjectsDown(ids, delta,
-                                                 subset_ids=subset_ids)
-            if attempt == 1:
-                self.status = _(u'Item moved down.')
-            elif attempt > 1:
-                self.status = _(u'Items moved down.')
-            else:
-                self.status = _(u'Nothing to change.')
-        except ValueError:
-            self.status = _(u'ValueError: Move failed.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-            
-    def handle_top(self, action, data):
-        """Move the selected objects to the top of the page"""
-        ids = self._get_ids(data)
-        subset_ids = [ obj.getId()
-                       for obj in self.context.listFolderContents() ]
-        try:
-            attempt = self.context.moveObjectsToTop(ids,
-                                                    subset_ids=subset_ids)
-            if attempt == 1:
-                self.status = _(u'Item moved to top.')
-            elif attempt > 1:
-                self.status = _(u'Items moved to top.')
-            else:
-                self.status = _(u'Nothing to change.')
-        except ValueError:
-            self.status = _(u'ValueError: Move failed.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-
-    def handle_bottom(self, action, data):
-        """Move the selected objects to the bottom of the page"""
-        ids = self._get_ids(data)
-        subset_ids = [ obj.getId()
-                       for obj in self.context.listFolderContents() ]
-        try:
-            attempt = self.context.moveObjectsToBottom(ids,
-                                                       subset_ids=subset_ids)
-            if attempt == 1:
-                self.status = _(u'Item moved to bottom.')
-            elif attempt > 1:
-                self.status = _(u'Items moved to bottom.')
-            else:
-                self.status = _(u'Nothing to change.')
-        except ValueError:
-            self.status = _(u'ValueError: Move failed.')
-        return self._setRedirect('portal_types', 'object/new_contents')
-        
-    def handle_sort_order(self, action, data):
-        """Set the sort options for the folder."""
-        key = data['position']
-        reverse = data.get('reverse', 0)
-        self.context.setDefaultSorting(key, reverse)
-        self.status = _(u"Sort order changed")
-        return self._setRedirect('portal_types', 'object/new_contents')
\ No newline at end of file

Deleted: Products.CMFDefault/trunk/Products/CMFDefault/browser/templates/contents.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/templates/contents.pt	2009-08-20 09:25:58 UTC (rev 102989)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/templates/contents.pt	2009-08-20 09:26:59 UTC (rev 102990)
@@ -1,77 +0,0 @@
-<html metal:use-macro="context/@@standard_macros/page">
-<body>
-
-<metal:slot metal:fill-slot="body" i18n:domain="cmf_default">
-
-<p tal:define="up_info view/up_info" tal:condition="up_info"
-><tal:case tal:condition="up_info/url"
- ><a href="" tal:attributes="href up_info/url"
-  ><img src="" alt="[Link]" border="0" tal:attributes="src up_info/icon"
-      i18n:attributes="alt" /></a>
-  <span tal:omit-tag="" i18n:translate="">Up to</span>
-  <a href="" tal:attributes="href up_info/url"
-     tal:content="up_info/id">ID</a></tal:case
-><tal:case tal:condition="not: up_info/url"
- ><span class="mild" i18n:translate="">Root</span></tal:case></p>
-
-<ul class="errors" tal:condition="view/errors">
- <li tal:repeat="error view/error_views"><tal:span
-     tal:replace="structure error" /></li>
-</ul>
-
-<p class="status" 
-  tal:condition="exists: request/portal_status_message"
-  tal:content="request/portal_status_message"></p>
-  
-<form class="form" action="." method="post" enctype="multipart/form-data"
-   tal:attributes="action request/ACTUAL_URL">
-   <table tal:condition="view/has_subobjects">
-     <tr>
-       <th tal:repeat="column view/column_headings"
-            tal:attributes="colspan column/colspan | nothing"><a href="column"
-         tal:content="column/title"
-         tal:attributes="href column/url"
-         >Column Title</a></th>
-     </tr>
-   <tr tal:repeat="item view/layout_fields" 
-      tal:attributes="class python: (repeat['item'].even() and 'row-hilite') or ''">
-     <td tal:content="structure item/select">Checkbox</td>
-     <td><a href="" tal:attributes="href item/url"
-         tal:condition="item/icon"
-      ><img src="" alt="" border="0"
-          tal:attributes="src item/icon; alt item/type"
-          i18n:attributes="alt" /></a></td>
-     <td><a tal:attributes="href string:${item/url}/edit.html" tal:content="string:${item/name} (${item/title})"></a></td>
-     <td tal:content="item/ModificationDate"></td>
-    <td tal:content="item/position"></td>
-   </tr>
-   </table>
-<div class="buttons">
-  <tal:loop tal:repeat="action view/object_actions" 
-   tal:replace="structure action/render" />
-</div>
-<div class="buttons">
-  <tal:loop tal:repeat="action view/delta_actions" 
-   tal:replace="structure action/render" />
-   <div tal:condition="view/is_orderable"
-        tal:define="widget python:view.widgets.get('delta');
-                    hint widget/hint | nothing">
-     <label tal:attributes="for widget/name; title python: hint or None"
-       tal:content="widget/label">Move By</label>
-     <tal:block tal:replace="structure view/widgets/delta" />
-   </div>
-</div>
-<div class="buttons">
-  <tal:loop tal:repeat="action view/absolute_actions" 
-   tal:replace="structure action/render" />
-</div>
-<div class="buttons">
-  <tal:loop tal:repeat="action view/sort_actions" 
-   tal:replace="structure action/render" />
-</div>
-</form>
-
-</metal:slot>
-
-</body>
-</html>

Deleted: Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/new_folder_utest.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/new_folder_utest.txt	2009-08-20 09:25:58 UTC (rev 102989)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/new_folder_utest.txt	2009-08-20 09:26:59 UTC (rev 102990)
@@ -1,97 +0,0 @@
-Browser Views for IFolderish
-
-
-  The required environment:
-
-    Setting up a dummy site with required tools::
-
-      >>> from Products.CMFCore.tests.base.dummy import DummySite
-      >>> site = DummySite('site')
-
-      >>> from Products.CMFCore.tests.base.dummy import DummyTool
-      >>> from zope.component import getSiteManager
-      >>> from Products.CMFCore.interfaces import IPropertiesTool
-      >>> sm = getSiteManager()
-      >>> mtool = site._setObject('portal_membership', DummyTool())
-      >>> ptool = site._setObject('portal_properties', DummyTool())
-      >>> sm.registerUtility(ptool, IPropertiesTool)
-      >>> ttool = site._setObject('portal_types', DummyTool())
-      >>> utool = site._setObject('portal_url', DummyTool())
-
-
-  Basic functionality without security setup:
-
-    Setting up a simple request and an empty context object::
-
-      >>> class DummyRequest(dict):
-      ...     def __init__(self):
-      ...         self['ACTUAL_URL'] = 'actual_url'
-      ...         self.form = {}
-      >>> request = DummyRequest()
-
-      >>> from Products.CMFCore.PortalFolder import PortalFolder
-      >>> context = PortalFolder('foo').__of__(site)
-
-    The FolderView interface used by templates::
-
-      >>> from Products.CMFDefault.browser.folder import FolderView
-      >>> view = FolderView(context, request)
-
-      >>> view.title()
-      u''
-
-      >>> view.description()
-      u''
-
-      >>> view.has_local()
-      False
-
-    The ContentsView interface used by templates::
-
-      >>> from Products.CMFDefault.browser.new_folder import ContentsView
-      >>> view = ContentsView(context, request)
-
-      >>> view.title()
-      u''
-
-      >>> view.description
-      u''
-
-      >>> view.up_info()
-      {'url': u'', 'id': u'Root', 'icon': u''}
-
-      >>> view.column_headings()
-      ({'url': 'actual_url?key=Type', 'colspan': '2',
-        'key': 'Type', 'title': u'Type'},
-       {'url': 'actual_url?key=getId', 'key': 'getId', 'title': u'Name'},
-       {'url': 'actual_url?key=modified', 'key': 'modified', 'title': u'Last Modified'},
-       {'url': 'actual_url?key=position', 'key': 'position', 'title': u'Position'})
-
-      >>> view.layout_fields()
-      []
-
-      >>> view.is_orderable()
-      False
-
-      >>> view.can_sort_be_changed()
-      False
-
-    The ContentsView actions checkers:
-
-      >>> view.has_subobjects()
-      False
-
-      >>> view.check_clipboard_data()
-      False
-
-    The ContentsView has one validator:
-      >>> view.validate_items()
-      [u'Please select one or more items first.']
-
-      >>> view.validate_items(data={'foo':True})
-      []
-
-    Finally we have to clean up::
-
-      >>> from zope.testing.cleanup import cleanUp
-      >>> cleanUp()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_folder.py	2009-08-20 09:25:58 UTC (rev 102989)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_folder.py	2009-08-20 09:26:59 UTC (rev 102990)
@@ -12,7 +12,7 @@
 ##############################################################################
 """ Test Products.CMFDefault.browser.folder
 
-$Id$
+$Id: test_folder.py 100397 2009-05-26 11:51:22Z jens $
 """
 
 import unittest

Deleted: Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_new_folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_new_folder.py	2009-08-20 09:25:58 UTC (rev 102989)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/tests/test_new_folder.py	2009-08-20 09:26:59 UTC (rev 102990)
@@ -1,86 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2006 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.
-#
-##############################################################################
-"""Test Products.CMFDefault.browser.new_folder BrowserView tests
-$Id$
-"""
-
-import unittest
-
-from AccessControl.SecurityManagement import newSecurityManager
-
-from zope.component import getSiteManager
-from zope.publisher.browser import TestRequest
-from zope.publisher.interfaces.browser import IBrowserPublisher
-
-from Products.CMFCore.PortalFolder import PortalFolder
-from Products.CMFCore.tests.base.dummy import DummySite
-from Products.CMFCore.tests.base.dummy import DummyTool
-from Products.CMFCore.tests.base.dummy import DummyUserFolder, DummyContent
-from Products.CMFCore.interfaces import IPropertiesTool
-
-from Products.CMFDefault.browser.new_folder import ContentsView
-
-class FolderBrowserViewTests(unittest.TestCase):
-
-    def setUp(self):
-        """Setup a site"""
-        # maybe there is a base class for this?
-        self.site = site = DummySite('site')
-        self.sm = getSiteManager()
-        mtool = site._setObject('portal_membership', DummyTool())
-        ptool = site._setObject('portal_properties', DummyTool())
-        self.sm.registerUtility(ptool, IPropertiesTool)
-        ttool = site._setObject('portal_types', DummyTool())
-        utool = site._setObject('portal_url', DummyTool())
-        folder = PortalFolder('test_folder')
-        self.folder = site._setObject('test_folder', folder)
-    
-    def test_view(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.failUnless(IBrowserPublisher.providedBy(view))
-        
-    def test_up_info(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.assertEquals({'url':u'', 'id':u'Root', 'icon':u''}, view.up_info())
-        
-    def test_layout_fields(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.assertEquals(view.layout_fields(), [])
-    
-    def test_is_orderable(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.failIf(view.is_orderable())
-        
-    def test_sort_can_be_changed(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.failIf(view.can_sort_be_changed())
-    
-    def test_has_subobjects(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.failIf(view.has_subobjects())
-        
-    def test_check_clipboard_data(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.failIf(view.check_clipboard_data())
-    
-    def test_check_validator(self):
-        view = ContentsView(self.folder, TestRequest())
-        self.assertEquals(view.validate_items(), [u'Please select one or more items first.'])
-        self.assertEquals(view.validate_items(data={'foo':True}), [])
-
-def test_suite():
-    suite = unittest.TestSuite()
-    suite.addTest(unittest.makeSuite(FolderBrowserViewTests))
-    return suite
-    
-# bin/test -s ~/CMF-Sandbox/cmf-trunk/src/Products.CMFDefault/Products/CMFDefault/browser
\ No newline at end of file



More information about the Checkins mailing list