[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Publisher/Browser/tests - testGlobalBrowserMenuService.py:1.1 testGlobalBrowserMenuServiceDirectives.py:1.1 testDirectives.py:1.6

Jim Fulton jim@zope.com
Tue, 18 Jun 2002 15:35:30 -0400


Update of /cvs-repository/Zope3/lib/python/Zope/App/Publisher/Browser/tests
In directory cvs.zope.org:/tmp/cvs-serv23687/lib/python/Zope/App/Publisher/Browser/tests

Modified Files:
	testDirectives.py 
Added Files:
	testGlobalBrowserMenuService.py 
	testGlobalBrowserMenuServiceDirectives.py 
Log Message:
implemented
http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/ContentSensitiveBrowserMenuConfigurationDirectives



=== Added File Zope3/lib/python/Zope/App/Publisher/Browser/tests/testGlobalBrowserMenuService.py ===
##############################################################################
#
# 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.
#
##############################################################################
"""XXX short summary goes here.

XXX longer description goes here.

$Id: testGlobalBrowserMenuService.py,v 1.1 2002/06/18 19:34:57 jim Exp $
"""

from unittest import TestCase, TestSuite, main, makeSuite
from Zope.Publisher.Browser.IBrowserPublisher import IBrowserPublisher
from Zope.Exceptions import Forbidden, Unauthorized, DuplicationError
from Interface import Interface
from Zope.Publisher.Browser.BrowserRequest import TestRequest
from Zope.ComponentArchitecture.tests.PlacelessSetup import PlacelessSetup

class I1(Interface): pass
class I11(I1): pass
class I12(I1): pass
class I111(I11): pass

class X:
    __implements__ = IBrowserPublisher, I111

    def f(self): pass

    def browserDefault(self, r): return self, ()
    def publishTraverse(self, request, name):
        if name[:1] == 'f':
            raise Forbidden, name
        if name[:1] == 'u':
            raise Unauthorized, name
        return self.f


class Test(PlacelessSetup, TestCase):

    def __reg(self):
        from Zope.App.Publisher.Browser.GlobalBrowserMenuService \
             import GlobalBrowserMenuService
        
        r = GlobalBrowserMenuService()
        return r
    
    def testDup(self):
        r = self.__reg()
        r.menu('test_id', 'test menu')
        self.assertRaises(DuplicationError, r.menu, 'test_id', 'test menu')
        
    def test(self):
        r = self.__reg()
        r.menu('test_id', 'test menu')
        r.menuItem('test_id', Interface, 'a1', 't1', 'd1')
        r.menuItem('test_id', I1, 'a2', 't2', 'd2')
        r.menuItem('test_id', I11, 'a3', 't3', 'd3', 'context')
        r.menuItem('test_id', I11, 'a4', 't4', 'd4', 'not:context')
        r.menuItem('test_id', I111, 'a5', 't5', 'd5')
        r.menuItem('test_id', I111, 'a6', 't6', 'd6')
        r.menuItem('test_id', I111, 'f7', 't7', 'd7')
        r.menuItem('test_id', I111, 'u8', 't8', 'd8')
        r.menuItem('test_id', I12, 'a9', 't9', 'd9')

        menu = r.getMenu('test_id', X(), TestRequest())

        def d(n):
            return {'action': "a%s" % n,
                    'title':  "t%s" % n,
                    'description':  "d%s" % n,
                    }
        
        self.assertEqual(list(menu), [d(5), d(6), d(3), d(2), d(1)])
        
    def testEmpty(self):
        r = self.__reg()
        r.menu('test_id', 'test menu')
        menu = r.getMenu('test_id', X(), TestRequest())        
        self.assertEqual(list(menu), [])


def test_suite():
    return TestSuite((
        makeSuite(Test),
        ))

if __name__=='__main__':
    main(defaultTest='test_suite')


=== Added File Zope3/lib/python/Zope/App/Publisher/Browser/tests/testGlobalBrowserMenuServiceDirectives.py ===
##############################################################################
#
# 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.
#
##############################################################################
"""XXX short summary goes here.

XXX longer description goes here.

$Id: testGlobalBrowserMenuServiceDirectives.py,v 1.1 2002/06/18 19:34:57 jim Exp $
"""

import os
from StringIO import StringIO
from unittest import TestCase, TestSuite, main, makeSuite
from Zope.Configuration.xmlconfig import xmlconfig
from Zope.Publisher.Browser.IBrowserPublisher import IBrowserPublisher
from Zope.Publisher.Browser.BrowserRequest import TestRequest
from Zope.ComponentArchitecture.tests.PlacelessSetup import PlacelessSetup

import Zope.App.Publisher.Browser
defs_path = os.path.join(
    os.path.split(Zope.App.Publisher.Browser.__file__)[0],
    'meta.zcml')

template = """<zopeConfigure
   xmlns='http://namespaces.zope.org/zope'
   xmlns:browser='http://namespaces.zope.org/browser'>
   %s
   </zopeConfigure>"""

class Test(PlacelessSetup, TestCase):

    def setUp(self):
        PlacelessSetup.setUp(self)
        xmlconfig(open(defs_path))
        
    def test(self):
        from Zope.App.Publisher.Browser.GlobalBrowserMenuService \
             import globalBrowserMenuService
        
        xmlconfig(StringIO(template % (
            """
            <browser:menu id="test_id" title="test menu" />

            <browser:menuItems menu="test_id" for="Interface.Interface">
              <browser:menuItem action="a1" title="t1" />
            </browser:menuItems>

            <browser:menuItems menu="test_id"
              for="
           Zope.App.Publisher.Browser.tests.testGlobalBrowserMenuService.I1
              ">
              <browser:menuItem action="a2" title="t2" />
            </browser:menuItems>

            <browser:menuItems menu="test_id"
              for="
           Zope.App.Publisher.Browser.tests.testGlobalBrowserMenuService.I11
              ">
              <browser:menuItem action="a3" title="t3" filter="context" />
              <browser:menuItem action="a4" title="t4" filter="not:context" />
            </browser:menuItems>

            <browser:menuItems menu="test_id"
              for="
           Zope.App.Publisher.Browser.tests.testGlobalBrowserMenuService.I111
              ">
              <browser:menuItem action="a5" title="t5" />
              <browser:menuItem action="a6" title="t6" />
              <browser:menuItem action="f7" title="t7" />
              <browser:menuItem action="u8" title="t8" />
            </browser:menuItems>

            <browser:menuItems menu="test_id"
              for="
           Zope.App.Publisher.Browser.tests.testGlobalBrowserMenuService.I12
              ">
              <browser:menuItem action="a9" title="t9" />
            </browser:menuItems>
            """)))


        from Zope.App.Publisher.Browser.tests.testGlobalBrowserMenuService \
             import X

        menu = globalBrowserMenuService.getMenu('test_id', X(), TestRequest())

        def d(n):
            return {'action': "a%s" % n,
                    'title':  "t%s" % n,
                    'description':  "",
                    }
        
        self.assertEqual(list(menu), [d(5), d(6), d(3), d(2), d(1)])


def test_suite():
    return TestSuite((
        makeSuite(Test),
        ))

if __name__=='__main__':
    main(defaultTest='test_suite')


=== Zope3/lib/python/Zope/App/Publisher/Browser/tests/testDirectives.py 1.5 => 1.6 ===
 
 import Zope.App.Publisher.Browser
-
 defs_path = os.path.join(
     os.path.split(Zope.App.Publisher.Browser.__file__)[0],
     'meta.zcml')