| 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 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 api_schema_graph.APISchemaGraph = mock_constructor | 73 api_schema_graph.APISchemaGraph = mock_constructor |
| 74 | 74 |
| 75 try: | 75 try: |
| 76 # The test data includes an extra branch where the API does not exist. | 76 # The test data includes an extra branch where the API does not exist. |
| 77 num_versions = len(TABS_SCHEMA_BRANCHES) - 1 | 77 num_versions = len(TABS_SCHEMA_BRANCHES) - 1 |
| 78 # We expect an APISchemaGraph to be created only when an API schema file | 78 # We expect an APISchemaGraph to be created only when an API schema file |
| 79 # has different stat data from the previous version's schema file. | 79 # has different stat data from the previous version's schema file. |
| 80 num_graphs_created = num_versions - len(TABS_UNMODIFIED_VERSIONS) | 80 num_graphs_created = num_versions - len(TABS_UNMODIFIED_VERSIONS) |
| 81 | 81 |
| 82 # Run the logic for object-level availability for an API. | 82 # Run the logic for object-level availability for an API. |
| 83 self._node_avail_finder.GetApiNodeAvailability('tabs') | 83 self._node_avail_finder.GetAPINodeAvailability('tabs') |
| 84 | 84 |
| 85 self.assertTrue(*api_schema_graph.APISchemaGraph.CheckAndReset( | 85 self.assertTrue(*api_schema_graph.APISchemaGraph.CheckAndReset( |
| 86 num_graphs_created)) | 86 num_graphs_created)) |
| 87 finally: | 87 finally: |
| 88 # Ensure that the APISchemaGraph constructor is reset to be the original | 88 # Ensure that the APISchemaGraph constructor is reset to be the original |
| 89 # constructor. | 89 # constructor. |
| 90 api_schema_graph.APISchemaGraph = original_constructor | 90 api_schema_graph.APISchemaGraph = original_constructor |
| 91 | 91 |
| 92 def testGetApiAvailability(self): | 92 def testGetAPIAvailability(self): |
| 93 # Key: Using 'channel' (i.e. 'beta') to represent an availability listing | 93 # 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 | 94 # 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 | 95 # represent the development channel, or phase of development, where an API's |
| 96 # availability is being checked. | 96 # availability is being checked. |
| 97 | 97 |
| 98 # Testing APIs with predetermined availability. | 98 # Testing APIs with predetermined availability. |
| 99 self.assertEqual( | 99 self.assertEqual( |
| 100 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 100 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 101 self._avail_finder.GetApiAvailability('jsonTrunkAPI')) | 101 self._avail_finder.GetAPIAvailability('jsonTrunkAPI')) |
| 102 self.assertEqual( | 102 self.assertEqual( |
| 103 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 103 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), |
| 104 self._avail_finder.GetApiAvailability('jsonDevAPI')) | 104 self._avail_finder.GetAPIAvailability('jsonDevAPI')) |
| 105 self.assertEqual( | 105 self.assertEqual( |
| 106 AvailabilityInfo(ChannelInfo('beta', CANNED_BRANCHES[27], 27)), | 106 AvailabilityInfo(ChannelInfo('beta', CANNED_BRANCHES[27], 27)), |
| 107 self._avail_finder.GetApiAvailability('jsonBetaAPI')) | 107 self._avail_finder.GetAPIAvailability('jsonBetaAPI')) |
| 108 self.assertEqual( | 108 self.assertEqual( |
| 109 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[20], 20)), | 109 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[20], 20)), |
| 110 self._avail_finder.GetApiAvailability('jsonStableAPI')) | 110 self._avail_finder.GetAPIAvailability('jsonStableAPI')) |
| 111 | 111 |
| 112 # Testing a whitelisted API. | 112 # Testing a whitelisted API. |
| 113 self.assertEquals( | 113 self.assertEquals( |
| 114 AvailabilityInfo(ChannelInfo('beta', CANNED_BRANCHES[27], 27)), | 114 AvailabilityInfo(ChannelInfo('beta', CANNED_BRANCHES[27], 27)), |
| 115 self._avail_finder.GetApiAvailability('declarativeWebRequest')) | 115 self._avail_finder.GetAPIAvailability('declarativeWebRequest')) |
| 116 | 116 |
| 117 # Testing APIs found only by checking file system existence. | 117 # Testing APIs found only by checking file system existence. |
| 118 self.assertEquals( | 118 self.assertEquals( |
| 119 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[23], 23)), | 119 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[23], 23)), |
| 120 self._avail_finder.GetApiAvailability('windows')) | 120 self._avail_finder.GetAPIAvailability('windows')) |
| 121 self.assertEquals( | 121 self.assertEquals( |
| 122 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[18], 18)), | 122 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[18], 18)), |
| 123 self._avail_finder.GetApiAvailability('tabs')) | 123 self._avail_finder.GetAPIAvailability('tabs')) |
| 124 self.assertEquals( | 124 self.assertEquals( |
| 125 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[18], 18)), | 125 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[18], 18)), |
| 126 self._avail_finder.GetApiAvailability('input.ime')) | 126 self._avail_finder.GetAPIAvailability('input.ime')) |
| 127 | 127 |
| 128 # Testing API channel existence for _api_features.json. | 128 # Testing API channel existence for _api_features.json. |
| 129 # Listed as 'dev' on |beta|, 'dev' on |dev|. | 129 # Listed as 'dev' on |beta|, 'dev' on |dev|. |
| 130 self.assertEquals( | 130 self.assertEquals( |
| 131 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 131 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), |
| 132 self._avail_finder.GetApiAvailability('systemInfo.stuff')) | 132 self._avail_finder.GetAPIAvailability('systemInfo.stuff')) |
| 133 # Listed as 'stable' on |beta|. | 133 # Listed as 'stable' on |beta|. |
| 134 self.assertEquals( | 134 self.assertEquals( |
| 135 AvailabilityInfo( | 135 AvailabilityInfo( |
| 136 ChannelInfo('beta', CANNED_BRANCHES[27], 27), | 136 ChannelInfo('beta', CANNED_BRANCHES[27], 27), |
| 137 scheduled=28), | 137 scheduled=28), |
| 138 self._avail_finder.GetApiAvailability('systemInfo.cpu')) | 138 self._avail_finder.GetAPIAvailability('systemInfo.cpu')) |
| 139 | 139 |
| 140 # Testing API channel existence for _manifest_features.json. | 140 # Testing API channel existence for _manifest_features.json. |
| 141 # Listed as 'trunk' on all channels. | 141 # Listed as 'trunk' on all channels. |
| 142 self.assertEquals( | 142 self.assertEquals( |
| 143 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 143 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 144 self._avail_finder.GetApiAvailability('sync')) | 144 self._avail_finder.GetAPIAvailability('sync')) |
| 145 # No records of API until |trunk|. | 145 # No records of API until |trunk|. |
| 146 self.assertEquals( | 146 self.assertEquals( |
| 147 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 147 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 148 self._avail_finder.GetApiAvailability('history')) | 148 self._avail_finder.GetAPIAvailability('history')) |
| 149 # Listed as 'dev' on |dev|. | 149 # Listed as 'dev' on |dev|. |
| 150 self.assertEquals( | 150 self.assertEquals( |
| 151 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 151 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), |
| 152 self._avail_finder.GetApiAvailability('storage')) | 152 self._avail_finder.GetAPIAvailability('storage')) |
| 153 # Stable in _manifest_features and into pre-18 versions. | 153 # Stable in _manifest_features and into pre-18 versions. |
| 154 self.assertEquals( | 154 self.assertEquals( |
| 155 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[8], 8)), | 155 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[8], 8)), |
| 156 self._avail_finder.GetApiAvailability('pageAction')) | 156 self._avail_finder.GetAPIAvailability('pageAction')) |
| 157 | 157 |
| 158 # Testing API channel existence for _permission_features.json. | 158 # Testing API channel existence for _permission_features.json. |
| 159 # Listed as 'beta' on |trunk|. | 159 # Listed as 'beta' on |trunk|. |
| 160 self.assertEquals( | 160 self.assertEquals( |
| 161 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 161 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 162 self._avail_finder.GetApiAvailability('falseBetaAPI')) | 162 self._avail_finder.GetAPIAvailability('falseBetaAPI')) |
| 163 # Listed as 'trunk' on |trunk|. | 163 # Listed as 'trunk' on |trunk|. |
| 164 self.assertEquals( | 164 self.assertEquals( |
| 165 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 165 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 166 self._avail_finder.GetApiAvailability('trunkAPI')) | 166 self._avail_finder.GetAPIAvailability('trunkAPI')) |
| 167 # Listed as 'trunk' on all development channels. | 167 # Listed as 'trunk' on all development channels. |
| 168 self.assertEquals( | 168 self.assertEquals( |
| 169 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 169 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 170 self._avail_finder.GetApiAvailability('declarativeContent')) | 170 self._avail_finder.GetAPIAvailability('declarativeContent')) |
| 171 # Listed as 'dev' on all development channels. | 171 # Listed as 'dev' on all development channels. |
| 172 self.assertEquals( | 172 self.assertEquals( |
| 173 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 173 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), |
| 174 self._avail_finder.GetApiAvailability('bluetooth')) | 174 self._avail_finder.GetAPIAvailability('bluetooth')) |
| 175 # Listed as 'dev' on |dev|. | 175 # Listed as 'dev' on |dev|. |
| 176 self.assertEquals( | 176 self.assertEquals( |
| 177 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 177 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), |
| 178 self._avail_finder.GetApiAvailability('cookies')) | 178 self._avail_finder.GetAPIAvailability('cookies')) |
| 179 # Treated as 'stable' APIs. | 179 # Treated as 'stable' APIs. |
| 180 self.assertEquals( | 180 self.assertEquals( |
| 181 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[24], 24)), | 181 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[24], 24)), |
| 182 self._avail_finder.GetApiAvailability('alarms')) | 182 self._avail_finder.GetAPIAvailability('alarms')) |
| 183 self.assertEquals( | 183 self.assertEquals( |
| 184 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[21], 21)), | 184 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[21], 21)), |
| 185 self._avail_finder.GetApiAvailability('bookmarks')) | 185 self._avail_finder.GetAPIAvailability('bookmarks')) |
| 186 | 186 |
| 187 # Testing older API existence using extension_api.json. | 187 # Testing older API existence using extension_api.json. |
| 188 self.assertEquals( | 188 self.assertEquals( |
| 189 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[6], 6)), | 189 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[6], 6)), |
| 190 self._avail_finder.GetApiAvailability('menus')) | 190 self._avail_finder.GetAPIAvailability('menus')) |
| 191 self.assertEquals( | 191 self.assertEquals( |
| 192 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[5], 5)), | 192 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[5], 5)), |
| 193 self._avail_finder.GetApiAvailability('idle')) | 193 self._avail_finder.GetAPIAvailability('idle')) |
| 194 | 194 |
| 195 # Switches between _features.json files across branches. | 195 # Switches between _features.json files across branches. |
| 196 # Listed as 'trunk' on all channels, in _api, _permission, or _manifest. | 196 # Listed as 'trunk' on all channels, in _api, _permission, or _manifest. |
| 197 self.assertEquals( | 197 self.assertEquals( |
| 198 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 198 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 199 self._avail_finder.GetApiAvailability('contextMenus')) | 199 self._avail_finder.GetAPIAvailability('contextMenus')) |
| 200 # Moves between _permission and _manifest as file system is traversed. | 200 # Moves between _permission and _manifest as file system is traversed. |
| 201 self.assertEquals( | 201 self.assertEquals( |
| 202 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[23], 23)), | 202 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[23], 23)), |
| 203 self._avail_finder.GetApiAvailability('systemInfo.display')) | 203 self._avail_finder.GetAPIAvailability('systemInfo.display')) |
| 204 self.assertEquals( | 204 self.assertEquals( |
| 205 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[17], 17)), | 205 AvailabilityInfo(ChannelInfo('stable', CANNED_BRANCHES[17], 17)), |
| 206 self._avail_finder.GetApiAvailability('webRequest')) | 206 self._avail_finder.GetAPIAvailability('webRequest')) |
| 207 | 207 |
| 208 # Mid-upgrade cases: | 208 # Mid-upgrade cases: |
| 209 # Listed as 'dev' on |beta| and 'beta' on |dev|. | 209 # Listed as 'dev' on |beta| and 'beta' on |dev|. |
| 210 self.assertEquals( | 210 self.assertEquals( |
| 211 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), | 211 AvailabilityInfo(ChannelInfo('dev', CANNED_BRANCHES[28], 28)), |
| 212 self._avail_finder.GetApiAvailability('notifications')) | 212 self._avail_finder.GetAPIAvailability('notifications')) |
| 213 # Listed as 'beta' on |stable|, 'dev' on |beta| ... until |stable| on trunk. | 213 # Listed as 'beta' on |stable|, 'dev' on |beta| ... until |stable| on trunk. |
| 214 self.assertEquals( | 214 self.assertEquals( |
| 215 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), | 215 AvailabilityInfo(ChannelInfo('trunk', 'trunk', 'trunk')), |
| 216 self._avail_finder.GetApiAvailability('events')) | 216 self._avail_finder.GetAPIAvailability('events')) |
| 217 | 217 |
| 218 def testGetApiNodeAvailability(self): | 218 def testGetAPINodeAvailability(self): |
| 219 # Allow the LookupResult constructions below to take just one line. | 219 # Allow the LookupResult constructions below to take just one line. |
| 220 lookup_result = api_schema_graph.LookupResult | 220 lookup_result = api_schema_graph.LookupResult |
| 221 availability_graph = self._node_avail_finder.GetApiNodeAvailability('tabs') | 221 availability_graph = self._node_avail_finder.GetAPINodeAvailability('tabs') |
| 222 | 222 |
| 223 self.assertEquals( | 223 self.assertEquals( |
| 224 lookup_result(True, self._branch_utility.GetChannelInfo('trunk')), | 224 lookup_result(True, self._branch_utility.GetChannelInfo('trunk')), |
| 225 availability_graph.Lookup('tabs', 'properties', | 225 availability_graph.Lookup('tabs', 'properties', |
| 226 'fakeTabsProperty3')) | 226 'fakeTabsProperty3')) |
| 227 self.assertEquals( | 227 self.assertEquals( |
| 228 lookup_result(True, self._branch_utility.GetChannelInfo('dev')), | 228 lookup_result(True, self._branch_utility.GetChannelInfo('dev')), |
| 229 availability_graph.Lookup('tabs', 'events', 'onActivated', | 229 availability_graph.Lookup('tabs', 'events', 'onActivated', |
| 230 'parameters', 'activeInfo', 'properties', | 230 'parameters', 'activeInfo', 'properties', |
| 231 'windowId')) | 231 'windowId')) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 self.assertEqual(lookup_result(False, None), | 315 self.assertEqual(lookup_result(False, None), |
| 316 availability_graph.Lookup('functions')) | 316 availability_graph.Lookup('functions')) |
| 317 self.assertEqual(lookup_result(False, None), | 317 self.assertEqual(lookup_result(False, None), |
| 318 availability_graph.Lookup('events', 'onActivated', | 318 availability_graph.Lookup('events', 'onActivated', |
| 319 'parameters', 'activeInfo', | 319 'parameters', 'activeInfo', |
| 320 'tabId')) | 320 'tabId')) |
| 321 | 321 |
| 322 | 322 |
| 323 if __name__ == '__main__': | 323 if __name__ == '__main__': |
| 324 unittest.main() | 324 unittest.main() |
| OLD | NEW |