1
##############################################################################
3
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
6
# This software is subject to the provisions of the Zope Public License,
7
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
8
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
9
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
10
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
11
# FOR A PARTICULAR PURPOSE.
13
##############################################################################
14
"""Basic skin standard macros
16
$Id: test_standardmacros.py 106671 2009-12-16 22:56:40Z hannosch $
20
from zope.component import getGlobalSiteManager
21
from zope.component.testing import PlacelessSetup
22
from zope.interface import implements, Interface
23
from zope.publisher.browser import TestRequest
24
from zope.publisher.interfaces.browser import IBrowserView
25
from zope.publisher.interfaces.browser import IDefaultBrowserLayer
27
from zope.app.basicskin.standardmacros import Macros
30
class ViewWithMacros(object):
31
implements(IBrowserView)
33
def __init__(self, context, request):
34
self.context = context
35
self.request = request
40
def __getitem__(self, key):
41
return self.pages[key]
45
class I(Interface): pass
50
class page1(ViewWithMacros):
51
pages = {'foo':'page1_foo',
54
class collides_with_page1(ViewWithMacros):
55
pages = {'foo':'collides_with_page1_foo',
56
'baz':'collides_with_page1_baz'}
58
class works_with_page1(ViewWithMacros):
59
pages = {'fish':'works_with_page1_fish',
60
'tree':'works_with_page1_tree'}
62
def createMacrosInstance(pages):
65
aliases = {'afoo': 'foo', 'abar': 'bar'}
67
def __init__(self, context, request):
68
self.context = context
69
self.request = request
71
return T(C(), TestRequest())
74
def browserView(for_, name, factory):
75
gsm = getGlobalSiteManager()
76
for_ = (for_, ) + (IDefaultBrowserLayer,)
77
gsm.registerAdapter(factory, for_, Interface, name, event=False)
80
class Test(PlacelessSetup, unittest.TestCase):
83
PlacelessSetup.setUp(self)
84
browserView(I, 'page1', page1)
85
browserView(I, 'collides_with_page1', collides_with_page1)
86
browserView(I, 'works_with_page1', works_with_page1)
88
def testSinglePage(self):
89
macros = createMacrosInstance(('page1',))
90
self.assertEqual(macros['foo'], 'page1_foo')
91
self.assertEqual(macros['bar'], 'page1_bar')
92
self.assertRaises(KeyError, macros.__getitem__, 'fish')
94
def testConcordentPages(self):
95
macros = createMacrosInstance(('page1', 'works_with_page1'))
96
self.assertEqual(macros['foo'], 'page1_foo')
97
self.assertEqual(macros['bar'], 'page1_bar')
98
self.assertEqual(macros['fish'], 'works_with_page1_fish')
99
self.assertEqual(macros['tree'], 'works_with_page1_tree')
100
self.assertRaises(KeyError, macros.__getitem__, 'pants')
102
def testConflictingPages(self):
103
macros = createMacrosInstance(('page1', 'collides_with_page1'))
104
self.assertEqual(macros['foo'], 'page1_foo')
105
self.assertEqual(macros['bar'], 'page1_bar')
106
self.assertEqual(macros['baz'], 'collides_with_page1_baz')
107
self.assertRaises(KeyError, macros.__getitem__, 'pants')
109
def testMacroAliases(self):
110
macros = createMacrosInstance(('page1', 'collides_with_page1'))
111
self.assertEqual(macros['afoo'], 'page1_foo')
112
self.assertEqual(macros['abar'], 'page1_bar')
116
loader = unittest.TestLoader()
117
return loader.loadTestsFromTestCase(Test)
119
if __name__=='__main__':
120
unittest.TextTestRunner().run(test_suite())