Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Side by Side Diff: chrome/common/extensions/docs/server2/api_models_test.py

Issue 176973009: Doc server: support interfaces in src/extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename path constants, update APIModels.GetModel Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 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 unittest 7 import unittest
8 8
9 from api_models import APIModels 9 from api_models import APIModels
10 from compiled_file_system import CompiledFileSystem 10 from compiled_file_system import CompiledFileSystem
11 from extensions_paths import API, EXTENSIONS 11 from extensions_paths import CHROME_API, CHROME_EXTENSIONS
12 from features_bundle import FeaturesBundle 12 from features_bundle import FeaturesBundle
13 from file_system import FileNotFoundError 13 from file_system import FileNotFoundError
14 from mock_file_system import MockFileSystem 14 from mock_file_system import MockFileSystem
15 from object_store_creator import ObjectStoreCreator 15 from object_store_creator import ObjectStoreCreator
16 from test_file_system import TestFileSystem 16 from test_file_system import TestFileSystem
17 from test_util import ReadFile 17 from test_util import ReadFile
18 18
19 19
20 _TEST_DATA = { 20 _TEST_DATA = {
21 'api': { 21 'api': {
22 'devtools': { 22 'devtools': {
23 'inspected_window.json': ReadFile( 23 'inspected_window.json': ReadFile(
24 API, 'devtools', 'inspected_window.json'), 24 CHROME_API, 'devtools', 'inspected_window.json'),
25 }, 25 },
26 '_api_features.json': json.dumps({ 26 '_api_features.json': json.dumps({
27 'alarms': {}, 27 'alarms': {},
28 'app': {}, 28 'app': {},
29 'app.runtime': {'noparent': True}, 29 'app.runtime': {'noparent': True},
30 'app.runtime.experimental': {}, 30 'app.runtime.experimental': {},
31 'app.runtime.experimental.foo': {}, 31 'app.runtime.experimental.foo': {},
32 'declarativeWebRequest': {}, 32 'declarativeWebRequest': {},
33 'devtools.inspectedWindow': {}, 33 'devtools.inspectedWindow': {},
34 'experimental.accessibility': {}, 34 'experimental.accessibility': {},
35 'storage': {}, 35 'storage': {},
36 }), 36 }),
37 '_manifest_features.json': '{}', 37 '_manifest_features.json': '{}',
38 '_permission_features.json': '{}', 38 '_permission_features.json': '{}',
39 'alarms.idl': ReadFile(API, 'alarms.idl'), 39 'alarms.idl': ReadFile(CHROME_API, 'alarms.idl'),
40 'declarative_web_request.json': ReadFile( 40 'declarative_web_request.json': ReadFile(
41 API, 'declarative_web_request.json'), 41 CHROME_API, 'declarative_web_request.json'),
42 'experimental_accessibility.json': ReadFile( 42 'experimental_accessibility.json': ReadFile(
43 API, 'experimental_accessibility.json'), 43 CHROME_API, 'experimental_accessibility.json'),
44 'page_action.json': ReadFile(API, 'page_action.json'), 44 'page_action.json': ReadFile(CHROME_API, 'page_action.json'),
45 }, 45 },
46 'docs': { 46 'docs': {
47 'templates': { 47 'templates': {
48 'json': { 48 'json': {
49 'manifest.json': '{}', 49 'manifest.json': '{}',
50 'permissions.json': '{}', 50 'permissions.json': '{}',
51 } 51 }
52 } 52 }
53 }, 53 },
54 } 54 }
55 55
56 56
57 class APIModelsTest(unittest.TestCase): 57 class APIModelsTest(unittest.TestCase):
58 def setUp(self): 58 def setUp(self):
59 object_store_creator = ObjectStoreCreator.ForTest() 59 object_store_creator = ObjectStoreCreator.ForTest()
60 compiled_fs_factory = CompiledFileSystem.Factory(object_store_creator) 60 compiled_fs_factory = CompiledFileSystem.Factory(object_store_creator)
61 self._mock_file_system = MockFileSystem( 61 self._mock_file_system = MockFileSystem(
62 TestFileSystem(_TEST_DATA, relative_to=EXTENSIONS)) 62 TestFileSystem(_TEST_DATA, relative_to=CHROME_EXTENSIONS))
63 features_bundle = FeaturesBundle( 63 features_bundle = FeaturesBundle(
64 self._mock_file_system, compiled_fs_factory, object_store_creator) 64 self._mock_file_system, compiled_fs_factory, object_store_creator)
65 self._api_models = APIModels( 65 self._api_models = APIModels(
66 features_bundle, compiled_fs_factory, self._mock_file_system) 66 features_bundle, compiled_fs_factory, self._mock_file_system)
67 67
68 def testGetNames(self): 68 def testGetNames(self):
69 # Both 'app' and 'app.runtime' appear here because 'app.runtime' has 69 # Both 'app' and 'app.runtime' appear here because 'app.runtime' has
70 # noparent:true, but 'app.runtime.experimental' etc doesn't so it's a 70 # noparent:true, but 'app.runtime.experimental' etc doesn't so it's a
71 # sub-feature of 'app.runtime' not a separate API. 71 # sub-feature of 'app.runtime' not a separate API.
72 # 'devtools.inspectedWindow' is an API because there is no 'devtools'. 72 # 'devtools.inspectedWindow' is an API because there is no 'devtools'.
73 self.assertEqual( 73 self.assertEqual(
74 ['alarms', 'app', 'app.runtime', 'declarativeWebRequest', 74 ['alarms', 'app', 'app.runtime', 'declarativeWebRequest',
75 'devtools.inspectedWindow', 'experimental.accessibility', 'storage'], 75 'devtools.inspectedWindow', 'experimental.accessibility', 'storage'],
76 sorted(self._api_models.GetNames())) 76 sorted(self._api_models.GetNames()))
77 77
78 def testGetModel(self): 78 def testGetModel(self):
79 def get_model_name(api_name): 79 def get_model_name(api_name):
80 return self._api_models.GetModel(api_name).Get().name 80 return self._api_models.GetModel(api_name).Get().name
81 self.assertEqual('devtools.inspectedWindow', 81 self.assertEqual('devtools.inspectedWindow',
82 get_model_name('devtools.inspectedWindow')) 82 get_model_name('devtools.inspectedWindow'))
83 self.assertEqual('devtools.inspectedWindow', 83 self.assertEqual('devtools.inspectedWindow',
84 get_model_name('devtools/inspected_window.json')) 84 get_model_name('devtools/inspected_window.json'))
85 self.assertEqual('devtools.inspectedWindow', 85 self.assertEqual('devtools.inspectedWindow',
86 get_model_name(API + 'devtools/inspected_window.json')) 86 get_model_name(CHROME_API +
87 'devtools/inspected_window.json'))
87 self.assertEqual('alarms', get_model_name('alarms')) 88 self.assertEqual('alarms', get_model_name('alarms'))
88 self.assertEqual('alarms', get_model_name('alarms.idl')) 89 self.assertEqual('alarms', get_model_name('alarms.idl'))
89 self.assertEqual('alarms', get_model_name(API + 'alarms.idl')) 90 self.assertEqual('alarms', get_model_name(CHROME_API + 'alarms.idl'))
90 self.assertEqual('declarativeWebRequest', 91 self.assertEqual('declarativeWebRequest',
91 get_model_name('declarativeWebRequest')) 92 get_model_name('declarativeWebRequest'))
92 self.assertEqual('declarativeWebRequest', 93 self.assertEqual('declarativeWebRequest',
93 get_model_name('declarative_web_request.json')) 94 get_model_name('declarative_web_request.json'))
94 self.assertEqual('declarativeWebRequest', 95 self.assertEqual('declarativeWebRequest',
95 get_model_name(API + 'declarative_web_request.json')) 96 get_model_name(CHROME_API +
97 'declarative_web_request.json'))
96 self.assertEqual('experimental.accessibility', 98 self.assertEqual('experimental.accessibility',
97 get_model_name('experimental.accessibility')) 99 get_model_name('experimental.accessibility'))
98 self.assertEqual('experimental.accessibility', 100 self.assertEqual('experimental.accessibility',
99 get_model_name('experimental_accessibility.json')) 101 get_model_name('experimental_accessibility.json'))
100 self.assertEqual('experimental.accessibility', 102 self.assertEqual('experimental.accessibility',
101 get_model_name(API + 'experimental_accessibility.json')) 103 get_model_name(CHROME_API +
104 'experimental_accessibility.json'))
102 self.assertEqual('pageAction', get_model_name('pageAction')) 105 self.assertEqual('pageAction', get_model_name('pageAction'))
103 self.assertEqual('pageAction', get_model_name('page_action.json')) 106 self.assertEqual('pageAction', get_model_name('page_action.json'))
104 self.assertEqual('pageAction', get_model_name(API + 'page_action.json')) 107 self.assertEqual('pageAction', get_model_name(CHROME_API +
108 'page_action.json'))
105 109
106 def testGetNonexistentModel(self): 110 def testGetNonexistentModel(self):
107 self.assertRaises(FileNotFoundError, 111 self.assertRaises(FileNotFoundError,
108 self._api_models.GetModel('notfound').Get) 112 self._api_models.GetModel('notfound').Get)
109 self.assertRaises(FileNotFoundError, 113 self.assertRaises(FileNotFoundError,
110 self._api_models.GetModel('notfound.json').Get) 114 self._api_models.GetModel('notfound.json').Get)
111 self.assertRaises(FileNotFoundError, 115 self.assertRaises(FileNotFoundError,
112 self._api_models.GetModel(API + 'notfound.json').Get) 116 self._api_models.GetModel(CHROME_API +
117 'notfound.json').Get)
113 self.assertRaises(FileNotFoundError, 118 self.assertRaises(FileNotFoundError,
114 self._api_models.GetModel(API + 'alarms.json').Get) 119 self._api_models.GetModel(CHROME_API +
120 'alarms.json').Get)
115 self.assertRaises(FileNotFoundError, 121 self.assertRaises(FileNotFoundError,
116 self._api_models.GetModel('storage').Get) 122 self._api_models.GetModel('storage').Get)
117 self.assertRaises(FileNotFoundError, 123 self.assertRaises(FileNotFoundError,
118 self._api_models.GetModel(API + 'storage.json').Get) 124 self._api_models.GetModel(CHROME_API +
125 'storage.json').Get)
119 self.assertRaises(FileNotFoundError, 126 self.assertRaises(FileNotFoundError,
120 self._api_models.GetModel(API + 'storage.idl').Get) 127 self._api_models.GetModel(CHROME_API +
128 'storage.idl').Get)
121 129
122 def testSingleFile(self): 130 def testSingleFile(self):
123 # 2 stats (1 for JSON and 1 for IDL), 1 read (for IDL file which existed). 131 # 4 stats (1 for JSON and 1 for IDL, in both possible API path),
132 # 1 read (for IDL file which existed).
124 future = self._api_models.GetModel('alarms') 133 future = self._api_models.GetModel('alarms')
125 self.assertTrue(*self._mock_file_system.CheckAndReset( 134 self.assertTrue(*self._mock_file_system.CheckAndReset(
126 read_count=1, stat_count=2)) 135 read_count=1, stat_count=4))
127 136
128 # 1 read-resolve (for the IDL file). 137 # 1 read-resolve (for the IDL file).
129 # 138 #
130 # The important part here and above is that it's only doing a single read; 139 # The important part here and above is that it's only doing a single read;
131 # any more would break the contract that only a single file is accessed - 140 # any more would break the contract that only a single file is accessed -
132 # see the SingleFile annotation in api_models._CreateAPIModel. 141 # see the SingleFile annotation in api_models._CreateAPIModel.
133 future.Get() 142 future.Get()
134 self.assertTrue(*self._mock_file_system.CheckAndReset( 143 self.assertTrue(*self._mock_file_system.CheckAndReset(
135 read_resolve_count=1)) 144 read_resolve_count=1))
136 145
137 # 2 stats (1 for JSON and 1 for IDL), no reads (still cached). 146 # 4 stats (1 for JSON and 1 for IDL, in both possible API paths)
147 # no reads (still cached).
138 future = self._api_models.GetModel('alarms') 148 future = self._api_models.GetModel('alarms')
139 self.assertTrue(*self._mock_file_system.CheckAndReset(stat_count=2)) 149 self.assertTrue(*self._mock_file_system.CheckAndReset(stat_count=4))
140 future.Get() 150 future.Get()
141 self.assertTrue(*self._mock_file_system.CheckAndReset()) 151 self.assertTrue(*self._mock_file_system.CheckAndReset())
142 152
143 153
144 if __name__ == '__main__': 154 if __name__ == '__main__':
145 unittest.main() 155 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698