sidenav_data_source_test.py revision 868fa2fe829687343ffae624259930155e16dbd8
1#!/usr/bin/env python
2# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import json
7import os
8import sys
9import unittest
10
11from compiled_file_system import CompiledFileSystem
12from local_file_system import LocalFileSystem
13from object_store_creator import ObjectStoreCreator
14from sidenav_data_source import SidenavDataSource
15
16class SamplesDataSourceTest(unittest.TestCase):
17  def setUp(self):
18    self._json_path = 'docs/server2/test_data/sidenav_data_source'
19    self._compiled_fs_factory = CompiledFileSystem.Factory(
20        LocalFileSystem.Create(),
21        ObjectStoreCreator.ForTest())
22
23  def _CheckLevels(self, items, level=2):
24    for item in items:
25      self.assertEqual(level, item['level'])
26      if 'items' in item:
27        self._CheckLevels(item['items'], level=level + 1)
28
29  def _ReadLocalFile(self, filename):
30    with open(os.path.join(sys.path[0],
31                           'test_data',
32                           'sidenav_data_source',
33                           filename), 'r') as f:
34      return f.read()
35
36  def testLevels(self):
37    sidenav_data_source = SidenavDataSource.Factory(self._compiled_fs_factory,
38                                                    self._json_path,
39                                                    '').Create('')
40    sidenav_json = sidenav_data_source.get('test')
41    self._CheckLevels(sidenav_json)
42
43  def testSelected(self):
44    sidenav_data_source = SidenavDataSource.Factory(
45        self._compiled_fs_factory,
46        self._json_path,
47        '').Create('www.b.com')
48    sidenav_json = sidenav_data_source.get('test')
49    # This will be prettier once JSON is loaded with an OrderedDict.
50    for item in sidenav_json:
51      if item['title'] == 'Jim':
52        self.assertTrue(item.get('child_selected', False))
53        for next_item in item['items']:
54          if next_item['title'] == 'B':
55            self.assertTrue(next_item.get('selected', False))
56            return
57    # If we didn't return already, we should fail.
58    self.fail()
59
60  def testAbsolutePath(self):
61    sidenav_data_source = SidenavDataSource.Factory(
62        self._compiled_fs_factory,
63        self._json_path,
64        '/trunk').Create('absolute_path/test.html')
65    sidenav_json = sidenav_data_source.get('absolute_path')
66    self.assertEqual(
67        sidenav_json,
68        json.loads(self._ReadLocalFile('absolute_path_sidenav_expected.json')))
69
70if __name__ == '__main__':
71  unittest.main()
72