#!/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 unittest from document_renderer import DocumentRenderer from server_instance import ServerInstance from test_file_system import TestFileSystem from test_data.canned_data import CANNED_TEST_FILE_SYSTEM_DATA class DocumentRendererUnittest(unittest.TestCase): def setUp(self): self._renderer = ServerInstance.ForTest( TestFileSystem(CANNED_TEST_FILE_SYSTEM_DATA)).document_renderer def testNothingToSubstitute(self): document = 'hello world' path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(document, text) self.assertEqual([], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual(document, text) self.assertEqual(['Expected a title'], warnings) def testTitles(self): document = '

title

then $(title) then another $(title)' path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(document, text) self.assertEqual(['Found unexpected title "title"'], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual('

title

then title then another $(title)', text) self.assertEqual([], warnings) def testTocs(self): document = ('here is a toc $(table_of_contents) ' 'and another $(table_of_contents)') expected_document = ('here is a toc and another ' '$(table_of_contents)') path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(expected_document, text) self.assertEqual([], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual(expected_document, text) self.assertEqual(['Expected a title'], warnings) def testRefs(self): # The references in this and subsequent tests won't actually be resolved document = 'A ref $(ref:baz.baz_e1) here, $(ref:foo.foo_t3 ref title) there' expected_document = ('A ref baz.baz_e1 ' 'here, ref title ' 'there') path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(expected_document, text) self.assertEqual([], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual(expected_document, text) self.assertEqual(['Expected a title'], warnings) def testTitleAndToc(self): document = '

title

$(title) and $(table_of_contents)' path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual('

title

$(title) and ', text) self.assertEqual(['Found unexpected title "title"'], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual('

title

title and ', text) self.assertEqual([], warnings) def testRefInTitle(self): document = '

$(ref:baz.baz_e1 title)

A $(title) was here' expected_document_no_title = ('

' 'title

A $(title) was here') expected_document = ('

title

' ' A title was here') path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(expected_document_no_title, text) self.assertEqual([('Found unexpected title "title"')], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual(expected_document, text) self.assertEqual([], warnings) def testRefSplitAcrossLines(self): document = 'Hello, $(ref:baz.baz_e1 world). A $(ref:foo.foo_t3\n link)' expected_document = ('Hello, world. A link') path = 'some/path/to/document.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(expected_document, text) self.assertEqual([], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual(expected_document, text) self.assertEqual(['Expected a title'], warnings) def testInvalidRef(self): # DocumentRenderer attempts to detect unclosed $(ref:...) tags by limiting # how far it looks ahead. Lorem Ipsum should be long enough to trigger that. _LOREM_IPSUM = ( 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do ' 'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ' 'ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut ' 'aliquip ex ea commodo consequat. Duis aute irure dolor in ' 'reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla ' 'pariatur. Excepteur sint occaecat cupidatat non proident, sunt in ' 'culpa qui officia deserunt mollit anim id est laborum.') document = ('An invalid $(ref:foo.foo_t3 a title ' + _LOREM_IPSUM + '$(ref:baz.baz_e1) here') expected_document = ('An invalid $(ref:foo.foo_t3 a title ' + _LOREM_IPSUM + 'baz.baz_e1 here') path = 'some/path/to/document_api.html' text, warnings = self._renderer.Render(document, path) self.assertEqual(expected_document, text) self.assertEqual([], warnings) text, warnings = self._renderer.Render(document, path, render_title=True) self.assertEqual(expected_document, text) self.assertEqual(['Expected a title'], warnings) if __name__ == '__main__': unittest.main()