comparison examples/trac/trac/web/tests/chrome.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
comparison
equal deleted inserted replaced
38:ee669cb9cccc 39:93b4dcbafd7b
1 from trac.config import Configuration
2 from trac.core import Component, ComponentManager, implements
3 from trac.perm import PermissionCache
4 from trac.test import EnvironmentStub, Mock
5 from trac.web.clearsilver import HDFWrapper
6 from trac.web.chrome import add_link, add_stylesheet, Chrome, \
7 INavigationContributor
8 from trac.web.href import Href
9
10 import unittest
11
12
13 class ChromeTestCase(unittest.TestCase):
14
15 def test_add_link_simple(self):
16 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'))
17 add_link(req, 'start', '/trac/wiki')
18 self.assertEqual('/trac/wiki', req.hdf['chrome.links.start.0.href'])
19
20 def test_add_link_advanced(self):
21 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'))
22 add_link(req, 'start', '/trac/wiki', 'Start page', 'text/html', 'home')
23 self.assertEqual('/trac/wiki', req.hdf['chrome.links.start.0.href'])
24 self.assertEqual('Start page', req.hdf['chrome.links.start.0.title'])
25 self.assertEqual('text/html', req.hdf['chrome.links.start.0.type'])
26 self.assertEqual('home', req.hdf['chrome.links.start.0.class'])
27
28 def test_add_stylesheet(self):
29 req = Mock(base_path='/trac.cgi', hdf=HDFWrapper(), href=Href('/trac.cgi'))
30 add_stylesheet(req, 'common/css/trac.css')
31 self.assertEqual('text/css', req.hdf['chrome.links.stylesheet.0.type'])
32 self.assertEqual('/trac.cgi/chrome/common/css/trac.css',
33 req.hdf['chrome.links.stylesheet.0.href'])
34
35 def test_htdocs_location(self):
36 env = EnvironmentStub(enable=[])
37 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
38 base_path='/trac.cgi', path_info='')
39 Chrome(env).populate_hdf(req, None)
40 self.assertEqual('/trac.cgi/chrome/common/', req.hdf['htdocs_location'])
41
42 def test_logo(self):
43 env = EnvironmentStub(enable=[])
44 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
45 base_path='/trac.cgi', path_info='')
46
47 # Verify that no logo data is put in the HDF if no logo is configured
48 env.config.set('header_logo', 'src', '')
49 Chrome(env).populate_hdf(req, None)
50 assert 'chrome.logo.src' not in req.hdf
51
52 # Test with a relative path to the logo image
53 req.hdf = HDFWrapper()
54 env.config.set('header_logo', 'src', 'foo.png')
55 Chrome(env).populate_hdf(req, None)
56 self.assertEqual('/trac.cgi/chrome/common/foo.png',
57 req.hdf['chrome.logo.src'])
58
59 # Test with a server-relative path to the logo image
60 req.hdf = HDFWrapper()
61 env.config.set('header_logo', 'src', '/img/foo.png')
62 Chrome(env).populate_hdf(req, None)
63 self.assertEqual('/img/foo.png', req.hdf['chrome.logo.src'])
64
65 # Test with an absolute path to the logo image
66 req.hdf = HDFWrapper()
67 env.config.set('header_logo', 'src', 'http://www.example.org/foo.png')
68 Chrome(env).populate_hdf(req, None)
69 self.assertEqual('http://www.example.org/foo.png',
70 req.hdf['chrome.logo.src'])
71
72 def test_default_links(self):
73 env = EnvironmentStub(enable=[])
74 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
75 base_path='/trac.cgi', path_info='')
76 Chrome(env).populate_hdf(req, None)
77 self.assertEqual('/trac.cgi/wiki',
78 req.hdf['chrome.links.start.0.href'])
79 self.assertEqual('/trac.cgi/search',
80 req.hdf['chrome.links.search.0.href'])
81 self.assertEqual('/trac.cgi/wiki/TracGuide',
82 req.hdf['chrome.links.help.0.href'])
83 self.assertEqual('/trac.cgi/chrome/common/css/trac.css',
84 req.hdf['chrome.links.stylesheet.0.href'])
85
86 def test_icon_links(self):
87 env = EnvironmentStub(enable=[])
88 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
89 base_path='/trac.cgi', path_info='')
90
91 # No icon set in config, so no icon links
92 env.config.set('project', 'icon', '')
93 Chrome(env).populate_hdf(req, None)
94 assert 'chrome.links.icon' not in req.hdf
95 assert 'chrome.links.shortcut icon' not in req.hdf
96
97 # Relative URL for icon config option
98 env.config.set('project', 'icon', 'trac.ico')
99 Chrome(env).populate_hdf(req, None)
100 self.assertEqual('/trac.cgi/chrome/common/trac.ico',
101 req.hdf['chrome.links.icon.0.href'])
102 self.assertEqual('/trac.cgi/chrome/common/trac.ico',
103 req.hdf['chrome.links.shortcut icon.0.href'])
104
105 # URL relative to the server root for icon config option
106 req.hdf = HDFWrapper()
107 env.config.set('project', 'icon', '/favicon.ico')
108 Chrome(env).populate_hdf(req, None)
109 self.assertEqual('/favicon.ico',
110 req.hdf['chrome.links.icon.0.href'])
111 self.assertEqual('/favicon.ico',
112 req.hdf['chrome.links.shortcut icon.0.href'])
113
114 # Absolute URL for icon config option
115 req.hdf = HDFWrapper()
116 env.config.set('project', 'icon', 'http://example.com/favicon.ico')
117 Chrome(env).populate_hdf(req, None)
118 self.assertEqual('http://example.com/favicon.ico',
119 req.hdf['chrome.links.icon.0.href'])
120 self.assertEqual('http://example.com/favicon.ico',
121 req.hdf['chrome.links.shortcut icon.0.href'])
122
123 def test_nav_contributor(self):
124 class TestNavigationContributor(Component):
125 implements(INavigationContributor)
126 def get_active_navigation_item(self, req):
127 return None
128 def get_navigation_items(self, req):
129 yield 'metanav', 'test', 'Test'
130 env = EnvironmentStub(enable=[TestNavigationContributor])
131 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
132 path_info='/', base_path='/trac.cgi')
133 chrome = Chrome(env)
134 chrome.populate_hdf(req, None)
135 self.assertEqual('Test', req.hdf['chrome.nav.metanav.test'])
136 self.assertRaises(KeyError, req.hdf.__getitem__,
137 'chrome.nav.metanav.test.active')
138
139 def test_nav_contributor_active(self):
140 class TestNavigationContributor(Component):
141 implements(INavigationContributor)
142 def get_active_navigation_item(self, req):
143 return 'test'
144 def get_navigation_items(self, req):
145 yield 'metanav', 'test', 'Test'
146 env = EnvironmentStub(enable=[TestNavigationContributor])
147 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
148 path_info='/', base_path='/trac.cgi')
149 chrome = Chrome(env)
150 chrome.populate_hdf(req, TestNavigationContributor(env))
151 self.assertEqual('Test', req.hdf['chrome.nav.metanav.test'])
152 self.assertEqual('1', req.hdf['chrome.nav.metanav.test.active'])
153
154 def test_nav_contributor_order(self):
155 class TestNavigationContributor1(Component):
156 implements(INavigationContributor)
157 def get_active_navigation_item(self, req):
158 return None
159 def get_navigation_items(self, req):
160 yield 'metanav', 'test1', 'Test 1'
161 class TestNavigationContributor2(Component):
162 implements(INavigationContributor)
163 def get_active_navigation_item(self, req):
164 return None
165 def get_navigation_items(self, req):
166 yield 'metanav', 'test2', 'Test 2'
167 env = EnvironmentStub(enable=[TestNavigationContributor1,
168 TestNavigationContributor2])
169 req = Mock(hdf=HDFWrapper(), href=Href('/trac.cgi'),
170 path_info='/', base_path='/trac.cgi')
171 chrome = Chrome(env)
172
173 # Test with both items set in the order option
174 env.config.set('trac', 'metanav', 'test2, test1')
175 chrome.populate_hdf(req, None)
176 node = req.hdf.getObj('chrome.nav.metanav').child()
177 self.assertEqual('test2', node.name())
178 self.assertEqual('test1', node.next().name())
179
180 # Test with only test1 in the order options
181 req.hdf = HDFWrapper()
182 env.config.set('trac', 'metanav', 'test1')
183 chrome.populate_hdf(req, None)
184 node = req.hdf.getObj('chrome.nav.metanav').child()
185 self.assertEqual('test1', node.name())
186 self.assertEqual('test2', node.next().name())
187
188 # Test with only test2 in the order options
189 req.hdf = HDFWrapper()
190 env.config.set('trac', 'metanav', 'test2')
191 chrome.populate_hdf(req, None)
192 node = req.hdf.getObj('chrome.nav.metanav').child()
193 self.assertEqual('test2', node.name())
194 self.assertEqual('test1', node.next().name())
195
196 # Test with none in the order options (order corresponds to
197 # registration order)
198 req.hdf = HDFWrapper()
199 env.config.set('trac', 'metanav', 'foo, bar')
200 chrome.populate_hdf(req, None)
201 node = req.hdf.getObj('chrome.nav.metanav').child()
202 self.assertEqual('test1', node.name())
203 self.assertEqual('test2', node.next().name())
204
205
206 def suite():
207 return unittest.makeSuite(ChromeTestCase, 'test')
208
209 if __name__ == '__main__':
210 unittest.main()
Copyright (C) 2012-2017 Edgewall Software