Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / document_renderer_test.py
1 #!/usr/bin/env python
2 # Copyright 2013 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
6 import unittest
7
8 from document_renderer import DocumentRenderer
9 from server_instance import ServerInstance
10 from test_file_system import TestFileSystem
11 from test_data.canned_data import CANNED_TEST_FILE_SYSTEM_DATA
12
13
14 class DocumentRendererUnittest(unittest.TestCase):
15   def setUp(self):
16     self._renderer = ServerInstance.ForTest(
17         TestFileSystem(CANNED_TEST_FILE_SYSTEM_DATA)).document_renderer
18     self._path = 'apps/some/path/to/document.html'
19
20   def _Render(self, document, render_title=False):
21     return self._renderer.Render(document,
22                                  self._path,
23                                  render_title=render_title)
24
25   def testNothingToSubstitute(self):
26     document = 'hello world'
27
28     text, warnings = self._Render(document)
29     self.assertEqual(document, text)
30     self.assertEqual([], warnings)
31
32     text, warnings = self._Render(document, render_title=True)
33     self.assertEqual(document, text)
34     self.assertEqual(['Expected a title'], warnings)
35
36   def testTitles(self):
37     document = '<h1>title</h1> then $(title) then another $(title)'
38
39     text, warnings = self._Render(document)
40     self.assertEqual(document, text)
41     self.assertEqual(['Found unexpected title "title"'], warnings)
42
43     text, warnings = self._Render(document, render_title=True)
44     self.assertEqual('<h1>title</h1> then title then another $(title)', text)
45     self.assertEqual([], warnings)
46
47   def testTocs(self):
48     document = ('here is a toc $(table_of_contents) '
49                 'and another $(table_of_contents)')
50     expected_document = ('here is a toc <table-of-contents> and another '
51                          '$(table_of_contents)')
52
53     text, warnings = self._Render(document)
54     self.assertEqual(expected_document, text)
55     self.assertEqual([], warnings)
56
57     text, warnings = self._Render(document, render_title=True)
58     self.assertEqual(expected_document, text)
59     self.assertEqual(['Expected a title'], warnings)
60
61   def testRefs(self):
62     # The references in this and subsequent tests won't actually be resolved
63     document = 'A ref $(ref:baz.baz_e1) here, $(ref:foo.foo_t3 ref title) there'
64     expected_document = ''.join([
65       'A ref <a href=/apps/#type-baz_e1>baz.baz_e1</a> here, ',
66       '<a href=/apps/#type-foo_t3>ref title</a> there'
67     ])
68
69     text, warnings = self._Render(document)
70     self.assertEqual(expected_document, text)
71     self.assertEqual([], warnings)
72
73     text, warnings = self._Render(document, render_title=True)
74     self.assertEqual(expected_document, text)
75     self.assertEqual(['Expected a title'], warnings)
76
77   def testTitleAndToc(self):
78     document = '<h1>title</h1> $(title) and $(table_of_contents)'
79
80     text, warnings = self._Render(document)
81     self.assertEqual('<h1>title</h1> $(title) and <table-of-contents>', text)
82     self.assertEqual(['Found unexpected title "title"'], warnings)
83
84     text, warnings = self._Render(document, render_title=True)
85     self.assertEqual('<h1>title</h1> title and <table-of-contents>', text)
86     self.assertEqual([], warnings)
87
88   def testRefInTitle(self):
89     document = '<h1>$(ref:baz.baz_e1 title)</h1> A $(title) was here'
90     href = '/apps/#type-baz_e1'
91     expected_document_no_title = ''.join([
92       '<h1><a href=%s>title</a></h1> A $(title) was here' % href
93     ])
94
95     expected_document = ''.join([
96       '<h1><a href=%s>title</a></h1> A title was here' % href
97     ])
98
99     text, warnings = self._Render(document)
100     self.assertEqual(expected_document_no_title, text)
101     self.assertEqual([('Found unexpected title "title"')], warnings)
102
103     text, warnings = self._Render(document, render_title=True)
104     self.assertEqual(expected_document, text)
105     self.assertEqual([], warnings)
106
107   def testRefSplitAcrossLines(self):
108     document = 'Hello, $(ref:baz.baz_e1 world). A $(ref:foo.foo_t3\n link)'
109     expected_document = ''.join([
110       'Hello, <a href=/apps/#type-baz_e1>world</a>. ',
111       'A <a href=/apps/#type-foo_t3>link</a>'
112     ])
113
114
115     text, warnings = self._Render(document)
116     self.assertEqual(expected_document, text)
117     self.assertEqual([], warnings)
118
119     text, warnings = self._Render(document, render_title=True)
120     self.assertEqual(expected_document, text)
121     self.assertEqual(['Expected a title'], warnings)
122
123   def testInvalidRef(self):
124     # DocumentRenderer attempts to detect unclosed $(ref:...) tags by limiting
125     # how far it looks ahead. Lorem Ipsum should be long enough to trigger that.
126     _LOREM_IPSUM = (
127         'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do '
128         'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim '
129         'ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut '
130         'aliquip ex ea commodo consequat. Duis aute irure dolor in '
131         'reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla '
132         'pariatur. Excepteur sint occaecat cupidatat non proident, sunt in '
133         'culpa qui officia deserunt mollit anim id est laborum.')
134     document = ''.join([
135       'An invalid $(ref:foo.foo_t3 a title ',
136       _LOREM_IPSUM,
137      '$(ref:baz.baz_e1) here'
138     ])
139     expected_document = ''.join([
140       'An invalid $(ref:foo.foo_t3 a title ',
141       _LOREM_IPSUM,
142       '<a href=/apps/#type-baz_e1>baz.baz_e1</a> here'
143     ])
144
145     text, warnings = self._Render(document)
146     self.assertEqual(expected_document, text)
147     self.assertEqual([], warnings)
148
149     text, warnings = self._Render(document, render_title=True)
150     self.assertEqual(expected_document, text)
151     self.assertEqual(['Expected a title'], warnings)
152
153
154 if __name__ == '__main__':
155   unittest.main()