availability_finder_test.py revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
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 os
7import sys
8import unittest
9
10from availability_finder import AvailabilityFinder
11from branch_utility import BranchUtility
12from compiled_file_system import CompiledFileSystem
13from fake_url_fetcher import FakeUrlFetcher
14from object_store_creator import ObjectStoreCreator
15from test_file_system import TestFileSystem
16from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES)
17
18class FakeHostFileSystemCreator(object):
19  def Create(self, branch):
20    return TestFileSystem(CANNED_API_FILE_SYSTEM_DATA[str(branch)])
21
22class AvailabilityFinderTest(unittest.TestCase):
23  def setUp(self):
24    self._avail_finder_factory = AvailabilityFinder.Factory(
25        ObjectStoreCreator.ForTest(),
26        CompiledFileSystem.Factory(
27            TestFileSystem(CANNED_API_FILE_SYSTEM_DATA['trunk']),
28            ObjectStoreCreator.ForTest()),
29        BranchUtility(
30            os.path.join('branch_utility', 'first.json'),
31            os.path.join('branch_utility', 'second.json'),
32            FakeUrlFetcher(os.path.join(sys.path[0], 'test_data')),
33            ObjectStoreCreator.ForTest()),
34        FakeHostFileSystemCreator())
35    self._avail_finder = self._avail_finder_factory.Create()
36
37  def testGetApiAvailability(self):
38    # Key: Using 'channel' (i.e. 'beta') to represent an availability listing
39    # for an API in a _features.json file, and using |channel| (i.e. |dev|) to
40    # represent the development channel, or phase of development, where an API's
41    # availability is being checked.
42
43    # Testing the predetermined APIs found in
44    # templates/json/api_availabilities.json.
45    self.assertEqual('stable',
46        self._avail_finder.GetApiAvailability('jsonAPI1').channel)
47    self.assertEqual(10,
48        self._avail_finder.GetApiAvailability('jsonAPI1').version)
49    self.assertEqual('trunk',
50        self._avail_finder.GetApiAvailability('jsonAPI2').channel)
51    self.assertEqual('trunk',
52        self._avail_finder.GetApiAvailability('jsonAPI2').version)
53    self.assertEqual('dev',
54        self._avail_finder.GetApiAvailability('jsonAPI3').channel)
55    self.assertEqual(28,
56        self._avail_finder.GetApiAvailability('jsonAPI3').version)
57
58    # Testing whitelisted API
59    self.assertEquals('beta',
60        self._avail_finder.GetApiAvailability('declarativeWebRequest').channel)
61    self.assertEquals(27,
62        self._avail_finder.GetApiAvailability('declarativeWebRequest').version)
63
64    # Testing APIs found only by checking file system existence.
65    self.assertEquals('stable',
66        self._avail_finder.GetApiAvailability('windows').channel)
67    self.assertEquals(23,
68        self._avail_finder.GetApiAvailability('windows').version)
69    self.assertEquals('stable',
70        self._avail_finder.GetApiAvailability('tabs').channel)
71    self.assertEquals(18,
72        self._avail_finder.GetApiAvailability('tabs').version)
73    self.assertEquals('stable',
74        self._avail_finder.GetApiAvailability('input.ime').channel)
75    self.assertEquals(18,
76        self._avail_finder.GetApiAvailability('input.ime').version)
77
78    # Testing API channel existence for _api_features.json.
79    # Listed as 'dev' on |beta|, 'dev' on |dev|.
80    self.assertEquals('dev',
81        self._avail_finder.GetApiAvailability('systemInfo.stuff').channel)
82    self.assertEquals(28,
83        self._avail_finder.GetApiAvailability('systemInfo.stuff').version)
84    # Listed as 'stable' on |beta|.
85    self.assertEquals('beta',
86        self._avail_finder.GetApiAvailability('systemInfo.cpu').channel)
87    self.assertEquals(27,
88        self._avail_finder.GetApiAvailability('systemInfo.cpu').version)
89
90    # Testing API channel existence for _manifest_features.json.
91    # Listed as 'trunk' on all channels.
92    self.assertEquals('trunk',
93        self._avail_finder.GetApiAvailability('sync').channel)
94    self.assertEquals('trunk',
95        self._avail_finder.GetApiAvailability('sync').version)
96    # No records of API until |trunk|.
97    self.assertEquals('trunk',
98        self._avail_finder.GetApiAvailability('history').channel)
99    self.assertEquals('trunk',
100        self._avail_finder.GetApiAvailability('history').version)
101    # Listed as 'dev' on |dev|.
102    self.assertEquals('dev',
103        self._avail_finder.GetApiAvailability('storage').channel)
104    self.assertEquals(28,
105        self._avail_finder.GetApiAvailability('storage').version)
106    # Stable in _manifest_features and into pre-18 versions.
107    self.assertEquals('stable',
108        self._avail_finder.GetApiAvailability('pageAction').channel)
109    self.assertEquals(8,
110        self._avail_finder.GetApiAvailability('pageAction').version)
111
112    # Testing API channel existence for _permission_features.json.
113    # Listed as 'beta' on |trunk|.
114    self.assertEquals('trunk',
115        self._avail_finder.GetApiAvailability('falseBetaAPI').version)
116    self.assertEquals('trunk',
117        self._avail_finder.GetApiAvailability('falseBetaAPI').version)
118    # Listed as 'trunk' on |trunk|.
119    self.assertEquals('trunk',
120        self._avail_finder.GetApiAvailability('trunkAPI').channel)
121    self.assertEquals('trunk',
122        self._avail_finder.GetApiAvailability('trunkAPI').version)
123    # Listed as 'trunk' on all development channels.
124    self.assertEquals('trunk',
125        self._avail_finder.GetApiAvailability('declarativeContent').channel)
126    self.assertEquals('trunk',
127        self._avail_finder.GetApiAvailability('declarativeContent').version)
128    # Listed as 'dev' on all development channels.
129    self.assertEquals('dev',
130        self._avail_finder.GetApiAvailability('bluetooth').channel)
131    self.assertEquals(28,
132        self._avail_finder.GetApiAvailability('bluetooth').version)
133    # Listed as 'dev' on |dev|.
134    self.assertEquals('dev',
135        self._avail_finder.GetApiAvailability('cookies').channel)
136    self.assertEquals(28,
137        self._avail_finder.GetApiAvailability('cookies').version)
138    # Treated as 'stable' APIs.
139    self.assertEquals('stable',
140        self._avail_finder.GetApiAvailability('alarms').channel)
141    self.assertEquals(24,
142        self._avail_finder.GetApiAvailability('alarms').version)
143    self.assertEquals('stable',
144        self._avail_finder.GetApiAvailability('bookmarks').channel)
145    self.assertEquals(21,
146        self._avail_finder.GetApiAvailability('bookmarks').version)
147
148    # Testing older API existence using extension_api.json.
149    self.assertEquals('stable',
150        self._avail_finder.GetApiAvailability('menus').channel)
151    self.assertEquals(6,
152        self._avail_finder.GetApiAvailability('menus').version)
153    self.assertEquals('stable',
154        self._avail_finder.GetApiAvailability('idle').channel)
155    self.assertEquals(5,
156        self._avail_finder.GetApiAvailability('idle').version)
157
158    # Switches between _features.json files across branches.
159    # Listed as 'trunk' on all channels, in _api, _permission, or _manifest.
160    self.assertEquals('trunk',
161        self._avail_finder.GetApiAvailability('contextMenus').channel)
162    self.assertEquals('trunk',
163        self._avail_finder.GetApiAvailability('contextMenus').version)
164    # Moves between _permission and _manifest as file system is traversed.
165    self.assertEquals('stable',
166        self._avail_finder.GetApiAvailability('systemInfo.display').channel)
167    self.assertEquals(23,
168        self._avail_finder.GetApiAvailability('systemInfo.display').version)
169    self.assertEquals('stable',
170        self._avail_finder.GetApiAvailability('webRequest').channel)
171    self.assertEquals(17,
172        self._avail_finder.GetApiAvailability('webRequest').version)
173
174    # Mid-upgrade cases:
175    # Listed as 'dev' on |beta| and 'beta' on |dev|.
176    self.assertEquals('dev',
177        self._avail_finder.GetApiAvailability('notifications').channel)
178    self.assertEquals(28,
179        self._avail_finder.GetApiAvailability('notifications').version)
180    # Listed as 'beta' on |stable|, 'dev' on |beta| ... until |stable| on trunk.
181    self.assertEquals('trunk',
182        self._avail_finder.GetApiAvailability('events').channel)
183    self.assertEquals('trunk',
184        self._avail_finder.GetApiAvailability('events').version)
185
186if __name__ == '__main__':
187  unittest.main()
188