api_list_data_source_test.py revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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.
5
6import json
7import unittest
8from api_list_data_source import APIListDataSource
9from compiled_file_system import CompiledFileSystem
10from copy import deepcopy
11from features_bundle import FeaturesBundle
12from object_store_creator import ObjectStoreCreator
13from test_file_system import TestFileSystem
14
15def _ToTestData(obj):
16  '''Transforms |obj| into test data by turning a list of files into an object
17  mapping that file to its contents (derived from its name).
18  '''
19  return dict((name, name) for name in obj)
20
21def _ToTestFeatures(names):
22  '''Transforms a list of strings into a minimal JSON features object.
23  '''
24  return dict((name, {
25        'name': name,
26        'platforms': platforms
27      }) for name, platforms in names)
28
29_TEST_DATA = {
30  'public': {
31    'apps': _ToTestData([
32      'alarms.html',
33      'app_window.html',
34      'experimental_bluetooth.html',
35      'experimental_power.html',
36      'storage.html',
37    ]),
38    'extensions': _ToTestData([
39      'alarms.html',
40      'browserAction.html',
41      'experimental_history.html',
42      'experimental_power.html',
43      'infobars.html',
44      'storage.html',
45    ]),
46  },
47}
48
49_TEST_API_FEATURES = _ToTestFeatures([
50  ('alarms', ['apps', 'extensions']),
51  ('app.window', ['apps']),
52  ('browserAction', ['extensions']),
53  ('experimental.bluetooth', ['apps']),
54  ('experimental.history', ['extensions']),
55  ('experimental.power', ['apps', 'extensions']),
56  ('infobars', ['extensions']),
57  ('something_internal', ['apps']),
58  ('something_else_internal', ['extensions']),
59  ('storage', ['apps', 'extensions'])
60])
61
62
63class _FakeFeaturesBundle(object):
64  def GetAPIFeatures(self):
65    return _TEST_API_FEATURES
66
67
68class APIListDataSourceTest(unittest.TestCase):
69  def setUp(self):
70    object_store_creator = ObjectStoreCreator.ForTest()
71    self._factory = APIListDataSource.Factory(
72        CompiledFileSystem.Factory(object_store_creator),
73        TestFileSystem(deepcopy(_TEST_DATA)),
74        'public',
75        _FakeFeaturesBundle(),
76        object_store_creator)
77
78  def testApps(self):
79    api_list = self._factory.Create()
80    self.assertEqual([
81        {
82          'name': 'alarms',
83          'platforms': ['apps', 'extensions']
84        },
85        {
86          'name': 'app.window',
87          'platforms': ['apps']
88        },
89        {
90          'name': 'storage',
91          'platforms': ['apps', 'extensions'],
92          'last': True
93        }],
94        api_list.get('apps').get('chrome'))
95
96  def testExperimentalApps(self):
97    api_list = self._factory.Create()
98    self.assertEqual([
99        {
100          'name': 'experimental.bluetooth',
101          'platforms': ['apps']
102        },
103        {
104          'name': 'experimental.power',
105          'platforms': ['apps', 'extensions'],
106          'last': True
107        }],
108        sorted(api_list.get('apps').get('experimental')))
109
110  def testExtensions(self):
111    api_list = self._factory.Create()
112    self.assertEqual([
113        {
114          'name': 'alarms',
115          'platforms': ['apps', 'extensions']
116        },
117        {
118          'name': 'browserAction',
119          'platforms': ['extensions']
120        },
121        {
122          'name': 'infobars',
123          'platforms': ['extensions']
124        },
125        {
126          'name': 'storage',
127          'platforms': ['apps', 'extensions'],
128          'last': True
129        }],
130        sorted(api_list.get('extensions').get('chrome')))
131
132  def testExperimentalExtensions(self):
133    api_list = self._factory.Create()
134    self.assertEqual([
135        {
136          'name': 'experimental.history',
137          'platforms': ['extensions']
138        },
139        {
140          'name': 'experimental.power',
141          'platforms': ['apps', 'extensions'],
142          'last': True
143        }],
144        sorted(api_list.get('extensions').get('experimental')))
145
146if __name__ == '__main__':
147  unittest.main()
148