15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import json 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from extensions_paths import SERVER2 100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)from server_instance import ServerInstance 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from template_data_source import TemplateDataSource 1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)from test_util import DisableLogging, ReadFile 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)from third_party.motemplate import Motemplate 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)def _ReadFile(*path): 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return ReadFile(SERVER2, 'test_data', 'template_data_source', *path) 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)def _CreateTestDataSource(base_dir): 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) '''TemplateDataSource is not instantiated directly, rather, its methods 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) are invoked through a subclass of it, which has as its only data the 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) directory in which TemplateDataSource methods should act on. Thus, we test 2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TemplateDataSource indirectly through the TestDataSource class 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ''' 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) return TestDataSource(ServerInstance.ForLocal(), 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) '%stest_data/template_data_source/%s/' % 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) (SERVER2, base_dir)) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class TestDataSource(TemplateDataSource): 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) '''Provides a subclass we can use to test the TemplateDataSource methods 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) ''' 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) def __init__(self, server_instance, base_dir): 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) type(self)._BASE = base_dir 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TemplateDataSource.__init__(self, server_instance) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class TemplateDataSourceTest(unittest.TestCase): 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testSimple(self): 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_data_source = _CreateTestDataSource('simple') 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) template_a1 = Motemplate(_ReadFile('simple', 'test1.html')) 420f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) context = [{}, {'templates': {}}] 430f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) self.assertEqual( 440f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) template_a1.Render(*context).text, 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_data_source.get('test1').Render(*context).text) 4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) template_a2 = Motemplate(_ReadFile('simple', 'test2.html')) 470f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) self.assertEqual( 480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) template_a2.Render(*context).text, 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_data_source.get('test2').Render(*context).text) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @DisableLogging('warning') 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def testNotFound(self): 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_data_source = _CreateTestDataSource('simple') 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) self.assertEqual(None, test_data_source.get('junk')) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) @DisableLogging('warning') 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testPartials(self): 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_data_source = _CreateTestDataSource('partials') 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) context = json.loads(_ReadFile('partials', 'input.json')) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEqual( 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) _ReadFile('partials', 'test_expected.html'), 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_data_source.get('test_tmpl').Render( 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) context, test_data_source).text) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unittest.main() 68