OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import json | 6 import json |
7 import os | 7 import os |
8 import sys | 8 import sys |
9 import unittest | 9 import unittest |
10 | 10 |
11 from api_data_source import APIDataSource | 11 from api_data_source import APIDataSource |
12 from compiled_file_system import CompiledFileSystem | 12 from compiled_file_system import CompiledFileSystem |
13 from in_memory_object_store import InMemoryObjectStore | |
14 from local_file_system import LocalFileSystem | 13 from local_file_system import LocalFileSystem |
15 from reference_resolver import ReferenceResolver | 14 from reference_resolver import ReferenceResolver |
16 from template_data_source import TemplateDataSource | 15 from template_data_source import TemplateDataSource |
17 from third_party.handlebar import Handlebar | 16 from third_party.handlebar import Handlebar |
18 | 17 |
19 class _FakeRequest(object): | 18 class _FakeRequest(object): |
20 pass | 19 pass |
21 | 20 |
22 class _FakeFactory(object): | 21 class _FakeFactory(object): |
23 def __init__(self, input_dict=None): | 22 def __init__(self, input_dict=None): |
24 if input_dict is None: | 23 if input_dict is None: |
25 self._input_dict = {} | 24 self._input_dict = {} |
26 else: | 25 else: |
27 self._input_dict = input_dict | 26 self._input_dict = input_dict |
28 | 27 |
29 def Create(self, *args, **optargs): | 28 def Create(self, *args, **optargs): |
30 return self._input_dict | 29 return self._input_dict |
31 | 30 |
32 class TemplateDataSourceTest(unittest.TestCase): | 31 class TemplateDataSourceTest(unittest.TestCase): |
33 def setUp(self): | 32 def setUp(self): |
34 self._base_path = os.path.join(sys.path[0], | 33 self._base_path = os.path.join(sys.path[0], |
35 'test_data', | 34 'test_data', |
36 'template_data_source') | 35 'template_data_source') |
37 self._fake_api_list_data_source_factory = _FakeFactory() | 36 self._fake_api_list_data_source_factory = _FakeFactory() |
38 self._fake_intro_data_source_factory = _FakeFactory() | 37 self._fake_intro_data_source_factory = _FakeFactory() |
39 self._fake_samples_data_source_factory = _FakeFactory() | 38 self._fake_samples_data_source_factory = _FakeFactory() |
40 self._fake_sidenav_data_source_factory = _FakeFactory() | 39 self._fake_sidenav_data_source_factory = _FakeFactory() |
41 self._fake_known_issues_data_source = {} | |
42 self._object_store = InMemoryObjectStore('fake_branch') | |
43 | 40 |
44 def _ReadLocalFile(self, filename): | 41 def _ReadLocalFile(self, filename): |
45 with open(os.path.join(self._base_path, filename), 'r') as f: | 42 with open(os.path.join(self._base_path, filename), 'r') as f: |
46 return f.read() | 43 return f.read() |
47 | 44 |
48 def _RenderTest(self, name, data_source): | 45 def _RenderTest(self, name, data_source): |
49 template_name = name + '_tmpl.html' | 46 template_name = name + '_tmpl.html' |
50 template = Handlebar(self._ReadLocalFile(template_name)) | 47 template = Handlebar(self._ReadLocalFile(template_name)) |
51 self.assertEquals( | 48 self.assertEquals( |
52 self._ReadLocalFile(name + '_expected.html'), | 49 self._ReadLocalFile(name + '_expected.html'), |
53 data_source.Render(template_name)) | 50 data_source.Render(template_name)) |
54 | 51 |
55 def _CreateTemplateDataSource(self, cache_factory, api_data=None): | 52 def _CreateTemplateDataSource(self, compiled_fs_factory, api_data=None): |
56 if api_data is None: | 53 if api_data is None: |
57 api_data_factory = APIDataSource.Factory(cache_factory, 'fake_path') | 54 api_data_factory = APIDataSource.Factory(compiled_fs_factory, 'fake_path') |
58 else: | 55 else: |
59 api_data_factory = _FakeFactory(api_data) | 56 api_data_factory = _FakeFactory(api_data) |
60 reference_resolver_factory = ReferenceResolver.Factory( | 57 reference_resolver_factory = ReferenceResolver.Factory( |
61 api_data_factory, | 58 api_data_factory, |
62 self._fake_api_list_data_source_factory, | 59 self._fake_api_list_data_source_factory) |
63 self._object_store) | |
64 return (TemplateDataSource.Factory('fake_channel', | 60 return (TemplateDataSource.Factory('fake_channel', |
65 api_data_factory, | 61 api_data_factory, |
66 self._fake_api_list_data_source_factory, | 62 self._fake_api_list_data_source_factory, |
67 self._fake_intro_data_source_factory, | 63 self._fake_intro_data_source_factory, |
68 self._fake_samples_data_source_factory, | 64 self._fake_samples_data_source_factory, |
69 self._fake_known_issues_data_source, | |
70 self._fake_sidenav_data_source_factory, | 65 self._fake_sidenav_data_source_factory, |
71 cache_factory, | 66 compiled_fs_factory, |
72 reference_resolver_factory, | 67 reference_resolver_factory, |
73 '.', | 68 '.', |
74 '.') | 69 '.') |
75 .Create(_FakeRequest(), 'extensions/foo')) | 70 .Create(_FakeRequest(), 'extensions/foo')) |
76 | 71 |
77 def testSimple(self): | 72 def testSimple(self): |
78 self._base_path = os.path.join(self._base_path, 'simple') | 73 self._base_path = os.path.join(self._base_path, 'simple') |
79 fetcher = LocalFileSystem(self._base_path) | 74 fetcher = LocalFileSystem(self._base_path) |
80 cache_factory = CompiledFileSystem.Factory(fetcher, self._object_store) | 75 compiled_fs_factory = CompiledFileSystem.Factory(fetcher) |
81 t_data_source = self._CreateTemplateDataSource(cache_factory) | 76 t_data_source = self._CreateTemplateDataSource(compiled_fs_factory) |
82 template_a1 = Handlebar(self._ReadLocalFile('test1.html')) | 77 template_a1 = Handlebar(self._ReadLocalFile('test1.html')) |
83 self.assertEqual(template_a1.render({}, {'templates': {}}).text, | 78 self.assertEqual(template_a1.render({}, {'templates': {}}).text, |
84 t_data_source.get('test1').render({}, {'templates': {}}).text) | 79 t_data_source.get('test1').render({}, {'templates': {}}).text) |
85 | 80 |
86 template_a2 = Handlebar(self._ReadLocalFile('test2.html')) | 81 template_a2 = Handlebar(self._ReadLocalFile('test2.html')) |
87 self.assertEqual(template_a2.render({}, {'templates': {}}).text, | 82 self.assertEqual(template_a2.render({}, {'templates': {}}).text, |
88 t_data_source.get('test2').render({}, {'templates': {}}).text) | 83 t_data_source.get('test2').render({}, {'templates': {}}).text) |
89 | 84 |
90 self.assertEqual(None, t_data_source.get('junk.html')) | 85 self.assertEqual(None, t_data_source.get('junk.html')) |
91 | 86 |
92 def testPartials(self): | 87 def testPartials(self): |
93 self._base_path = os.path.join(self._base_path, 'partials') | 88 self._base_path = os.path.join(self._base_path, 'partials') |
94 fetcher = LocalFileSystem(self._base_path) | 89 fetcher = LocalFileSystem(self._base_path) |
95 cache_factory = CompiledFileSystem.Factory(fetcher, self._object_store) | 90 compiled_fs_factory = CompiledFileSystem.Factory(fetcher) |
96 t_data_source = self._CreateTemplateDataSource(cache_factory) | 91 t_data_source = self._CreateTemplateDataSource(compiled_fs_factory) |
97 self.assertEqual( | 92 self.assertEqual( |
98 self._ReadLocalFile('test_expected.html'), | 93 self._ReadLocalFile('test_expected.html'), |
99 t_data_source.get('test_tmpl').render( | 94 t_data_source.get('test_tmpl').render( |
100 json.loads(self._ReadLocalFile('input.json')), t_data_source).text) | 95 json.loads(self._ReadLocalFile('input.json')), t_data_source).text) |
101 | 96 |
102 def testRender(self): | 97 def testRender(self): |
103 self._base_path = os.path.join(self._base_path, 'render') | 98 self._base_path = os.path.join(self._base_path, 'render') |
104 fetcher = LocalFileSystem(self._base_path) | 99 fetcher = LocalFileSystem(self._base_path) |
105 context = json.loads(self._ReadLocalFile('test1.json')) | 100 context = json.loads(self._ReadLocalFile('test1.json')) |
106 cache_factory = CompiledFileSystem.Factory(fetcher, self._object_store) | 101 compiled_fs_factory = CompiledFileSystem.Factory(fetcher) |
107 self._RenderTest( | 102 self._RenderTest( |
108 'test1', | 103 'test1', |
109 self._CreateTemplateDataSource( | 104 self._CreateTemplateDataSource( |
110 cache_factory, | 105 compiled_fs_factory, |
111 api_data=json.loads(self._ReadLocalFile('test1.json')))) | 106 api_data=json.loads(self._ReadLocalFile('test1.json')))) |
112 self._RenderTest( | 107 self._RenderTest( |
113 'test2', | 108 'test2', |
114 self._CreateTemplateDataSource( | 109 self._CreateTemplateDataSource( |
115 cache_factory, | 110 compiled_fs_factory, |
116 api_data=json.loads(self._ReadLocalFile('test2.json')))) | 111 api_data=json.loads(self._ReadLocalFile('test2.json')))) |
117 | 112 |
118 if __name__ == '__main__': | 113 if __name__ == '__main__': |
119 unittest.main() | 114 unittest.main() |
OLD | NEW |