blob: 83ab7c78cb62bdf3b64fe0fc26d0b19140d62d9b [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import sys
import unittest
from availability_finder import AvailabilityFinder
from branch_utility import BranchUtility
from compiled_file_system import CompiledFileSystem
from fake_url_fetcher import FakeUrlFetcher
from host_file_system_iterator import HostFileSystemIterator
from object_store_creator import ObjectStoreCreator
from test_file_system import TestFileSystem
from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES)
class FakeHostFileSystemCreator(object):
def Create(self, branch):
return TestFileSystem(CANNED_API_FILE_SYSTEM_DATA[str(branch)])
class AvailabilityFinderTest(unittest.TestCase):
def setUp(self):
branch_utility = BranchUtility(
os.path.join('branch_utility', 'first.json'),
os.path.join('branch_utility', 'second.json'),
FakeUrlFetcher(os.path.join(sys.path[0], 'test_data')),
ObjectStoreCreator.ForTest())
fake_host_file_system_creator = FakeHostFileSystemCreator()
file_system_iterator = HostFileSystemIterator(
fake_host_file_system_creator,
fake_host_file_system_creator.Create('trunk'),
branch_utility)
self._avail_finder = AvailabilityFinder(file_system_iterator,
ObjectStoreCreator.ForTest(),
branch_utility)
def testGetApiAvailability(self):
# Key: Using 'channel' (i.e. 'beta') to represent an availability listing
# for an API in a _features.json file, and using |channel| (i.e. |dev|) to
# represent the development channel, or phase of development, where an API's
# availability is being checked.
# Testing whitelisted API
self.assertEquals('beta',
self._avail_finder.GetApiAvailability('declarativeWebRequest').channel)
self.assertEquals(27,
self._avail_finder.GetApiAvailability('declarativeWebRequest').version)
# Testing APIs found only by checking file system existence.
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('windows').channel)
self.assertEquals(23,
self._avail_finder.GetApiAvailability('windows').version)
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('tabs').channel)
self.assertEquals(18,
self._avail_finder.GetApiAvailability('tabs').version)
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('input.ime').channel)
self.assertEquals(18,
self._avail_finder.GetApiAvailability('input.ime').version)
# Testing API channel existence for _api_features.json.
# Listed as 'dev' on |beta|, 'dev' on |dev|.
self.assertEquals('dev',
self._avail_finder.GetApiAvailability('systemInfo.stuff').channel)
self.assertEquals(28,
self._avail_finder.GetApiAvailability('systemInfo.stuff').version)
# Listed as 'stable' on |beta|.
self.assertEquals('beta',
self._avail_finder.GetApiAvailability('systemInfo.cpu').channel)
self.assertEquals(27,
self._avail_finder.GetApiAvailability('systemInfo.cpu').version)
# Testing API channel existence for _manifest_features.json.
# Listed as 'trunk' on all channels.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('sync').channel)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('sync').version)
# No records of API until |trunk|.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('history').channel)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('history').version)
# Listed as 'dev' on |dev|.
self.assertEquals('dev',
self._avail_finder.GetApiAvailability('storage').channel)
self.assertEquals(28,
self._avail_finder.GetApiAvailability('storage').version)
# Stable in _manifest_features and into pre-18 versions.
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('pageAction').channel)
self.assertEquals(8,
self._avail_finder.GetApiAvailability('pageAction').version)
# Testing API channel existence for _permission_features.json.
# Listed as 'beta' on |trunk|.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('falseBetaAPI').version)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('falseBetaAPI').version)
# Listed as 'trunk' on |trunk|.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('trunkAPI').channel)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('trunkAPI').version)
# Listed as 'trunk' on all development channels.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('declarativeContent').channel)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('declarativeContent').version)
# Listed as 'dev' on all development channels.
self.assertEquals('dev',
self._avail_finder.GetApiAvailability('bluetooth').channel)
self.assertEquals(28,
self._avail_finder.GetApiAvailability('bluetooth').version)
# Listed as 'dev' on |dev|.
self.assertEquals('dev',
self._avail_finder.GetApiAvailability('cookies').channel)
self.assertEquals(28,
self._avail_finder.GetApiAvailability('cookies').version)
# Treated as 'stable' APIs.
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('alarms').channel)
self.assertEquals(24,
self._avail_finder.GetApiAvailability('alarms').version)
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('bookmarks').channel)
self.assertEquals(21,
self._avail_finder.GetApiAvailability('bookmarks').version)
# Testing older API existence using extension_api.json.
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('menus').channel)
self.assertEquals(6,
self._avail_finder.GetApiAvailability('menus').version)
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('idle').channel)
self.assertEquals(5,
self._avail_finder.GetApiAvailability('idle').version)
# Switches between _features.json files across branches.
# Listed as 'trunk' on all channels, in _api, _permission, or _manifest.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('contextMenus').channel)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('contextMenus').version)
# Moves between _permission and _manifest as file system is traversed.
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('systemInfo.display').channel)
self.assertEquals(23,
self._avail_finder.GetApiAvailability('systemInfo.display').version)
self.assertEquals('stable',
self._avail_finder.GetApiAvailability('webRequest').channel)
self.assertEquals(17,
self._avail_finder.GetApiAvailability('webRequest').version)
# Mid-upgrade cases:
# Listed as 'dev' on |beta| and 'beta' on |dev|.
self.assertEquals('dev',
self._avail_finder.GetApiAvailability('notifications').channel)
self.assertEquals(28,
self._avail_finder.GetApiAvailability('notifications').version)
# Listed as 'beta' on |stable|, 'dev' on |beta| ... until |stable| on trunk.
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('events').channel)
self.assertEquals('trunk',
self._avail_finder.GetApiAvailability('events').version)
if __name__ == '__main__':
unittest.main()