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
4 # found in the LICENSE file.
7 from operator
import itemgetter
10 from extensions_paths
import CHROME_EXTENSIONS
11 from permissions_data_source
import PermissionsDataSource
12 from server_instance
import ServerInstance
13 from third_party
.handlebar
import Handlebar
14 from test_file_system
import TestFileSystem
17 _PERMISSION_FEATURES
= {
18 # This will appear for extensions with a description as defined in the
19 # permissions.json file.
21 'extension_types': ['extension'],
23 # This will appear for apps and extensions with an auto-generated description
24 # since the entry appears in _api_features.json.
26 'extension_types': ['platform_app', 'extension'],
28 # This won't appear for anything since there's no entry in permissions.json
29 # and it's not an API.
31 'extension_types': ['platform_app'],
33 # This won't appear for anything because it's private.
34 'commandLinePrivate': {
35 'extension_types': ['platform_app', 'extension']
37 # This will only appear for apps with an auto-generated description because
40 'extension_types': ['platform_app']
46 # This will appear for both apps and extensions with a custom description,
49 'anchor': 'custom-anchor',
50 'extension_types': ['platform_app', 'extension'],
52 'name': 'match pattern',
53 'partial': 'permissions/host_permissions.html',
55 # A custom 'partial' here overrides the default partial.
57 'partial': 'permissions/active_tab.html'
62 _PERMISSIONS_PARTIALS
= {
63 'active_tab.html': 'active tab',
64 'host_permissions.html': 'host permissions',
65 'generic_description.html': 'generic description',
71 'dependencies': ['permission:alarms']
74 'dependencies': ['permission:cookies']
79 class PermissionsDataSourceTest(unittest
.TestCase
):
80 def testCreatePermissionsDataSource(self
):
81 expected_extensions
= [
83 'anchor': 'custom-anchor',
84 'description': 'host permissions',
86 'name': 'match pattern',
87 'platforms': ['apps', 'extensions']
90 'anchor': 'activeTab',
91 'description': 'active tab',
93 'platforms': ['extensions'],
97 'description': 'generic description',
99 'platforms': ['apps', 'extensions'],
105 'anchor': 'custom-anchor',
106 'description': 'host permissions',
107 'literal_name': True,
108 'name': 'match pattern',
109 'platforms': ['apps', 'extensions'],
113 'description': 'generic description',
115 'platforms': ['apps', 'extensions'],
119 'description': 'generic description',
121 'platforms': ['apps'],
125 test_file_system
= TestFileSystem({
127 '_api_features.json': json
.dumps(_API_FEATURES
),
128 '_manifest_features.json': '{}',
129 '_permission_features.json': json
.dumps(_PERMISSION_FEATURES
),
134 'manifest.json': '{}',
135 'permissions.json': json
.dumps(_PERMISSIONS_JSON
),
138 'permissions': _PERMISSIONS_PARTIALS
142 }, relative_to
=CHROME_EXTENSIONS
)
144 permissions_data_source
= PermissionsDataSource(
145 ServerInstance
.ForTest(test_file_system
), None)
147 actual_extensions
= permissions_data_source
.get('declare_extensions')
148 actual_apps
= permissions_data_source
.get('declare_apps')
150 # Normalise all test data.
151 # - Sort keys. Since the tests don't use OrderedDicts we can't make
152 # assertions about the order, which is unfortunate. Oh well.
153 # - Render all of the Handlerbar instances so that we can use ==.
154 # Handlebars don't implement __eq__, but they probably should.
155 for lst
in (actual_apps
, actual_extensions
,
156 expected_apps
, expected_extensions
):
157 lst
.sort(key
=itemgetter('name'))
159 for key
, value
in mapping
.iteritems():
160 if isinstance(value
, Handlebar
):
161 mapping
[key
] = value
.Render().text
163 self
.assertEqual(expected_extensions
, actual_extensions
)
164 self
.assertEqual(expected_apps
, actual_apps
)
167 if __name__
== '__main__':