Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6678)

Unified Diff: chrome/common/extensions/docs/server2/api_data_source_test.py

Issue 354073004: Docserver: Add template support for object level availability (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/api_data_source_test.py
diff --git a/chrome/common/extensions/docs/server2/api_data_source_test.py b/chrome/common/extensions/docs/server2/api_data_source_test.py
index 81544cb4d60cadbaabf06a3effbc2569a19dbbe7..10c1a45ebefadcdd219bbaa4450b4943feaef72d 100755
--- a/chrome/common/extensions/docs/server2/api_data_source_test.py
+++ b/chrome/common/extensions/docs/server2/api_data_source_test.py
@@ -11,36 +11,46 @@ import unittest
from api_data_source import (_JSCModel,
_FormatValue,
_GetEventByNameFromEvents)
-from availability_finder import AvailabilityInfo
-from branch_utility import ChannelInfo
+from api_schema_graph import APISchemaGraph
+from availability_finder import AvailabilityFinder, AvailabilityInfo
+from branch_utility import BranchUtility, ChannelInfo
+from compiled_file_system import CompiledFileSystem
from extensions_paths import CHROME_EXTENSIONS
from fake_host_file_system_provider import FakeHostFileSystemProvider
+from fake_url_fetcher import FakeUrlFetcher
from features_bundle import FeaturesBundle
from file_system import FileNotFoundError
from future import Future
+from host_file_system_iterator import HostFileSystemIterator
from object_store_creator import ObjectStoreCreator
from server_instance import ServerInstance
-from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES)
from test_data.api_data_source.canned_trunk_fs import CANNED_TRUNK_FS_DATA
+from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES)
+from test_data.object_level_availability.tabs import TABS_SCHEMA_BRANCHES
from test_file_system import TestFileSystem
from test_util import Server2Path
from third_party.json_schema_compiler.memoize import memoize
-def _MakeLink(href, text):
- return '<a href="%s">%s</a>' % (href, text)
+class _FakeTemplateCache(object):
+ def GetFromFile(self, key):
+ return Future(value='handlebar %s' % key)
-def _GetType(dict_, name):
- for type_ in dict_['types']:
- if type_['name'] == name:
- return type_
+class _FakeAvailabilityFinder(object):
+ def __init__(self, fake_availability):
+ self._fake_availability = fake_availability
-class _FakeTemplateCache(object):
+ def GetAPIAvailability(self, api_name):
+ return self._fake_availability
- def GetFromFile(self, key):
- return Future(value='handlebar %s' % key)
+ def GetAPINodeAvailability(self, api_name):
+ '''The tests that use this fake class don't
+ use the node availability, so just return a
+ dummy graph.
+ '''
+ return APISchemaGraph(_graph={'dummy': 'graph'})
class _FakeFeaturesBundle(object):
@@ -56,7 +66,6 @@ class _FakeFeaturesBundle(object):
class APIDataSourceTest(unittest.TestCase):
-
def setUp(self):
self._base_path = Server2Path('test_data', 'test_json')
@@ -72,17 +81,6 @@ class APIDataSourceTest(unittest.TestCase):
'extensions')
self._fake_availability = AvailabilityInfo(ChannelInfo('stable', '396', 5))
- # Used for testGetAPIAvailability() so that valid-ish data is processed.
- server_instance = ServerInstance.ForTest(
- file_system_provider=FakeHostFileSystemProvider(
- CANNED_API_FILE_SYSTEM_DATA))
- self._avail_api_models = server_instance.platform_bundle.GetAPIModels(
- 'extensions')
- self._avail_json_cache = server_instance.compiled_fs_factory.ForJson(
- server_instance.host_file_system_provider.GetTrunk())
- self._avail_finder = server_instance.platform_bundle.GetAvailabilityFinder(
- 'extensions')
-
def _ReadLocalFile(self, filename):
with open(os.path.join(self._base_path, filename), 'r') as f:
return f.read()
@@ -90,9 +88,39 @@ class APIDataSourceTest(unittest.TestCase):
def _LoadJSON(self, filename):
return json.loads(self._ReadLocalFile(filename))
+ def _FakeLoadAddRulesSchema(self):
+ events = self._LoadJSON('add_rules_def_test.json')
+ return Future(value=_GetEventByNameFromEvents(events))
+
+ def testFormatValue(self):
+ self.assertEquals('1,234,567', _FormatValue(1234567))
+ self.assertEquals('67', _FormatValue(67))
+ self.assertEquals('234,567', _FormatValue(234567))
+
+ def testGetEventByNameFromEvents(self):
+ events = {}
+ # Missing 'types' completely.
+ self.assertRaises(AssertionError, _GetEventByNameFromEvents, events)
+
+ events['types'] = []
+ # No type 'Event' defined.
+ self.assertRaises(AssertionError, _GetEventByNameFromEvents, events)
+
+ events['types'].append({ 'name': 'Event',
+ 'functions': []})
+ add_rules = { "name": "addRules" }
+ events['types'][0]['functions'].append(add_rules)
+ self.assertEqual(add_rules,
+ _GetEventByNameFromEvents(events)['addRules'])
+
+ events['types'][0]['functions'].append(add_rules)
+ # Duplicates are an error.
+ self.assertRaises(AssertionError, _GetEventByNameFromEvents, events)
+
def testCreateId(self):
+ fake_avail_finder = _FakeAvailabilityFinder(self._fake_availability)
dict_ = _JSCModel(self._api_models.GetModel('tester').Get(),
- self._fake_availability,
+ fake_avail_finder,
self._json_cache,
_FakeTemplateCache(),
self._features_bundle,
@@ -105,43 +133,45 @@ class APIDataSourceTest(unittest.TestCase):
# TODO(kalman): re-enable this when we have a rebase option.
def DISABLED_testToDict(self):
+ fake_avail_finder = _FakeAvailabilityFinder(self._fake_availability)
expected_json = self._LoadJSON('expected_tester.json')
dict_ = _JSCModel(self._api_models.GetModel('tester').Get(),
- self._fake_availability,
+ fake_avail_finder,
self._json_cache,
_FakeTemplateCache(),
self._features_bundle,
None).ToDict()
self.assertEquals(expected_json, dict_)
- def testFormatValue(self):
- self.assertEquals('1,234,567', _FormatValue(1234567))
- self.assertEquals('67', _FormatValue(67))
- self.assertEquals('234,567', _FormatValue(234567))
+ def testAddRules(self):
+ fake_avail_finder = _FakeAvailabilityFinder(self._fake_availability)
+ dict_ = _JSCModel(self._api_models.GetModel('add_rules_tester').Get(),
+ fake_avail_finder,
+ #self._fake_availability,
+ self._json_cache,
+ _FakeTemplateCache(),
+ self._features_bundle,
+ self._FakeLoadAddRulesSchema()).ToDict()
- def testGetAPIAvailability(self):
- api_availabilities = {
- 'bluetooth': 28,
- 'contextMenus': 'trunk',
- 'jsonStableAPI': 20,
- 'idle': 5,
- 'input.ime': 18,
- 'tabs': 18
- }
- for api_name, availability in api_availabilities.iteritems():
- model_dict = _JSCModel(
- self._avail_api_models.GetModel(api_name).Get(),
- self._avail_finder.GetAPIAvailability(api_name),
- self._avail_json_cache,
- _FakeTemplateCache(),
- _FakeFeaturesBundle(),
- None).ToDict()
- self.assertEquals(availability,
- model_dict['introList'][1]['content'][0]['version'])
+ # Check that the first event has the addRulesFunction defined.
+ self.assertEquals('add_rules_tester', dict_['name'])
+ self.assertEquals('rules', dict_['events'][0]['name'])
+ self.assertEquals('notable_name_to_check_for',
+ dict_['events'][0]['byName']['addRules'][
+ 'parameters'][0]['name'])
+
+ # Check that the second event has addListener defined.
+ self.assertEquals('noRules', dict_['events'][1]['name'])
+ self.assertEquals('add_rules_tester', dict_['name'])
+ self.assertEquals('noRules', dict_['events'][1]['name'])
+ self.assertEquals('callback',
+ dict_['events'][0]['byName']['addListener'][
+ 'parameters'][0]['name'])
def testGetIntroList(self):
+ fake_avail_finder = _FakeAvailabilityFinder(self._fake_availability)
model = _JSCModel(self._api_models.GetModel('tester').Get(),
- self._fake_availability,
+ fake_avail_finder,
self._json_cache,
_FakeTemplateCache(),
self._features_bundle,
@@ -186,9 +216,11 @@ class APIDataSourceTest(unittest.TestCase):
]
self.assertEquals(model._GetIntroTableList(), expected_list)
+ fake_avail_finder = _FakeAvailabilityFinder(
+ AvailabilityInfo(ChannelInfo('beta', '1453', 27), scheduled=28))
# Tests the same data with a scheduled availability.
model = _JSCModel(self._api_models.GetModel('tester').Get(),
- AvailabilityInfo(ChannelInfo('beta', '1453', 27), scheduled=28),
+ fake_avail_finder,
self._json_cache,
_FakeTemplateCache(),
self._features_bundle,
@@ -205,52 +237,111 @@ class APIDataSourceTest(unittest.TestCase):
}
self.assertEquals(model._GetIntroTableList(), expected_list)
- def testGetEventByNameFromEvents(self):
- events = {}
- # Missing 'types' completely.
- self.assertRaises(AssertionError, _GetEventByNameFromEvents, events)
- events['types'] = []
- # No type 'Event' defined.
- self.assertRaises(AssertionError, _GetEventByNameFromEvents, events)
+class APIDataSourceWithoutNodeAvailabilityTest(unittest.TestCase):
+ def setUp(self):
+ server_instance = ServerInstance.ForTest(
+ file_system_provider=FakeHostFileSystemProvider(
+ CANNED_API_FILE_SYSTEM_DATA))
+ self._api_models = server_instance.platform_bundle.GetAPIModels(
+ 'extensions')
+ self._json_cache = server_instance.compiled_fs_factory.ForJson(
+ server_instance.host_file_system_provider.GetTrunk())
+ self._avail_finder = server_instance.platform_bundle.GetAvailabilityFinder(
+ 'extensions')
- events['types'].append({ 'name': 'Event',
- 'functions': []})
- add_rules = { "name": "addRules" }
- events['types'][0]['functions'].append(add_rules)
- self.assertEqual(add_rules,
- _GetEventByNameFromEvents(events)['addRules'])
- events['types'][0]['functions'].append(add_rules)
- # Duplicates are an error.
- self.assertRaises(AssertionError, _GetEventByNameFromEvents, events)
+ def testGetAPIAvailability(self):
+ api_availabilities = {
+ 'bluetooth': 28,
+ 'contextMenus': 'trunk',
+ 'jsonStableAPI': 20,
+ 'idle': 5,
+ 'input.ime': 18,
+ 'tabs': 18
+ }
+ for api_name, availability in api_availabilities.iteritems():
+ model_dict = _JSCModel(
+ self._api_models.GetModel(api_name).Get(),
+ self._avail_finder,
+ self._json_cache,
+ _FakeTemplateCache(),
+ _FakeFeaturesBundle(),
+ None).ToDict()
+ self.assertEquals(availability,
+ model_dict['introList'][1]['content'][0]['version'])
- def _FakeLoadAddRulesSchema(self):
- events = self._LoadJSON('add_rules_def_test.json')
- return Future(value=_GetEventByNameFromEvents(events))
- def testAddRules(self):
- dict_ = _JSCModel(self._api_models.GetModel('add_rules_tester').Get(),
- self._fake_availability,
- self._json_cache,
- _FakeTemplateCache(),
- self._features_bundle,
- self._FakeLoadAddRulesSchema()).ToDict()
+class APIDataSourceWithNodeAvailabilityTest(unittest.TestCase):
+ def setUp(self):
+ tabs_unmodified_versions = (16, 20, 23, 24)
+ self._branch_utility = BranchUtility(
+ os.path.join('branch_utility', 'first.json'),
+ os.path.join('branch_utility', 'second.json'),
+ FakeUrlFetcher(Server2Path('test_data')),
+ ObjectStoreCreator.ForTest())
+ self._node_fs_creator = FakeHostFileSystemProvider(TABS_SCHEMA_BRANCHES)
+ self._node_fs_iterator = HostFileSystemIterator(self._node_fs_creator,
+ self._branch_utility)
+ test_object_store = ObjectStoreCreator.ForTest()
+ self._avail_finder = AvailabilityFinder(
+ self._branch_utility,
+ CompiledFileSystem.Factory(test_object_store),
+ self._node_fs_iterator,
+ self._node_fs_creator.GetTrunk(),
+ test_object_store,
+ 'extensions')
- # Check that the first event has the addRulesFunction defined.
- self.assertEquals('add_rules_tester', dict_['name'])
- self.assertEquals('rules', dict_['events'][0]['name'])
- self.assertEquals('notable_name_to_check_for',
- dict_['events'][0]['byName']['addRules'][
- 'parameters'][0]['name'])
+ server_instance = ServerInstance.ForTest(
+ file_system_provider=FakeHostFileSystemProvider(
+ TABS_SCHEMA_BRANCHES))
+ self._api_models = server_instance.platform_bundle.GetAPIModels(
+ 'extensions')
+ self._json_cache = server_instance.compiled_fs_factory.ForJson(
+ server_instance.host_file_system_provider.GetTrunk())
+
+ # Imitate the actual SVN file system by incrementing the stats for paths
+ # where an API schema has changed.
+ last_stat = type('last_stat', (object,), {'val': 0})
+
+ def stat_paths(file_system, channel_info):
+ if channel_info.version not in tabs_unmodified_versions:
+ last_stat.val += 1
+ # HACK: |file_system| is a MockFileSystem backed by a TestFileSystem.
+ # Increment the TestFileSystem stat count.
+ file_system._file_system.IncrementStat(by=last_stat.val)
+ # Continue looping. The iterator will stop after 'trunk' automatically.
+ return True
+
+ # Use the HostFileSystemIterator created above to change global stat values
+ # for the TestFileSystems that it creates.
+ self._node_fs_iterator.Ascending(
+ # The earliest version represented with the tabs' test data is 13.
+ self._branch_utility.GetStableChannelInfo(13),
+ stat_paths)
+
+ def testGetAPINodeAvailability(self):
+ def assertEquals(node, actual):
+ node_availabilities = {
+ 'tabs.Tab': None,
+ 'tabs.InjectDetails': 25
+ }
+ self.assertEquals(node_availabilities[node], actual)
+
+ model_dict = _JSCModel(
+ self._api_models.GetModel('tabs').Get(),
+ self._avail_finder,
+ self._json_cache,
+ _FakeTemplateCache(),
+ _FakeFeaturesBundle(),
+ None).ToDict()
+
+ # Test nodes that have the same availability as their parent.
ahernandez 2014/06/26 23:53:31 There are only two tests for this because I'm only
+ assertEquals('tabs.Tab', model_dict['types'][0]['availability'])
+ # Test nodes with varying availabilities.
+ assertEquals('tabs.InjectDetails',
+ model_dict['types'][1]['availability']['version'])
- # Check that the second event has addListener defined.
- self.assertEquals('noRules', dict_['events'][1]['name'])
- self.assertEquals('add_rules_tester', dict_['name'])
- self.assertEquals('noRules', dict_['events'][1]['name'])
- self.assertEquals('callback',
- dict_['events'][0]['byName']['addListener'][
- 'parameters'][0]['name'])
if __name__ == '__main__':
unittest.main()

Powered by Google App Engine
This is Rietveld 408576698