template_data_source_test.py revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 api_data_source import APIDataSource 12from compiled_file_system import CompiledFileSystem 13from local_file_system import LocalFileSystem 14from object_store_creator import ObjectStoreCreator 15from reference_resolver import ReferenceResolver 16from template_data_source import TemplateDataSource 17from test_util import DisableLogging 18from third_party.handlebar import Handlebar 19from servlet import Request 20 21class _FakeFactory(object): 22 def __init__(self, input_dict=None): 23 if input_dict is None: 24 self._input_dict = {} 25 else: 26 self._input_dict = input_dict 27 28 def Create(self, *args, **optargs): 29 return self._input_dict 30 31class TemplateDataSourceTest(unittest.TestCase): 32 def setUp(self): 33 self._base_path = os.path.join(sys.path[0], 34 'test_data', 35 'template_data_source') 36 self._fake_api_list_data_source_factory = _FakeFactory() 37 self._fake_intro_data_source_factory = _FakeFactory() 38 self._fake_samples_data_source_factory = _FakeFactory() 39 self._fake_sidenav_data_source_factory = _FakeFactory() 40 41 def _ReadLocalFile(self, filename): 42 with open(os.path.join(self._base_path, filename), 'r') as f: 43 return f.read() 44 45 def _RenderTest(self, name, data_source): 46 template_name = name + '_tmpl.html' 47 template = Handlebar(self._ReadLocalFile(template_name)) 48 self.assertEquals( 49 self._ReadLocalFile(name + '_expected.html'), 50 data_source.Render(template_name)) 51 52 def _CreateTemplateDataSource(self, compiled_fs_factory, api_data=None): 53 if api_data is None: 54 api_data_factory = APIDataSource.Factory(compiled_fs_factory, 'fake_path') 55 else: 56 api_data_factory = _FakeFactory(api_data) 57 reference_resolver_factory = ReferenceResolver.Factory( 58 api_data_factory, 59 self._fake_api_list_data_source_factory, 60 ObjectStoreCreator.TestFactory()) 61 @DisableLogging('error') # "was never set" error 62 def create_from_factory(factory): 63 path = 'extensions/foo' 64 return factory.Create(Request(path, {}), path) 65 return create_from_factory(TemplateDataSource.Factory( 66 'fake_channel', 67 api_data_factory, 68 self._fake_api_list_data_source_factory, 69 self._fake_intro_data_source_factory, 70 self._fake_samples_data_source_factory, 71 self._fake_sidenav_data_source_factory, 72 compiled_fs_factory, 73 reference_resolver_factory, 74 '.', 75 '.')) 76 77 def testSimple(self): 78 self._base_path = os.path.join(self._base_path, 'simple') 79 fetcher = LocalFileSystem(self._base_path) 80 compiled_fs_factory = CompiledFileSystem.Factory( 81 fetcher, 82 ObjectStoreCreator.TestFactory()) 83 t_data_source = self._CreateTemplateDataSource( 84 compiled_fs_factory, 85 ObjectStoreCreator.TestFactory()) 86 template_a1 = Handlebar(self._ReadLocalFile('test1.html')) 87 self.assertEqual(template_a1.render({}, {'templates': {}}).text, 88 t_data_source.get('test1').render({}, {'templates': {}}).text) 89 90 template_a2 = Handlebar(self._ReadLocalFile('test2.html')) 91 self.assertEqual(template_a2.render({}, {'templates': {}}).text, 92 t_data_source.get('test2').render({}, {'templates': {}}).text) 93 94 @DisableLogging('warning') 95 def testNotFound(self): 96 self._base_path = os.path.join(self._base_path, 'simple') 97 fetcher = LocalFileSystem(self._base_path) 98 compiled_fs_factory = CompiledFileSystem.Factory( 99 fetcher, 100 ObjectStoreCreator.TestFactory()) 101 t_data_source = self._CreateTemplateDataSource( 102 compiled_fs_factory, 103 ObjectStoreCreator.TestFactory()) 104 self.assertEqual(None, t_data_source.get('junk.html')) 105 106 def testPartials(self): 107 self._base_path = os.path.join(self._base_path, 'partials') 108 fetcher = LocalFileSystem(self._base_path) 109 compiled_fs_factory = CompiledFileSystem.Factory( 110 fetcher, 111 ObjectStoreCreator.TestFactory()) 112 t_data_source = self._CreateTemplateDataSource(compiled_fs_factory) 113 self.assertEqual( 114 self._ReadLocalFile('test_expected.html'), 115 t_data_source.get('test_tmpl').render( 116 json.loads(self._ReadLocalFile('input.json')), t_data_source).text) 117 118 def testRender(self): 119 self._base_path = os.path.join(self._base_path, 'render') 120 fetcher = LocalFileSystem(self._base_path) 121 context = json.loads(self._ReadLocalFile('test1.json')) 122 compiled_fs_factory = CompiledFileSystem.Factory( 123 fetcher, 124 ObjectStoreCreator.TestFactory()) 125 self._RenderTest( 126 'test1', 127 self._CreateTemplateDataSource( 128 compiled_fs_factory, 129 api_data=json.loads(self._ReadLocalFile('test1.json')))) 130 self._RenderTest( 131 'test2', 132 self._CreateTemplateDataSource( 133 compiled_fs_factory, 134 api_data=json.loads(self._ReadLocalFile('test2.json')))) 135 136if __name__ == '__main__': 137 unittest.main() 138