Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 import os | 5 import os |
| 6 import sys | 6 import sys |
| 7 import unittest | 7 import unittest |
| 8 | 8 |
| 9 import api_schema_graph | 9 import api_schema_graph |
| 10 from availability_finder import AvailabilityFinder, AvailabilityInfo | 10 from availability_finder import AvailabilityFinder, AvailabilityInfo |
| 11 from branch_utility import BranchUtility, ChannelInfo | 11 from branch_utility import BranchUtility, ChannelInfo |
| 12 from compiled_file_system import CompiledFileSystem | 12 from compiled_file_system import CompiledFileSystem |
| 13 from fake_host_file_system_provider import FakeHostFileSystemProvider | 13 from fake_host_file_system_provider import FakeHostFileSystemProvider |
| 14 from fake_url_fetcher import FakeUrlFetcher | 14 from fake_url_fetcher import FakeUrlFetcher |
| 15 from host_file_system_iterator import HostFileSystemIterator | 15 from host_file_system_iterator import HostFileSystemIterator |
| 16 from mock_function import MockFunction | 16 from mock_function import MockFunction |
| 17 from object_store_creator import ObjectStoreCreator | 17 from object_store_creator import ObjectStoreCreator |
| 18 from platform_util import GetPlatforms | |
| 18 from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES) | 19 from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES) |
| 19 from test_data.object_level_availability.tabs import TABS_SCHEMA_BRANCHES | 20 from test_data.object_level_availability.tabs import TABS_SCHEMA_BRANCHES |
| 20 from test_util import Server2Path | 21 from test_util import Server2Path |
| 21 | 22 |
| 22 | 23 |
| 23 TABS_UNMODIFIED_VERSIONS = (16, 20, 23, 24) | 24 TABS_UNMODIFIED_VERSIONS = (16, 20, 23, 24) |
| 24 | 25 |
| 25 class AvailabilityFinderTest(unittest.TestCase): | 26 class AvailabilityFinderTest(unittest.TestCase): |
| 26 | 27 |
| 28 def _create_availability_finder(self, | |
| 29 host_fs_creator, | |
| 30 host_fs_iterator, | |
| 31 platform): | |
| 32 test_object_store = ObjectStoreCreator.ForTest() | |
| 33 return AvailabilityFinder( | |
| 34 self._branch_utility, | |
| 35 CompiledFileSystem.Factory(test_object_store), | |
| 36 host_fs_iterator, | |
| 37 host_fs_creator.GetTrunk(), | |
| 38 test_object_store, | |
| 39 platform) | |
| 40 | |
| 27 def setUp(self): | 41 def setUp(self): |
| 28 self._branch_utility = BranchUtility( | 42 self._branch_utility = BranchUtility( |
| 29 os.path.join('branch_utility', 'first.json'), | 43 os.path.join('branch_utility', 'first.json'), |
| 30 os.path.join('branch_utility', 'second.json'), | 44 os.path.join('branch_utility', 'second.json'), |
| 31 FakeUrlFetcher(Server2Path('test_data')), | 45 FakeUrlFetcher(Server2Path('test_data')), |
| 32 ObjectStoreCreator.ForTest()) | 46 ObjectStoreCreator.ForTest()) |
| 33 api_fs_creator = FakeHostFileSystemProvider(CANNED_API_FILE_SYSTEM_DATA) | 47 self._api_fs_creator = FakeHostFileSystemProvider( |
| 48 CANNED_API_FILE_SYSTEM_DATA) | |
| 34 self._node_fs_creator = FakeHostFileSystemProvider(TABS_SCHEMA_BRANCHES) | 49 self._node_fs_creator = FakeHostFileSystemProvider(TABS_SCHEMA_BRANCHES) |
| 35 | 50 self._api_fs_iterator = HostFileSystemIterator(self._api_fs_creator, |
| 36 def create_availability_finder(host_fs_creator): | 51 self._branch_utility) |
| 37 test_object_store = ObjectStoreCreator.ForTest() | 52 self._node_fs_iterator = HostFileSystemIterator(self._node_fs_creator, |
| 38 return AvailabilityFinder( | 53 self._branch_utility) |
| 39 self._branch_utility, | |
| 40 CompiledFileSystem.Factory(test_object_store), | |
| 41 HostFileSystemIterator(host_fs_creator, | |
| 42 self._branch_utility), | |
| 43 host_fs_creator.GetTrunk(), | |
| 44 test_object_store) | |
| 45 | |
| 46 self._avail_finder = create_availability_finder(api_fs_creator) | |
| 47 self._node_avail_finder = create_availability_finder(self._node_fs_creator) | |
| 48 | 54 |
| 49 # Imitate the actual SVN file system by incrementing the stats for paths | 55 # Imitate the actual SVN file system by incrementing the stats for paths |
| 50 # where an API schema has changed. | 56 # where an API schema has changed. |
| 51 last_stat = type('last_stat', (object,), {'val': 0}) | 57 last_stat = type('last_stat', (object,), {'val': 0}) |
| 52 | 58 |
| 53 def stat_paths(file_system, channel_info): | 59 def stat_paths(file_system, channel_info): |
| 54 if channel_info.version not in TABS_UNMODIFIED_VERSIONS: | 60 if channel_info.version not in TABS_UNMODIFIED_VERSIONS: |
| 55 last_stat.val += 1 | 61 last_stat.val += 1 |
| 56 # HACK: |file_system| is a MockFileSystem backed by a TestFileSystem. | 62 # HACK: |file_system| is a MockFileSystem backed by a TestFileSystem. |
| 57 # Increment the TestFileSystem stat count. | 63 # Increment the TestFileSystem stat count. |
| 58 file_system._file_system.IncrementStat(by=last_stat.val) | 64 file_system._file_system.IncrementStat(by=last_stat.val) |
| 59 # Continue looping. The iterator will stop after 'trunk' automatically. | 65 # Continue looping. The iterator will stop after 'trunk' automatically. |
| 60 return True | 66 return True |
| 61 | 67 |
| 62 # Use the HostFileSystemIterator created above to change global stat values | 68 # Use the HostFileSystemIterator created above to change global stat values |
| 63 # for the TestFileSystems that it creates. | 69 # for the TestFileSystems that it creates. |
| 64 self._node_avail_finder._file_system_iterator.Ascending( | 70 self._node_fs_iterator.Ascending( |
| 65 # The earliest version represented with the tabs' test data is 13. | 71 # The earliest version represented with the tabs' test data is 13. |
| 66 self._branch_utility.GetStableChannelInfo(13), | 72 self._branch_utility.GetStableChannelInfo(13), |
| 67 stat_paths) | 73 stat_paths) |
| 68 | 74 |
| 69 def testGraphOptimization(self): | 75 def testGraphOptimization(self): |
| 70 # Keep track of how many times the APISchemaGraph constructor is called. | 76 for platform in GetPlatforms(): |
| 71 original_constructor = api_schema_graph.APISchemaGraph | 77 # Keep track of how many times the APISchemaGraph constructor is called. |
| 72 mock_constructor = MockFunction(original_constructor) | 78 original_constructor = api_schema_graph.APISchemaGraph |
| 73 api_schema_graph.APISchemaGraph = mock_constructor | 79 mock_constructor = MockFunction(original_constructor) |
| 80 api_schema_graph.APISchemaGraph = mock_constructor | |
| 74 | 81 |
| 75 try: | 82 node_avail_finder = self._create_availability_finder( |
| 76 # The test data includes an extra branch where the API does not exist. | 83 self._node_fs_creator, self._node_fs_iterator, platform) |
| 77 num_versions = len(TABS_SCHEMA_BRANCHES) - 1 | 84 try: |
| 78 # We expect an APISchemaGraph to be created only when an API schema file | 85 # The test data includes an extra branch where the API does not exist. |
| 79 # has different stat data from the previous version's schema file. | 86 num_versions = len(TABS_SCHEMA_BRANCHES) - 1 |
| 80 num_graphs_created = num_versions - len(TABS_UNMODIFIED_VERSIONS) | 87 # We expect an APISchemaGraph to be created only when an API schema file |
| 88 # has different stat data from the previous version's schema file. | |
| 89 num_graphs_created = num_versions - len(TABS_UNMODIFIED_VERSIONS) | |
| 81 | 90 |
| 82 # Run the logic for object-level availability for an API. | 91 # Run the logic for object-level availability for an API. |
| 83 self._node_avail_finder.GetApiNodeAvailability('tabs') | 92 node_avail_finder.GetApiNodeAvailability('tabs') |
| 84 | 93 |
| 85 self.assertTrue(*api_schema_graph.APISchemaGraph.CheckAndReset( | 94 self.assertTrue(*api_schema_graph.APISchemaGraph.CheckAndReset( |
| 86 num_graphs_created)) | 95 num_graphs_created)) |
| 87 finally: | 96 finally: |
| 88 # Ensure that the APISchemaGraph constructor is reset to be the original | 97 # Ensure that the APISchemaGraph constructor is reset to be the original |
| 89 # constructor. | 98 # constructor. |
| 90 api_schema_graph.APISchemaGraph = original_constructor | 99 api_schema_graph.APISchemaGraph = original_constructor |
| 91 | 100 |
| 92 def testGetApiAvailability(self): | 101 def testGetApiAvailability(self): |
| 93 # Key: Using 'channel' (i.e. 'beta') to represent an availability listing | 102 # Key: Using 'channel' (i.e. 'beta') to represent an availability listing |
| 94 # for an API in a _features.json file, and using |channel| (i.e. |dev|) to | 103 # for an API in a _features.json file, and using |channel| (i.e. |dev|) to |
| 95 # represent the development channel, or phase of development, where an API's | 104 # represent the development channel, or phase of development, where an API's |
| 96 # availability is being checked. | 105 # availability is being checked. |
| 97 | 106 |
| 107 def assertGet(ch_info, api, only_on=None, scheduled=None): | |
| 108 for platform in GetPlatforms(): | |
| 109 get_availability = self._create_availability_finder( | |
| 110 self._api_fs_creator, | |
| 111 self._api_fs_iterator, | |
| 112 platform if only_on is None else only_on).GetApiAvailability | |
| 113 self.assertEqual(AvailabilityInfo(ch_info, scheduled=scheduled), | |
| 114 get_availability(api)) | |
| 115 | |
| 98 # Testing APIs with predetermined availability. | 116 # Testing APIs with predetermined availability. |
| 99 self.assertEqual( | 117 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'jsonTrunkAPI') |
| 100 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 118 assertGet(ChannelInfo('dev', CANNED_BRANCHES[28], 28), 'jsonDevAPI') |
| 101 self._avail_finder.GetApiAvailability('jsonTrunkAPI')) | 119 assertGet(ChannelInfo('beta', CANNED_BRANCHES[27], 27), 'jsonBetaAPI') |
| 102 self.assertEqual( | 120 assertGet(ChannelInfo('stable', CANNED_BRANCHES[20], 20), 'jsonStableAPI') |
| 103 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | |
| 104 self._avail_finder.GetApiAvailability('jsonDevAPI')) | |
| 105 self.assertEqual( | |
| 106 AvailabilityInfo(ChannelInfo('beta', CANNED_BRANCHES[27], 27)), | |
| 107 self._avail_finder.GetApiAvailability('jsonBetaAPI')) | |
| 108 self.assertEqual( | |
| 109 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[20], 20)), | |
| 110 self._avail_finder.GetApiAvailability('jsonStableAPI')) | |
| 111 | 121 |
| 112 # Testing a whitelisted API. | 122 # Testing a whitelisted API. |
| 113 self.assertEquals( | 123 assertGet(ChannelInfo('beta', CANNED_BRANCHES[27], 27), |
| 114 AvailabilityInfo(ChannelInfo('beta', CANNED_BRANCHES[27], 27)), | 124 'declarativeWebRequest') |
| 115 self._avail_finder.GetApiAvailability('declarativeWebRequest')) | |
| 116 | 125 |
| 117 # Testing APIs found only by checking file system existence. | 126 # Testing APIs found only by checking file system existence. |
| 118 self.assertEquals( | 127 assertGet(ChannelInfo('stable', CANNED_BRANCHES[23], 23), 'windows') |
| 119 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[23], 23)), | 128 assertGet(ChannelInfo('stable', CANNED_BRANCHES[18], 18), 'tabs') |
| 120 self._avail_finder.GetApiAvailability('windows')) | 129 assertGet(ChannelInfo('stable', CANNED_BRANCHES[18], 18), 'input.ime') |
| 121 self.assertEquals( | |
| 122 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[18], 18)), | |
| 123 self._avail_finder.GetApiAvailability('tabs')) | |
| 124 self.assertEquals( | |
| 125 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[18], 18)), | |
| 126 self._avail_finder.GetApiAvailability('input.ime')) | |
| 127 | 130 |
| 128 # Testing API channel existence for _api_features.json. | 131 # Testing API channel existence for _api_features.json. |
| 129 # Listed as 'dev' on |beta|, 'dev' on |dev|. | 132 # Listed as 'dev' on |beta|, 'dev' on |dev|. |
| 130 self.assertEquals( | 133 assertGet(ChannelInfo('dev', CANNED_BRANCHES[28], 28), 'systemInfo.stuff') |
| 131 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | |
| 132 self._avail_finder.GetApiAvailability('systemInfo.stuff')) | |
| 133 # Listed as 'stable' on |beta|. | 134 # Listed as 'stable' on |beta|. |
| 134 self.assertEquals( | 135 assertGet(ChannelInfo('beta', CANNED_BRANCHES[27], 27), |
| 135 AvailabilityInfo( | 136 'systemInfo.cpu', |
| 136 ChannelInfo('beta', CANNED_BRANCHES[27], 27), | 137 scheduled=28) |
| 137 scheduled=28), | |
| 138 self._avail_finder.GetApiAvailability('systemInfo.cpu')) | |
| 139 | 138 |
| 140 # Testing API channel existence for _manifest_features.json. | 139 # Testing API channel existence for _manifest_features.json. |
| 141 # Listed as 'trunk' on all channels. | 140 # Listed as 'trunk' on all channels. |
| 142 self.assertEquals( | 141 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'sync') |
| 143 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | |
| 144 self._avail_finder.GetApiAvailability('sync')) | |
| 145 # No records of API until |trunk|. | 142 # No records of API until |trunk|. |
| 146 self.assertEquals( | 143 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'history') |
| 147 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | |
| 148 self._avail_finder.GetApiAvailability('history')) | |
| 149 # Listed as 'dev' on |dev|. | 144 # Listed as 'dev' on |dev|. |
| 150 self.assertEquals( | 145 assertGet(ChannelInfo('dev', CANNED_BRANCHES[28], 28), 'storage') |
| 151 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | |
| 152 self._avail_finder.GetApiAvailability('storage')) | |
| 153 # Stable in _manifest_features and into pre-18 versions. | 146 # Stable in _manifest_features and into pre-18 versions. |
| 154 self.assertEquals( | 147 assertGet(ChannelInfo('stable', CANNED_BRANCHES[8], 8), 'pageAction') |
| 155 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[8], 8)), | |
| 156 self._avail_finder.GetApiAvailability('pageAction')) | |
| 157 | 148 |
| 158 # Testing API channel existence for _permission_features.json. | 149 # Testing API channel existence for _permission_features.json. |
| 159 # Listed as 'beta' on |trunk|. | 150 # Listed as 'beta' on |trunk|. |
| 160 self.assertEquals( | 151 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'falseBetaAPI') |
| 161 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | |
| 162 self._avail_finder.GetApiAvailability('falseBetaAPI')) | |
| 163 # Listed as 'trunk' on |trunk|. | 152 # Listed as 'trunk' on |trunk|. |
| 164 self.assertEquals( | 153 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'trunkAPI') |
| 165 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | |
| 166 self._avail_finder.GetApiAvailability('trunkAPI')) | |
| 167 # Listed as 'trunk' on all development channels. | 154 # Listed as 'trunk' on all development channels. |
| 168 self.assertEquals( | 155 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'declarativeContent') |
| 169 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | |
| 170 self._avail_finder.GetApiAvailability('declarativeContent')) | |
| 171 # Listed as 'dev' on all development channels. | 156 # Listed as 'dev' on all development channels. |
| 172 self.assertEquals( | 157 assertGet(ChannelInfo('dev', CANNED_BRANCHES[28], 28), 'bluetooth') |
| 173 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | |
| 174 self._avail_finder.GetApiAvailability('bluetooth')) | |
| 175 # Listed as 'dev' on |dev|. | 158 # Listed as 'dev' on |dev|. |
| 176 self.assertEquals( | 159 assertGet(ChannelInfo('dev', CANNED_BRANCHES[28], 28), 'cookies') |
| 177 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | |
| 178 self._avail_finder.GetApiAvailability('cookies')) | |
| 179 # Treated as 'stable' APIs. | 160 # Treated as 'stable' APIs. |
| 180 self.assertEquals( | 161 assertGet(ChannelInfo('stable', CANNED_BRANCHES[24], 24), 'alarms') |
| 181 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[24], 24)), | 162 assertGet(ChannelInfo('stable', CANNED_BRANCHES[21], 21), 'bookmarks') |
| 182 self._avail_finder.GetApiAvailability('alarms')) | |
| 183 self.assertEquals( | |
| 184 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[21], 21)), | |
| 185 self._avail_finder.GetApiAvailability('bookmarks')) | |
| 186 | 163 |
| 187 # Testing older API existence using extension_api.json. | 164 # Testing older API existence using extension_api.json. |
| 188 self.assertEquals( | 165 assertGet(ChannelInfo('stable', CANNED_BRANCHES[6], 6), 'menus') |
| 189 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[6], 6)), | 166 assertGet(ChannelInfo('stable', CANNED_BRANCHES[5], 5), 'idle') |
| 190 self._avail_finder.GetApiAvailability('menus')) | |
| 191 self.assertEquals( | |
| 192 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[5], 5)), | |
| 193 self._avail_finder.GetApiAvailability('idle')) | |
| 194 | 167 |
| 195 # Switches between _features.json files across branches. | 168 # Switches between _features.json files across branches. |
| 196 # Listed as 'trunk' on all channels, in _api, _permission, or _manifest. | 169 # Listed as 'trunk' on all channels, in _api, _permission, or _manifest. |
| 197 self.assertEquals( | 170 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'contextMenus') |
| 198 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | |
| 199 self._avail_finder.GetApiAvailability('contextMenus')) | |
| 200 # Moves between _permission and _manifest as file system is traversed. | 171 # Moves between _permission and _manifest as file system is traversed. |
| 201 self.assertEquals( | 172 assertGet(ChannelInfo('stable', CANNED_BRANCHES[23], 23), |
| 202 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[23], 23)), | 173 'systemInfo.display') |
| 203 self._avail_finder.GetApiAvailability('systemInfo.display')) | 174 assertGet(ChannelInfo('stable', CANNED_BRANCHES[17], 17), 'webRequest') |
| 204 self.assertEquals( | |
| 205 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[17], 17)), | |
| 206 self._avail_finder.GetApiAvailability('webRequest')) | |
| 207 | 175 |
| 208 # Mid-upgrade cases: | 176 # Mid-upgrade cases: |
| 209 # Listed as 'dev' on |beta| and 'beta' on |dev|. | 177 # Listed as 'dev' on |beta| and 'beta' on |dev|. |
| 210 self.assertEquals( | 178 assertGet(ChannelInfo('dev', CANNED_BRANCHES[28], 28), 'notifications') |
| 211 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 179 # Listed as 'beta' on |stable|, 'dev' on |beta|...until |stable| on trunk. |
| 212 self._avail_finder.GetApiAvailability('notifications')) | 180 assertGet(ChannelInfo('trunk', 'trunk', 'trunk'), 'events') |
| 213 # Listed as 'beta' on |stable|, 'dev' on |beta| ... until |stable| on trunk. | 181 |
| 214 self.assertEquals( | 182 # Check for differing availability across apps|extensions |
|
ahernandez
2014/06/18 21:57:53
Here's the new test. I added a new "appsFirst" API
| |
| 215 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 183 assertGet(ChannelInfo('stable', CANNED_BRANCHES[26], 26), |
| 216 self._avail_finder.GetApiAvailability('events')) | 184 'appsFirst', |
| 185 only_on='extensions') | |
| 186 assertGet(ChannelInfo('stable', CANNED_BRANCHES[25], 25), | |
| 187 'appsFirst', | |
| 188 only_on='apps') | |
| 217 | 189 |
| 218 def testGetApiNodeAvailability(self): | 190 def testGetApiNodeAvailability(self): |
| 219 # Allow the LookupResult constructions below to take just one line. | 191 # Allow the LookupResult constructions below to take just one line. |
| 220 lookup_result = api_schema_graph.LookupResult | 192 for platform in GetPlatforms(): |
| 221 availability_graph = self._node_avail_finder.GetApiNodeAvailability('tabs') | 193 lookup_result = api_schema_graph.LookupResult |
| 194 availability_graph = self._create_availability_finder( | |
| 195 self._node_fs_creator, | |
| 196 self._node_fs_iterator, | |
| 197 platform).GetApiNodeAvailability('tabs') | |
| 222 | 198 |
| 223 self.assertEquals( | 199 self.assertEquals( |
| 224 lookup_result(True, self._branch_utility.GetChannelInfo('trunk')), | 200 lookup_result(True, self._branch_utility.GetChannelInfo('trunk')), |
| 225 availability_graph.Lookup('tabs', 'properties', | 201 availability_graph.Lookup('tabs', 'properties', |
| 226 'fakeTabsProperty3')) | 202 'fakeTabsProperty3')) |
| 227 self.assertEquals( | 203 self.assertEquals( |
| 228 lookup_result(True, self._branch_utility.GetChannelInfo('dev')), | 204 lookup_result(True, self._branch_utility.GetChannelInfo('dev')), |
| 229 availability_graph.Lookup('tabs', 'events', 'onActivated', | 205 availability_graph.Lookup('tabs', 'events', 'onActivated', |
| 230 'parameters', 'activeInfo', 'properties', | 206 'parameters', 'activeInfo', 'properties', |
| 231 'windowId')) | 207 'windowId')) |
| 232 self.assertEquals( | 208 self.assertEquals( |
| 233 lookup_result(True, self._branch_utility.GetChannelInfo('dev')), | 209 lookup_result(True, self._branch_utility.GetChannelInfo('dev')), |
| 234 availability_graph.Lookup('tabs', 'events', 'onUpdated', 'parameters', | 210 availability_graph.Lookup('tabs', 'events', 'onUpdated', 'parameters', |
| 235 'tab')) | 211 'tab')) |
| 236 self.assertEquals( | 212 self.assertEquals( |
| 237 lookup_result(True, self._branch_utility.GetChannelInfo('beta')), | 213 lookup_result(True, self._branch_utility.GetChannelInfo('beta')), |
| 238 availability_graph.Lookup('tabs', 'events','onActivated')) | 214 availability_graph.Lookup('tabs', 'events','onActivated')) |
| 239 self.assertEquals( | 215 self.assertEquals( |
| 240 lookup_result(True, self._branch_utility.GetChannelInfo('beta')), | 216 lookup_result(True, self._branch_utility.GetChannelInfo('beta')), |
| 241 availability_graph.Lookup('tabs', 'functions', 'get', 'parameters', | 217 availability_graph.Lookup('tabs', 'functions', 'get', 'parameters', |
| 242 'tabId')) | 218 'tabId')) |
| 243 self.assertEquals( | 219 self.assertEquals( |
| 244 lookup_result(True, self._branch_utility.GetChannelInfo('stable')), | 220 lookup_result(True, self._branch_utility.GetChannelInfo('stable')), |
| 245 availability_graph.Lookup('tabs', 'types', 'InjectDetails', | 221 availability_graph.Lookup('tabs', 'types', 'InjectDetails', |
| 246 'properties', 'code')) | 222 'properties', 'code')) |
| 247 self.assertEquals( | 223 self.assertEquals( |
| 248 lookup_result(True, self._branch_utility.GetChannelInfo('stable')), | 224 lookup_result(True, self._branch_utility.GetChannelInfo('stable')), |
| 249 availability_graph.Lookup('tabs', 'types', 'InjectDetails', | 225 availability_graph.Lookup('tabs', 'types', 'InjectDetails', |
| 250 'properties', 'file')) | 226 'properties', 'file')) |
| 251 self.assertEquals( | 227 self.assertEquals( |
| 252 lookup_result(True, self._branch_utility.GetStableChannelInfo(25)), | 228 lookup_result(True, self._branch_utility.GetStableChannelInfo(25)), |
| 253 availability_graph.Lookup('tabs', 'types', 'InjectDetails')) | 229 availability_graph.Lookup('tabs', 'types', 'InjectDetails')) |
| 254 | 230 |
| 255 # Nothing new in version 24 or 23. | 231 # Nothing new in version 24 or 23. |
| 256 | 232 |
| 257 self.assertEquals( | 233 self.assertEquals( |
| 258 lookup_result(True, self._branch_utility.GetStableChannelInfo(22)), | 234 lookup_result(True, self._branch_utility.GetStableChannelInfo(22)), |
| 259 availability_graph.Lookup('tabs', 'types', 'Tab', 'properties', | 235 availability_graph.Lookup('tabs', 'types', 'Tab', 'properties', |
| 260 'windowId')) | 236 'windowId')) |
| 261 self.assertEquals( | 237 self.assertEquals( |
| 262 lookup_result(True, self._branch_utility.GetStableChannelInfo(21)), | 238 lookup_result(True, self._branch_utility.GetStableChannelInfo(21)), |
| 263 availability_graph.Lookup('tabs', 'types', 'Tab', 'properties', | 239 availability_graph.Lookup('tabs', 'types', 'Tab', 'properties', |
| 264 'selected')) | 240 'selected')) |
| 265 | 241 |
| 266 # Nothing new in version 20. | 242 # Nothing new in version 20. |
| 267 | 243 |
| 268 self.assertEquals( | 244 self.assertEquals( |
| 269 lookup_result(True, self._branch_utility.GetStableChannelInfo(19)), | 245 lookup_result(True, self._branch_utility.GetStableChannelInfo(19)), |
| 270 availability_graph.Lookup('tabs', 'functions', 'getCurrent')) | 246 availability_graph.Lookup('tabs', 'functions', 'getCurrent')) |
| 271 self.assertEquals( | 247 self.assertEquals( |
| 272 lookup_result(True, self._branch_utility.GetStableChannelInfo(18)), | 248 lookup_result(True, self._branch_utility.GetStableChannelInfo(18)), |
| 273 availability_graph.Lookup('tabs', 'types', 'Tab', 'properties', | 249 availability_graph.Lookup('tabs', 'types', 'Tab', 'properties', |
| 274 'index')) | 250 'index')) |
| 275 self.assertEquals( | 251 self.assertEquals( |
| 276 lookup_result(True, self._branch_utility.GetStableChannelInfo(17)), | 252 lookup_result(True, self._branch_utility.GetStableChannelInfo(17)), |
| 277 availability_graph.Lookup('tabs', 'events', 'onUpdated', 'parameters', | 253 availability_graph.Lookup('tabs', 'events', 'onUpdated', 'parameters', |
| 278 'changeInfo')) | 254 'changeInfo')) |
| 279 | 255 |
| 280 # Nothing new in version 16. | 256 # Nothing new in version 16. |
| 281 | 257 |
| 282 self.assertEquals( | 258 self.assertEquals( |
| 283 lookup_result(True, self._branch_utility.GetStableChannelInfo(15)), | 259 lookup_result(True, self._branch_utility.GetStableChannelInfo(15)), |
| 284 availability_graph.Lookup('tabs', 'properties', | 260 availability_graph.Lookup('tabs', 'properties', |
| 285 'fakeTabsProperty2')) | 261 'fakeTabsProperty2')) |
| 286 | 262 |
| 287 # Everything else is available at the API's release, version 14 here. | 263 # Everything else is available at the API's release, version 14 here. |
| 288 self.assertEquals( | 264 self.assertEquals( |
| 289 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), | 265 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), |
| 290 availability_graph.Lookup('tabs', 'types', 'Tab')) | 266 availability_graph.Lookup('tabs', 'types', 'Tab')) |
| 291 self.assertEquals( | 267 self.assertEquals( |
| 292 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), | 268 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), |
| 293 availability_graph.Lookup('tabs', 'types', 'Tab', | 269 availability_graph.Lookup('tabs', 'types', 'Tab', |
| 294 'properties', 'url')) | 270 'properties', 'url')) |
| 295 self.assertEquals( | 271 self.assertEquals( |
| 296 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), | 272 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), |
| 297 availability_graph.Lookup('tabs', 'properties', | 273 availability_graph.Lookup('tabs', 'properties', |
| 298 'fakeTabsProperty1')) | 274 'fakeTabsProperty1')) |
| 299 self.assertEquals( | 275 self.assertEquals( |
| 300 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), | 276 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), |
| 301 availability_graph.Lookup('tabs', 'functions', 'get', 'parameters', | 277 availability_graph.Lookup('tabs', 'functions', 'get', 'parameters', |
| 302 'callback')) | 278 'callback')) |
| 303 self.assertEquals( | 279 self.assertEquals( |
| 304 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), | 280 lookup_result(True, self._branch_utility.GetStableChannelInfo(14)), |
| 305 availability_graph.Lookup('tabs', 'events', 'onUpdated')) | 281 availability_graph.Lookup('tabs', 'events', 'onUpdated')) |
| 306 | 282 |
| 307 # Test things that aren't available. | 283 # Test things that aren't available. |
| 308 self.assertEqual(lookup_result(False, None), | 284 self.assertEqual(lookup_result(False, None), |
| 309 availability_graph.Lookup('tabs', 'types', | 285 availability_graph.Lookup('tabs', 'types', |
| 310 'UpdateInfo')) | 286 'UpdateInfo')) |
| 311 self.assertEqual(lookup_result(False, None), | 287 self.assertEqual(lookup_result(False, None), |
| 312 availability_graph.Lookup('tabs', 'functions', 'get', | 288 availability_graph.Lookup('tabs', 'functions', 'get', |
| 313 'parameters', 'callback', | 289 'parameters', 'callback', |
| 314 'parameters', 'tab', 'id')) | 290 'parameters', 'tab', 'id')) |
| 315 self.assertEqual(lookup_result(False, None), | 291 self.assertEqual(lookup_result(False, None), |
| 316 availability_graph.Lookup('functions')) | 292 availability_graph.Lookup('functions')) |
| 317 self.assertEqual(lookup_result(False, None), | 293 self.assertEqual(lookup_result(False, None), |
| 318 availability_graph.Lookup('events', 'onActivated', | 294 availability_graph.Lookup('events', 'onActivated', |
| 319 'parameters', 'activeInfo', | 295 'parameters', 'activeInfo', |
| 320 'tabId')) | 296 'tabId')) |
| 321 | 297 |
| 322 | 298 |
| 323 if __name__ == '__main__': | 299 if __name__ == '__main__': |
| 324 unittest.main() | 300 unittest.main() |
| OLD | NEW |