| Index: chrome/common/extensions/docs/server2/sidenav_data_source_test.py
|
| diff --git a/chrome/common/extensions/docs/server2/sidenav_data_source_test.py b/chrome/common/extensions/docs/server2/sidenav_data_source_test.py
|
| index e7eddc1724488d48e567a434c2c73a80b2c4d38a..50df92b61a063d3237e0e9def7917de4798fb146 100755
|
| --- a/chrome/common/extensions/docs/server2/sidenav_data_source_test.py
|
| +++ b/chrome/common/extensions/docs/server2/sidenav_data_source_test.py
|
| @@ -1,68 +1,156 @@
|
| #!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# 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 json
|
| -import os
|
| -import sys
|
| import unittest
|
|
|
| from compiled_file_system import CompiledFileSystem
|
| -from local_file_system import LocalFileSystem
|
| from object_store_creator import ObjectStoreCreator
|
| -from sidenav_data_source import SidenavDataSource
|
| +from servlet import Request
|
| +from sidenav_data_source import (
|
| + SidenavDataSource, _AddLevels, _AddSelected, _QualifyHrefs)
|
| +from test_file_system import TestFileSystem
|
| +from test_util import CaptureLogging
|
| +
|
| +
|
| +class FakeServerInstance(object):
|
| + def __init__(self, file_system):
|
| + self.compiled_host_fs_factory = CompiledFileSystem.Factory(
|
| + file_system, ObjectStoreCreator.ForTest())
|
| + self.sidenav_json_base_path = ''
|
| +
|
|
|
| class SamplesDataSourceTest(unittest.TestCase):
|
| - def setUp(self):
|
| - self._json_path = 'docs/server2/test_data/sidenav_data_source'
|
| - self._compiled_fs_factory = CompiledFileSystem.Factory(
|
| - LocalFileSystem.Create(),
|
| - ObjectStoreCreator.ForTest())
|
| -
|
| - def _CheckLevels(self, items, level=2):
|
| - for item in items:
|
| - self.assertEqual(level, item['level'])
|
| - if 'items' in item:
|
| - self._CheckLevels(item['items'], level=level + 1)
|
| -
|
| - def _ReadLocalFile(self, filename):
|
| - with open(os.path.join(sys.path[0],
|
| - 'test_data',
|
| - 'sidenav_data_source',
|
| - filename), 'r') as f:
|
| - return f.read()
|
| -
|
| - def testLevels(self):
|
| - sidenav_data_source = SidenavDataSource.Factory(self._compiled_fs_factory,
|
| - self._json_path).Create('')
|
| - sidenav_json = sidenav_data_source.get('test')
|
| - self._CheckLevels(sidenav_json)
|
| -
|
| - def testSelected(self):
|
| - sidenav_data_source = SidenavDataSource.Factory(
|
| - self._compiled_fs_factory,
|
| - self._json_path).Create('www.b.com')
|
| - sidenav_json = sidenav_data_source.get('test')
|
| - # This will be prettier once JSON is loaded with an OrderedDict.
|
| - for item in sidenav_json:
|
| - if item['title'] == 'Jim':
|
| - self.assertTrue(item.get('child_selected', False))
|
| - for next_item in item['items']:
|
| - if next_item['title'] == 'B':
|
| - self.assertTrue(next_item.get('selected', False))
|
| - return
|
| - # If we didn't return already, we should fail.
|
| - self.fail()
|
| -
|
| - def testAbsolutePath(self):
|
| - sidenav_data_source = SidenavDataSource.Factory(
|
| - self._compiled_fs_factory,
|
| - self._json_path).Create('absolute_path/test.html')
|
| - sidenav_json = sidenav_data_source.get('absolute_path')
|
| - self.assertEqual(
|
| - sidenav_json,
|
| - json.loads(self._ReadLocalFile('absolute_path_sidenav_expected.json')))
|
| + def testAddLevels(self):
|
| + sidenav_json = [{
|
| + 'title': 'H2',
|
| + 'items': [{
|
| + 'title': 'H3',
|
| + 'items': [{ 'title': 'X1' }]
|
| + }]
|
| + }]
|
| +
|
| + expected = [{
|
| + 'level': 1,
|
| + 'title': 'H2',
|
| + 'items': [{
|
| + 'level': 2,
|
| + 'title': 'H3',
|
| + 'items': [{ 'level': 3, 'title': 'X1' }]
|
| + }]
|
| + }]
|
| +
|
| + _AddLevels(sidenav_json, 1)
|
| + self.assertEqual(expected, sidenav_json)
|
| +
|
| + def testAddSelected(self):
|
| + sidenav_json = [
|
| + { 'href': '/AH2.html' },
|
| + {
|
| + 'href': '/H2.html',
|
| + 'items': [{
|
| + 'href': '/H3.html'
|
| + }]
|
| + }
|
| + ]
|
| +
|
| + expected = [
|
| + { 'href': '/AH2.html' },
|
| + {
|
| + 'child_selected': True,
|
| + 'href': '/H2.html',
|
| + 'items': [{
|
| + 'href': '/H3.html',
|
| + 'selected': True
|
| + }]
|
| + }
|
| + ]
|
| +
|
| + _AddSelected(sidenav_json, 'H3.html')
|
| + self.assertEqual(expected, sidenav_json)
|
| +
|
| + def testQualifyHrefs(self):
|
| + sidenav_json = [
|
| + { 'href': '/qualified/H1.html' },
|
| + { 'href': 'https://qualified/X1.html' },
|
| + {
|
| + 'href': 'H2.html',
|
| + 'items': [{
|
| + 'href': 'H3.html'
|
| + }]
|
| + }
|
| + ]
|
| +
|
| + expected = [
|
| + { 'href': '/qualified/H1.html' },
|
| + { 'href': 'https://qualified/X1.html' },
|
| + {
|
| + 'href': '/H2.html',
|
| + 'items': [{
|
| + 'href': '/H3.html'
|
| + }]
|
| + }
|
| + ]
|
| +
|
| + log_output = CaptureLogging(lambda: _QualifyHrefs(sidenav_json))
|
| +
|
| + self.assertEqual(expected, sidenav_json)
|
| + self.assertEqual(2, len(log_output))
|
| +
|
| + def testSidenavDataSource(self):
|
| + file_system = TestFileSystem({
|
| + 'apps_sidenav.json': json.dumps([{
|
| + 'title': 'H1',
|
| + 'href': 'H1.html',
|
| + 'items': [{
|
| + 'title': 'H2',
|
| + 'href': '/H2.html'
|
| + }]
|
| + }])
|
| + })
|
| +
|
| + expected = [{
|
| + 'level': 2,
|
| + 'child_selected': True,
|
| + 'title': 'H1',
|
| + 'href': '/H1.html',
|
| + 'items': [{
|
| + 'level': 3,
|
| + 'selected': True,
|
| + 'title': 'H2',
|
| + 'href': '/H2.html'
|
| + }]
|
| + }]
|
| +
|
| + sidenav_data_source = SidenavDataSource(
|
| + FakeServerInstance(file_system), Request.ForTest('/H2.html'))
|
| +
|
| + log_output = CaptureLogging(
|
| + lambda: self.assertEqual(expected, sidenav_data_source.get('apps')))
|
| +
|
| + self.assertEqual(1, len(log_output))
|
| + self.assertTrue(
|
| + log_output[0].msg.startswith('Paths in sidenav must be qualified.'))
|
| +
|
| + def testCron(self):
|
| + file_system = TestFileSystem({
|
| + 'apps_sidenav.json': '[{ "title": "H1" }]' ,
|
| + 'extensions_sidenav.json': '[{ "title": "H2" }]'
|
| + })
|
| +
|
| + # Ensure Cron doesn't rely on request.
|
| + sidenav_data_source = SidenavDataSource(
|
| + FakeServerInstance(file_system), request=None)
|
| + sidenav_data_source.Cron()
|
| +
|
| + # If Cron fails, apps_sidenav.json will not be cached, and the _cache_data
|
| + # access will fail.
|
| + # TODO(jshumway): Make a non hack version of this check.
|
| + sidenav_data_source._cache._file_object_store.Get(
|
| + '/apps_sidenav.json').Get()._cache_data
|
| +
|
|
|
| if __name__ == '__main__':
|
| unittest.main()
|
|
|