OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 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 logging |
8 import sys | |
9 import unittest | 8 import unittest |
10 | 9 |
11 from compiled_file_system import CompiledFileSystem | 10 from compiled_file_system import CompiledFileSystem |
12 from local_file_system import LocalFileSystem | |
13 from object_store_creator import ObjectStoreCreator | 11 from object_store_creator import ObjectStoreCreator |
14 from sidenav_data_source import SidenavDataSource | 12 from servlet import Request |
13 from sidenav_data_source import ( | |
14 SidenavDataSource, _AddLevels, _AddSelected, _QualifyHrefs) | |
15 from test_file_system import TestFileSystem | |
16 | |
17 | |
18 class FakeServerInstance(object): | |
19 def __init__(self, file_system): | |
20 self.compiled_host_fs_factory = CompiledFileSystem.Factory( | |
21 file_system, ObjectStoreCreator.ForTest()) | |
22 self.sidenav_json_base_path = '' | |
23 | |
15 | 24 |
16 class SamplesDataSourceTest(unittest.TestCase): | 25 class SamplesDataSourceTest(unittest.TestCase): |
17 def setUp(self): | 26 def testAddLevels(self): |
18 self._json_path = 'docs/server2/test_data/sidenav_data_source' | 27 sidenav_json = [{ |
19 self._compiled_fs_factory = CompiledFileSystem.Factory( | 28 'title': 'H2', |
20 LocalFileSystem.Create(), | 29 'items': [{ |
21 ObjectStoreCreator.ForTest()) | 30 'title': 'H3', |
31 'items': [{ 'title': 'X1' }] | |
32 }] | |
33 }] | |
22 | 34 |
23 def _CheckLevels(self, items, level=2): | 35 expected = [{ |
24 for item in items: | 36 'level': 1, |
25 self.assertEqual(level, item['level']) | 37 'title': 'H2', |
26 if 'items' in item: | 38 'items': [{ |
27 self._CheckLevels(item['items'], level=level + 1) | 39 'level': 2, |
40 'title': 'H3', | |
41 'items': [{ 'level': 3, 'title': 'X1' }] | |
42 }] | |
43 }] | |
28 | 44 |
29 def _ReadLocalFile(self, filename): | 45 _AddLevels(sidenav_json, 1) |
30 with open(os.path.join(sys.path[0], | 46 self.assertEqual(expected, sidenav_json) |
31 'test_data', | |
32 'sidenav_data_source', | |
33 filename), 'r') as f: | |
34 return f.read() | |
35 | 47 |
36 def testLevels(self): | 48 def testAddSelected(self): |
37 sidenav_data_source = SidenavDataSource.Factory(self._compiled_fs_factory, | 49 sidenav_json = [ |
38 self._json_path).Create('') | 50 { 'href': '/AH2.html' }, |
39 sidenav_json = sidenav_data_source.get('test') | 51 { |
40 self._CheckLevels(sidenav_json) | 52 'href': '/H2.html', |
53 'items': [{ | |
54 'href': '/H3.html' | |
55 }] | |
56 } | |
57 ] | |
41 | 58 |
42 def testSelected(self): | 59 expected = [ |
43 sidenav_data_source = SidenavDataSource.Factory( | 60 { 'href': '/AH2.html' }, |
44 self._compiled_fs_factory, | 61 { |
45 self._json_path).Create('www.b.com') | 62 'child_selected': True, |
46 sidenav_json = sidenav_data_source.get('test') | 63 'href': '/H2.html', |
47 # This will be prettier once JSON is loaded with an OrderedDict. | 64 'items': [{ |
48 for item in sidenav_json: | 65 'href': '/H3.html', |
49 if item['title'] == 'Jim': | 66 'selected': True |
50 self.assertTrue(item.get('child_selected', False)) | 67 }] |
51 for next_item in item['items']: | 68 } |
52 if next_item['title'] == 'B': | 69 ] |
53 self.assertTrue(next_item.get('selected', False)) | |
54 return | |
55 # If we didn't return already, we should fail. | |
56 self.fail() | |
57 | 70 |
58 def testAbsolutePath(self): | 71 _AddSelected(sidenav_json, 'H3.html') |
59 sidenav_data_source = SidenavDataSource.Factory( | 72 self.assertEqual(expected, sidenav_json) |
60 self._compiled_fs_factory, | 73 |
61 self._json_path).Create('absolute_path/test.html') | 74 def testQualifyHrefs(self): |
62 sidenav_json = sidenav_data_source.get('absolute_path') | 75 sidenav_json = [ |
63 self.assertEqual( | 76 { 'href': '/qualified/H1.html' }, |
64 sidenav_json, | 77 { 'href': 'https://qualified/X1.html' }, |
65 json.loads(self._ReadLocalFile('absolute_path_sidenav_expected.json'))) | 78 { |
79 'href': 'H2.html', | |
80 'items': [{ | |
81 'href': 'H3.html' | |
82 }] | |
83 } | |
84 ] | |
85 | |
86 expected = [ | |
87 { 'href': '/qualified/H1.html' }, | |
88 { 'href': 'https://qualified/X1.html' }, | |
89 { | |
90 'href': '/H2.html', | |
91 'items': [{ | |
92 'href': '/H3.html' | |
93 }] | |
94 } | |
95 ] | |
96 | |
97 logging.disable('warning') | |
Jeffrey Yasskin
2013/08/28 19:12:37
We should test that the warnings are generated ...
jshumway
2013/08/29 00:13:09
Okay, wasn't too sure what the best way to actuall
| |
98 _QualifyHrefs(sidenav_json) | |
99 logging.disable(logging.NOTSET) | |
100 | |
101 self.assertEqual(expected, sidenav_json) | |
102 | |
103 def testSidenavDataSource(self): | |
104 file_system = TestFileSystem({ | |
105 'apps_sidenav.json': json.dumps([{ | |
106 'title': 'H1', | |
107 'href': 'H1.html', | |
108 'items': [{ | |
109 'title': 'H2', | |
110 'href': '/H2.html' | |
111 }] | |
112 }]) | |
113 }) | |
114 | |
115 expected = [{ | |
116 'level': 2, | |
117 'child_selected': True, | |
118 'title': 'H1', | |
119 'href': '/H1.html', | |
120 'items': [{ | |
121 'level': 3, | |
122 'selected': True, | |
123 'title': 'H2', | |
124 'href': '/H2.html' | |
125 }] | |
126 }] | |
127 | |
128 sidenav_data_source = SidenavDataSource( | |
129 FakeServerInstance(file_system), Request.ForTest('/H2.html')) | |
130 | |
131 logging.disable('warning') | |
132 self.assertEqual(expected, sidenav_data_source.get('apps')) | |
133 logging.disable(logging.NOTSET) | |
134 | |
135 def testCron(self): | |
136 file_system = TestFileSystem({ | |
137 'apps_sidenav.json': '[{ "title": "H1" }]' , | |
138 'extensions_sidenav.json': '[{ "title": "H2" }]' | |
139 }) | |
140 | |
141 # Ensure Cron doesn't rely on request. | |
142 sidenav_data_source = SidenavDataSource( | |
143 FakeServerInstance(file_system), request=None) | |
144 sidenav_data_source.Cron() | |
Jeffrey Yasskin
2013/08/28 19:12:37
Is there anything you can do to assert that Cron()
jshumway
2013/08/29 00:13:09
There is a bad way that requires lots of private v
not at google - send to devlin
2013/08/29 16:30:13
We have an integration test which runs the cron jo
| |
145 | |
66 | 146 |
67 if __name__ == '__main__': | 147 if __name__ == '__main__': |
68 unittest.main() | 148 unittest.main() |
OLD | NEW |