Mercurial > genshi > mirror
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() |