?? chrome.py
字號:
from trac.core import Component, ComponentManager, implementsfrom trac.test import EnvironmentStub, Mockfrom trac.web.chrome import add_link, add_script, add_stylesheet, Chrome, \ INavigationContributorfrom trac.web.href import Hrefimport unittestclass ChromeTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() from trac.core import ComponentMeta self._old_registry = ComponentMeta._registry ComponentMeta._registry = {} def tearDown(self): from trac.core import ComponentMeta ComponentMeta._registry = self._old_registry def test_add_link_simple(self): req = Mock(chrome={}, href=Href('/trac.cgi')) add_link(req, 'start', '/trac/wiki') self.assertEqual('/trac/wiki', req.chrome['links']['start'][0]['href']) def test_add_link_advanced(self): req = Mock(chrome={}, href=Href('/trac.cgi')) add_link(req, 'start', '/trac/wiki', 'Start page', 'text/html', 'home') link = req.chrome['links']['start'][0] self.assertEqual('/trac/wiki', link['href']) self.assertEqual('Start page', link['title']) self.assertEqual('text/html', link['type']) self.assertEqual('home', link['class']) def test_add_script(self): req = Mock(base_path='/trac.cgi', chrome={}, href=Href('/trac.cgi')) add_script(req, 'common/js/trac.js') add_script(req, 'common/js/trac.js') scripts = req.chrome['scripts'] self.assertEqual(1, len(scripts)) self.assertEqual('text/javascript', scripts[0]['type']) self.assertEqual('/trac.cgi/chrome/common/js/trac.js', scripts[0]['href']) def test_add_stylesheet(self): req = Mock(base_path='/trac.cgi', chrome={}, href=Href('/trac.cgi')) add_stylesheet(req, 'common/css/trac.css') add_stylesheet(req, 'common/css/trac.css') links = req.chrome['links']['stylesheet'] self.assertEqual(1, len(links)) self.assertEqual('text/css', links[0]['type']) self.assertEqual('/trac.cgi/chrome/common/css/trac.css', links[0]['href']) def test_htdocs_location(self): req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), base_path='/trac.cgi', path_info='') info = Chrome(self.env).prepare_request(req) self.assertEqual('/trac.cgi/chrome/common/', info['htdocs_location']) def test_logo(self): req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), base_path='/trac.cgi', path_info='') # Verify that no logo data is put in the HDF if no logo is configured self.env.config.set('header_logo', 'src', '') info = Chrome(self.env).prepare_request(req) assert 'src' not in info['logo'] # Test with a relative path to the logo image self.env.config.set('header_logo', 'src', 'foo.png') info = Chrome(self.env).prepare_request(req) self.assertEqual('/trac.cgi/chrome/common/foo.png', info['logo']['src']) # Test with a server-relative path to the logo image self.env.config.set('header_logo', 'src', '/img/foo.png') info = Chrome(self.env).prepare_request(req) self.assertEqual('/img/foo.png', info['logo']['src']) # Test with an absolute path to the logo image self.env.config.set('header_logo', 'src', 'http://www.example.org/foo.png') info = Chrome(self.env).prepare_request(req) self.assertEqual('http://www.example.org/foo.png', info['logo']['src']) def test_default_links(self): req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), base_path='/trac.cgi', path_info='') links = Chrome(self.env).prepare_request(req)['links'] self.assertEqual('/trac.cgi/wiki', links['start'][0]['href']) self.assertEqual('/trac.cgi/search', links['search'][0]['href']) self.assertEqual('/trac.cgi/wiki/TracGuide', links['help'][0]['href']) self.assertEqual('/trac.cgi/chrome/common/css/trac.css', links['stylesheet'][0]['href']) def test_icon_links(self): req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), base_path='/trac.cgi', path_info='') chrome = Chrome(self.env) # No icon set in config, so no icon links self.env.config.set('project', 'icon', '') links = chrome.prepare_request(req)['links'] assert 'icon' not in links assert 'shortcut icon' not in links # Relative URL for icon config option self.env.config.set('project', 'icon', 'foo.ico') links = chrome.prepare_request(req)['links'] self.assertEqual('/trac.cgi/chrome/common/foo.ico', links['icon'][0]['href']) self.assertEqual('/trac.cgi/chrome/common/foo.ico', links['shortcut icon'][0]['href']) # URL relative to the server root for icon config option self.env.config.set('project', 'icon', '/favicon.ico') links = chrome.prepare_request(req)['links'] self.assertEqual('/favicon.ico', links['icon'][0]['href']) self.assertEqual('/favicon.ico', links['shortcut icon'][0]['href']) # Absolute URL for icon config option self.env.config.set('project', 'icon', 'http://example.com/favicon.ico') links = chrome.prepare_request(req)['links'] self.assertEqual('http://example.com/favicon.ico', links['icon'][0]['href']) self.assertEqual('http://example.com/favicon.ico', links['shortcut icon'][0]['href']) def test_nav_contributor(self): class TestNavigationContributor(Component): implements(INavigationContributor) def get_active_navigation_item(self, req): return None def get_navigation_items(self, req): yield 'metanav', 'test', 'Test' req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), path_info='/', base_path='/trac.cgi') nav = Chrome(self.env).prepare_request(req)['nav'] self.assertEqual({'name': 'test', 'label': 'Test', 'active': False}, nav['metanav'][0]) def test_nav_contributor_active(self): class TestNavigationContributor(Component): implements(INavigationContributor) def get_active_navigation_item(self, req): return 'test' def get_navigation_items(self, req): yield 'metanav', 'test', 'Test' req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), path_info='/', base_path='/trac.cgi') handler = TestNavigationContributor(self.env) nav = Chrome(self.env).prepare_request(req, handler)['nav'] self.assertEqual({'name': 'test', 'label': 'Test', 'active': True}, nav['metanav'][0]) def test_nav_contributor_order(self): class TestNavigationContributor1(Component): implements(INavigationContributor) def get_active_navigation_item(self, req): return None def get_navigation_items(self, req): yield 'metanav', 'test1', 'Test 1' class TestNavigationContributor2(Component): implements(INavigationContributor) def get_active_navigation_item(self, req): return None def get_navigation_items(self, req): yield 'metanav', 'test2', 'Test 2' req = Mock(chrome={}, abs_href=Href('http://example.org/trac.cgi'), href=Href('/trac.cgi'), base_path='/trac.cgi', path_info='/') chrome = Chrome(self.env) # Test with both items set in the order option self.env.config.set('trac', 'metanav', 'test2, test1') items = chrome.prepare_request(req)['nav']['metanav'] self.assertEqual('test2', items[0]['name']) self.assertEqual('test1', items[1]['name']) # Test with only test1 in the order options self.env.config.set('trac', 'metanav', 'test1') items = chrome.prepare_request(req)['nav']['metanav'] self.assertEqual('test1', items[0]['name']) self.assertEqual('test2', items[1]['name']) # Test with only test2 in the order options self.env.config.set('trac', 'metanav', 'test2') items = chrome.prepare_request(req)['nav']['metanav'] self.assertEqual('test2', items[0]['name']) self.assertEqual('test1', items[1]['name']) # Test with none in the order options (order corresponds to # registration order) self.env.config.set('trac', 'metanav', 'foo, bar') items = chrome.prepare_request(req)['nav']['metanav'] self.assertEqual('test1', items[0]['name']) self.assertEqual('test2', items[1]['name'])def suite(): return unittest.makeSuite(ChromeTestCase, 'test')if __name__ == '__main__': unittest.main(defaultTest='suite')
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -