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