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