1#!/usr/bin/env python
2# Copyright 2014 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.
5
6import json
7import unittest
8
9from extensions_paths import CHROME_API, CHROME_EXTENSIONS
10from mock_file_system import MockFileSystem
11from server_instance import ServerInstance
12from test_file_system import TestFileSystem
13from test_util import ReadFile
14
15
16_TEST_DATA = {
17  'api': {
18    'devtools': {
19      'inspected_window.json': ReadFile(
20          CHROME_API, 'devtools', 'inspected_window.json'),
21    },
22    '_api_features.json': json.dumps({
23      'alarms': {},
24      'app': {'extension_types': ['platform_app']},
25      'app.runtime': {'noparent': True},
26      'app.runtime.foo': {'extension_types': ['extension']},
27      'declarativeWebRequest': {'extension_types': ['extension']},
28      'devtools.inspectedWindow': {'extension_types': ['extension']},
29      'input': {'extension_types': 'all'},
30      'input.ime': {'extension_types': ['extension', 'platform_app']},
31      'storage': {'extension_types': ['extension']},
32    }),
33    '_manifest_features.json': '{}',
34    '_permission_features.json': '{}',
35    'alarms.idl': ReadFile(CHROME_API, 'alarms.idl'),
36    'input_ime.json': ReadFile(CHROME_API, 'input_ime.json'),
37    'page_action.json': ReadFile(CHROME_API, 'page_action.json'),
38  },
39  'docs': {
40    'templates': {
41      'json': {
42        'manifest.json': '{}',
43        'permissions.json': '{}',
44      }
45    }
46  },
47}
48
49
50class PlatformBundleTest(unittest.TestCase):
51  def setUp(self):
52    mock_file_system = MockFileSystem(
53        TestFileSystem(_TEST_DATA, relative_to=CHROME_EXTENSIONS))
54    server_instance = ServerInstance.ForTest(file_system=mock_file_system)
55    self._platform_bundle = server_instance.platform_bundle
56
57  def testGetters(self):
58    self.assertEqual([
59      'alarms',
60      'app.runtime',
61      'declarativeWebRequest',
62      'devtools.inspectedWindow',
63      'input',
64      'storage'
65    ], sorted(self._platform_bundle.GetAPIModels('extensions').GetNames()))
66
67    self.assertEqual([
68      'alarms',
69      'app',
70      'app.runtime',
71      'input'
72    ], sorted(self._platform_bundle.GetAPIModels('apps').GetNames()))
73
74    self.assertEqual({
75      'app.runtime': {
76        'name': 'app.runtime',
77        'noparent': True,
78        'channel': 'stable'
79      },
80      'declarativeWebRequest': {
81        'name': 'declarativeWebRequest',
82        'channel': 'stable',
83        'extension_types': ['extension'],
84      },
85      'app.runtime.foo': {
86        'name': 'app.runtime.foo',
87        'channel': 'stable',
88        'extension_types': ['extension'],
89      },
90      'storage': {
91        'name': 'storage',
92        'channel': 'stable',
93        'extension_types': ['extension'],
94      },
95      'input.ime': {
96        'name': 'input.ime',
97        'channel': 'stable',
98        'extension_types': ['extension', 'platform_app'],
99      },
100      'alarms': {
101        'name': 'alarms',
102        'channel': 'stable'
103      },
104      'input': {
105        'name': 'input',
106        'channel': 'stable',
107        'extension_types': 'all'
108      },
109      'devtools.inspectedWindow': {
110        'name': 'devtools.inspectedWindow',
111        'channel': 'stable',
112        'extension_types': ['extension'],
113      }
114    }, self._platform_bundle.GetFeaturesBundle(
115        'extensions').GetAPIFeatures().Get())
116
117    self.assertEqual({
118      'app.runtime': {
119        'name': 'app.runtime',
120        'noparent': True,
121        'channel': 'stable'
122      },
123      'input': {
124        'name': 'input',
125        'channel': 'stable',
126        'extension_types': 'all'
127      },
128      'input.ime': {
129        'name': 'input.ime',
130        'channel': 'stable',
131        'extension_types': ['extension', 'platform_app'],
132      },
133      'app': {
134        'name': 'app',
135        'channel': 'stable',
136        'extension_types': ['platform_app'],
137      },
138      'alarms': {
139        'name': 'alarms',
140        'channel': 'stable'
141      }
142    }, self._platform_bundle.GetFeaturesBundle('apps').GetAPIFeatures().Get())
143
144    # Check that 'app' is resolved successfully in apps, but is None otherwise.
145    self.assertNotEqual(
146        None,
147        self._platform_bundle.GetReferenceResolver('apps').GetLink('app'))
148    self.assertEqual(
149        None,
150        self._platform_bundle.GetReferenceResolver('extensions').GetLink('app'))
151
152if __name__ == '__main__':
153  unittest.main()
154