blob: 322752f11e8e4478d932305c491a35a49527c27d [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 json
import unittest
from compiled_file_system import CompiledFileSystem
from object_store_creator import ObjectStoreCreator
from server_instance import ServerInstance
from servlet import Request
from sidenav_data_source import SidenavDataSource, _AddLevels, _AddSelected
from test_file_system import TestFileSystem
from test_util import CaptureLogging
class SamplesDataSourceTest(unittest.TestCase):
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 testWithDifferentBasePath(self):
file_system = TestFileSystem({
'apps_sidenav.json': json.dumps([
{ 'href': '/H1.html' },
{ 'href': '/H2.html' },
{ 'href': '/base/path/H2.html' },
{ 'href': 'https://qualified/X1.html' },
{
'href': 'H3.html',
'items': [{
'href': 'H4.html'
}]
},
])
}, relative_to='docs/templates/json')
expected = [
{'href': '/base/path/H1.html', 'level': 2},
{'href': '/base/path/H2.html', 'level': 2, 'selected': True},
{'href': '/base/path/base/path/H2.html', 'level': 2},
{'href': 'https://qualified/X1.html', 'level': 2},
{'items': [
{'href': '/base/path/H4.html', 'level': 3}
],
'href': '/base/path/H3.html', 'level': 2}
]
server_instance = ServerInstance.ForTest(file_system,
base_path='/base/path/')
sidenav_data_source = SidenavDataSource(server_instance,
Request.ForTest('/H2.html'))
log_output = CaptureLogging(
lambda: self.assertEqual(expected, sidenav_data_source.get('apps')))
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'
}]
}])
}, relative_to='docs/templates/json')
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(
ServerInstance.ForTest(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" }]'
}, relative_to='docs/templates/json')
# Ensure Cron doesn't rely on request.
sidenav_data_source = SidenavDataSource(
ServerInstance.ForTest(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(
'docs/templates/json/apps_sidenav.json').Get()._cache_data
if __name__ == '__main__':
unittest.main()