platform_bundle_test.py revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import json
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from extensions_paths import CHROME_API, CHROME_EXTENSIONS
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from mock_file_system import MockFileSystem
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from server_instance import ServerInstance
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from test_file_system import TestFileSystem
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from test_util import ReadFile
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_TEST_DATA = {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'api': {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'devtools': {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'inspected_window.json': ReadFile(
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          CHROME_API, 'devtools', 'inspected_window.json'),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    },
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    '_api_features.json': json.dumps({
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'alarms': {},
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app': {'extension_types': ['platform_app']},
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime': {'noparent': True},
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime.foo': {'extension_types': ['extension']},
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'declarativeWebRequest': {'extension_types': ['extension']},
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'devtools.inspectedWindow': {'extension_types': ['extension']},
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input': {'extension_types': 'all'},
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input.ime': {'extension_types': ['extension', 'platform_app']},
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'storage': {'extension_types': ['extension']},
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }),
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    '_manifest_features.json': '{}',
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    '_permission_features.json': '{}',
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'alarms.idl': ReadFile(CHROME_API, 'alarms.idl'),
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'input_ime.json': ReadFile(CHROME_API, 'input_ime.json'),
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'page_action.json': ReadFile(CHROME_API, 'page_action.json'),
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  'docs': {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    'templates': {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'json': {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'manifest.json': '{}',
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'permissions.json': '{}',
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  },
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PlatformBundleTest(unittest.TestCase):
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def setUp(self):
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_file_system = MockFileSystem(
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        TestFileSystem(_TEST_DATA, relative_to=CHROME_EXTENSIONS))
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    server_instance = ServerInstance.ForTest(file_system=mock_file_system)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self._platform_bundle = server_instance.platform_bundle
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testGetters(self):
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual([
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'alarms',
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime',
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'declarativeWebRequest',
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'devtools.inspectedWindow',
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input',
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'storage'
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ], sorted(self._platform_bundle.GetAPIModels('extensions').GetNames()))
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual([
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'alarms',
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app',
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime',
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input'
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ], sorted(self._platform_bundle.GetAPIModels('apps').GetNames()))
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual({
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime': {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'app.runtime',
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'noparent': True,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable'
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'declarativeWebRequest': {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'declarativeWebRequest',
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['extension'],
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime.foo': {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'app.runtime.foo',
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['extension'],
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'storage': {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'storage',
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['extension'],
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input.ime': {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'input.ime',
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['extension', 'platform_app'],
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'alarms': {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'alarms',
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable'
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input': {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'input',
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': 'all'
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'devtools.inspectedWindow': {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'devtools.inspectedWindow',
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['extension'],
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }, self._platform_bundle.GetFeaturesBundle(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extensions').GetAPIFeatures().Get())
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual({
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app.runtime': {
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'app.runtime',
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'noparent': True,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable'
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input': {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'input',
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': 'all'
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'input.ime': {
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'input.ime',
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['extension', 'platform_app'],
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'app': {
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'app',
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable',
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'extension_types': ['platform_app'],
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      },
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'alarms': {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'name': 'alarms',
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'channel': 'stable'
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }, self._platform_bundle.GetFeaturesBundle('apps').GetAPIFeatures().Get())
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    # Check that 'app' is resolved successfully in apps, but is None otherwise.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertNotEqual(
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        None,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        self._platform_bundle.GetReferenceResolver('apps').GetLink('app'))
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        None,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        self._platform_bundle.GetReferenceResolver('extensions').GetLink('app'))
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unittest.main()
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)