cygprofile: increase timeouts to allow showing web contents
[chromium-blink-merge.git] / chrome / common / extensions / docs / server2 / permissions_data_source_test.py
blobf7a9090fb9a430efe629dc877666453cfd7ea080
1 #!/usr/bin/env python
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.
6 import json
7 from operator import itemgetter
8 import unittest
10 from extensions_paths import CHROME_EXTENSIONS
11 from permissions_data_source import PermissionsDataSource
12 from server_instance import ServerInstance
13 from third_party.motemplate import Motemplate
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.
20 'activeTab': {
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.
25 'alarms': {
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.
30 'audioCapture': {
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
38 # it's an API.
39 'cookies': {
40 'extension_types': ['platform_app']
42 'host-permissions': {}
46 _PERMISSIONS_JSON = {
47 # This will appear for both apps and extensions with a custom description,
48 # anchor, etc.
49 'host-permissions': {
50 'anchor': 'custom-anchor',
51 'extension_types': ['platform_app', 'extension'],
52 'literal_name': True,
53 'name': 'match pattern',
54 'partial': 'permissions/host_permissions.html',
56 # A custom 'partial' here overrides the default partial.
57 'activeTab': {
58 'partial': 'permissions/active_tab.html'
63 _PERMISSIONS_PARTIALS = {
64 'active_tab.html': 'active tab',
65 'host_permissions.html': 'host permissions',
66 'generic_description.html': 'generic description',
70 _API_FEATURES = {
71 'alarms': {
72 'dependencies': ['permission:alarms']
74 'cookies': {
75 'dependencies': ['permission:cookies']
80 class PermissionsDataSourceTest(unittest.TestCase):
81 def testCreatePermissionsDataSource(self):
82 expected_extensions = [
84 'anchor': 'custom-anchor',
85 'description': 'host permissions',
86 'extension_types': ['platform_app', 'extension'],
87 'literal_name': True,
88 'name': 'match pattern',
89 'channel': 'stable'
92 'anchor': 'activeTab',
93 'description': 'active tab',
94 'extension_types': ['extension'],
95 'name': 'activeTab',
96 'channel': 'stable'
99 'anchor': 'alarms',
100 'description': 'generic description',
101 'extension_types': ['platform_app', 'extension'],
102 'name': 'alarms',
103 'channel': 'stable'
107 expected_apps = [
109 'anchor': 'custom-anchor',
110 'description': 'host permissions',
111 'extension_types': ['platform_app', 'extension'],
112 'literal_name': True,
113 'name': 'match pattern',
114 'channel': 'stable'
117 'anchor': 'alarms',
118 'description': 'generic description',
119 'extension_types': ['platform_app', 'extension'],
120 'name': 'alarms',
121 'channel': 'stable'
124 'anchor': 'cookies',
125 'description': 'generic description',
126 'extension_types': ['platform_app'],
127 'name': 'cookies',
128 'channel': 'stable'
132 test_file_system = TestFileSystem({
133 'api': {
134 '_api_features.json': json.dumps(_API_FEATURES),
135 '_manifest_features.json': '{}',
136 '_permission_features.json': json.dumps(_PERMISSION_FEATURES),
138 'docs': {
139 'templates': {
140 'json': {
141 'manifest.json': '{}',
142 'permissions.json': json.dumps(_PERMISSIONS_JSON),
144 'private': {
145 'permissions': _PERMISSIONS_PARTIALS
149 }, relative_to=CHROME_EXTENSIONS)
151 permissions_data_source = PermissionsDataSource(
152 ServerInstance.ForTest(test_file_system), None)
154 actual_extensions = permissions_data_source.get('declare_extensions')
155 actual_apps = permissions_data_source.get('declare_apps')
157 # Normalise all test data.
158 # - Sort keys. Since the tests don't use OrderedDicts we can't make
159 # assertions about the order, which is unfortunate. Oh well.
160 # - Render all of the Handlerbar instances so that we can use ==.
161 # Motemplates don't implement __eq__, but they probably should.
162 for lst in (actual_apps, actual_extensions,
163 expected_apps, expected_extensions):
164 lst.sort(key=itemgetter('name'))
165 for mapping in lst:
166 for key, value in mapping.iteritems():
167 if isinstance(value, Motemplate):
168 mapping[key] = value.Render().text
170 self.assertEqual(expected_extensions, actual_extensions)
171 self.assertEqual(expected_apps, actual_apps)
174 if __name__ == '__main__':
175 unittest.main()