1b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org#!/usr/bin/env python
2b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org# Use of this source code is governed by a BSD-style license that can be
4b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org# found in the LICENSE file.
5b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
6b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org'''Unit tests for grit.format.html_inline'''
7b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
8b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
9b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgimport os
10b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgimport re
11b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgimport sys
12b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgif __name__ == '__main__':
1398b76c0017dbdc61506f146d197d594b1ce07db7joi@chromium.org  sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
14b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
15b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgimport unittest
16b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
17b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgfrom grit import util
18b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgfrom grit.format import html_inline
19b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
20b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
21b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgclass HtmlInlineUnittest(unittest.TestCase):
22b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org  '''Unit tests for HtmlInline.'''
23b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
24b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org  def testGetResourceFilenames(self):
25b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    '''Tests that all included files are returned by GetResourceFilenames.'''
26b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
27b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    files = {
28b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      'index.html': '''
29b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      <!DOCTYPE HTML>
30b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      <html>
31b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org        <head>
32b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org          <link rel="stylesheet" href="test.css">
336215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org          <link rel="stylesheet"
346215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org              href="really-long-long-long-long-long-test.css">
35b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org        </head>
36b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org        <body>
37b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org          <include src="test.html">
386215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org          <include
396215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org              src="really-long-long-long-long-long-test-file-omg-so-long.html">
40b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org        </body>
41b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      </html>
42b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      ''',
43b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
44b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      'test.html': '''
45b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      <include src="test2.html">
46b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      ''',
47b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
486215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      'really-long-long-long-long-long-test-file-omg-so-long.html': '''
496215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      <!-- This really long named resource should be included. -->
506215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      ''',
516215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org
52b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      'test2.html': '''
53b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      <!-- This second level resource should also be included. -->
54b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      ''',
55b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
56b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      'test.css': '''
57b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      .image {
58b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org        background: url('test.png');
59b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      }
60b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      ''',
61b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
626215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      'really-long-long-long-long-long-test.css': '''
636215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      a:hover {
646215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org        font-weight: bold;  /* Awesome effect is awesome! */
656215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      }
666215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org      ''',
676215f3eab1af0460ee0e83f68d37088dc5f53961joi@chromium.org
68b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      'test.png': 'PNG DATA',
69b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    }
70b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
71b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    source_resources = set()
72b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    tmp_dir = util.TempDir(files)
73b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    for filename in files:
74b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org      source_resources.add(tmp_dir.GetPath(filename))
75b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
76b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    resources = html_inline.GetResourceFilenames(tmp_dir.GetPath('index.html'))
77b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    resources.add(tmp_dir.GetPath('index.html'))
78b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    self.failUnlessEqual(resources, source_resources)
79b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org    tmp_dir.CleanUp()
80b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org
81287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org  def testCompressedJavaScript(self):
82287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    '''Tests that ".src=" doesn't treat as a tag.'''
83287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org
84287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    files = {
85287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org      'index.js': '''
86287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org      if(i<j)a.src="hoge.png";
87287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org      ''',
88287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    }
89287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org
90287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    source_resources = set()
91287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    tmp_dir = util.TempDir(files)
92287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    for filename in files:
93287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org      source_resources.add(tmp_dir.GetPath(filename))
94287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org
95287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    resources = html_inline.GetResourceFilenames(tmp_dir.GetPath('index.js'))
96287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    resources.add(tmp_dir.GetPath('index.js'))
97287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    self.failUnlessEqual(resources, source_resources)
98287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org    tmp_dir.CleanUp()
99287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org
1004e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org  def testInlineCSSImports(self):
1014e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    '''Tests that @import directives in inlined CSS files are inlined too.
1024e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    '''
1034e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
1044e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    files = {
1054e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      'index.html': '''
1064e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      <html>
1074e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      <head>
108d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <link rel="stylesheet" href="css/test.css">
1094e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      </head>
1104e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      </html>
1114e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      ''',
1124e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
113d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      'css/test.css': '''
114d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      @import url('test2.css');
1154e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      blink {
1164e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org        display: none;
1174e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      }
1184e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      ''',
1194e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
120d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      'css/test2.css': '''
1214e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      .image {
122d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org        background: url('../images/test.png');
1234e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      }
1244e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      '''.strip(),
1254e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
126d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      'images/test.png': 'PNG DATA'
1274e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    }
1284e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
1294e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    expected_inlined = '''
1304e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      <html>
1314e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      <head>
1324e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      <style>
1334e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      .image {
1344e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org        background: url('data:image/png;base64,UE5HIERBVEE=');
1354e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      }
1364e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      blink {
1374e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org        display: none;
1384e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      }
1394e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      </style>
1404e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      </head>
1414e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      </html>
1424e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org      '''
1434e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
1444e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    source_resources = set()
1454e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    tmp_dir = util.TempDir(files)
1464e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    for filename in files:
147b1fb35582c700c4ac3399526f75b3cd6d193c100joi@chromium.org      source_resources.add(tmp_dir.GetPath(util.normpath(filename)))
1484e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
1494e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    result = html_inline.DoInline(tmp_dir.GetPath('index.html'), None)
1504e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    resources = result.inlined_files
1514e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    resources.add(tmp_dir.GetPath('index.html'))
1524e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    self.failUnlessEqual(resources, source_resources)
153b1fb35582c700c4ac3399526f75b3cd6d193c100joi@chromium.org    self.failUnlessEqual(expected_inlined,
154b1fb35582c700c4ac3399526f75b3cd6d193c100joi@chromium.org                         util.FixLineEnd(result.inlined_data, '\n'))
1554e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
1564e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org    tmp_dir.CleanUp()
1574e25463b88e609e76c81b7116702b31adc5eb35fjoi@chromium.org
158d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org  def testInlineCSSLinks(self):
159d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    '''Tests that only CSS files referenced via relative URLs are inlined.'''
160d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org
161d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    files = {
162d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      'index.html': '''
163d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <html>
164d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <head>
165d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <link rel="stylesheet" href="foo.css">
166d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <link rel="stylesheet" href="chrome://resources/bar.css">
167d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      </head>
168d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      </html>
169d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      ''',
170d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org
171d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      'foo.css': '''
172d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      @import url(chrome://resources/blurp.css);
173d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      blink {
174d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org        display: none;
175d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      }
176d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      ''',
177d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    }
178d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org
179d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    expected_inlined = '''
180d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <html>
181d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <head>
182d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <style>
183d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      @import url(chrome://resources/blurp.css);
184d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      blink {
185d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org        display: none;
186d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      }
187d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      </style>
188d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      <link rel="stylesheet" href="chrome://resources/bar.css">
189d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      </head>
190d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      </html>
191d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      '''
192d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org
193d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    source_resources = set()
194d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    tmp_dir = util.TempDir(files)
195d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    for filename in files:
196d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org      source_resources.add(tmp_dir.GetPath(filename))
197d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org
198d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    result = html_inline.DoInline(tmp_dir.GetPath('index.html'), None)
199d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    resources = result.inlined_files
200d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    resources.add(tmp_dir.GetPath('index.html'))
201d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org    self.failUnlessEqual(resources, source_resources)
202b1fb35582c700c4ac3399526f75b3cd6d193c100joi@chromium.org    self.failUnlessEqual(expected_inlined,
203b1fb35582c700c4ac3399526f75b3cd6d193c100joi@chromium.org                         util.FixLineEnd(result.inlined_data, '\n'))
204d644371b95a69af0b59b8fe3c3f3cad01a3749aajoi@chromium.org
205006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org  def testFilenameVariableExpansion(self):
206006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    '''Tests that variables are expanded in filenames before inlining.'''
207006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
208006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    files = {
209006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      'index.html': '''
210006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <html>
211006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <head>
212006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <link rel="stylesheet" href="style[WHICH].css">
213006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <script src="script[WHICH].js"></script>
214006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      </head>
215006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <include src="tmpl[WHICH].html">
216006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <img src="img[WHICH].png">
217006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      </html>
218006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      ''',
219006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      'style1.css': '''h1 {}''',
220006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      'tmpl1.html': '''<h1></h1>''',
221006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      'script1.js': '''console.log('hello');''',
222006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      'img1.png': '''abc''',
223006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    }
224006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
225006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    expected_inlined = '''
226006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <html>
227006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <head>
228006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <style>h1 {}</style>
229006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <script>console.log('hello');</script>
230006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      </head>
231006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <h1></h1>
232006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      <img src="data:image/png;base64,YWJj">
233006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      </html>
234006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      '''
235006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
236006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    source_resources = set()
237006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    tmp_dir = util.TempDir(files)
238006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    for filename in files:
239006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      source_resources.add(tmp_dir.GetPath(filename))
240006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
241006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    def replacer(var, repl):
242006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org      return lambda filename: filename.replace('[%s]' % var, repl)
243006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
244006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    # Test normal inlining.
245006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    result = html_inline.DoInline(
246006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        tmp_dir.GetPath('index.html'),
247006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        None,
248006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        filename_expansion_function=replacer('WHICH', '1'))
249006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    resources = result.inlined_files
250006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    resources.add(tmp_dir.GetPath('index.html'))
251006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    self.failUnlessEqual(resources, source_resources)
252006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    self.failUnlessEqual(expected_inlined,
253006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org                         util.FixLineEnd(result.inlined_data, '\n'))
254006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
255006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    # Test names-only inlining.
256006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    result = html_inline.DoInline(
257006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        tmp_dir.GetPath('index.html'),
258006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        None,
259006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        names_only=True,
260006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org        filename_expansion_function=replacer('WHICH', '1'))
261006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    resources = result.inlined_files
262006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    resources.add(tmp_dir.GetPath('index.html'))
263006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org    self.failUnlessEqual(resources, source_resources)
264006588227ffb5ff646051dcb4f04198edcf038c9joaodasilva@chromium.org
26564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org  def testWithCloseTags(self):
26664af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    '''Tests that close tags are removed.'''
26764af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org
26864af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    files = {
26964af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'index.html': '''
27064af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <html>
27164af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <head>
27264af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <link rel="stylesheet" href="style1.css"></link>
27364af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <link rel="stylesheet" href="style2.css">
27464af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </link>
27564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <link rel="stylesheet" href="style2.css"
27664af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      >
27764af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </link>
27864af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <script src="script1.js"></script>
27964af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </head>
28064af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <include src="tmpl1.html"></include>
28164af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <include src="tmpl2.html">
28264af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </include>
28364af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <include src="tmpl2.html"
28464af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      >
28564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </include>
28664af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <img src="img1.png">
28764af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </html>
28864af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      ''',
28964af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'style1.css': '''h1 {}''',
29064af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'style2.css': '''h2 {}''',
29164af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'tmpl1.html': '''<h1></h1>''',
29264af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'tmpl2.html': '''<h2></h2>''',
29364af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'script1.js': '''console.log('hello');''',
29464af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      'img1.png': '''abc''',
29564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    }
29664af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org
29764af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    expected_inlined = '''
29864af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <html>
29964af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <head>
30064af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <style>h1 {}</style>
30164af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <style>h2 {}</style>
30264af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <style>h2 {}</style>
30364af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <script>console.log('hello');</script>
30464af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </head>
30564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <h1></h1>
30664af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <h2></h2>
30764af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <h2></h2>
30864af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      <img src="data:image/png;base64,YWJj">
30964af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      </html>
31064af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      '''
31164af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org
31264af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    source_resources = set()
31364af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    tmp_dir = util.TempDir(files)
31464af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    for filename in files:
31564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org      source_resources.add(tmp_dir.GetPath(filename))
31664af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org
31764af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    # Test normal inlining.
31864af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    result = html_inline.DoInline(
31964af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org        tmp_dir.GetPath('index.html'),
32064af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org        None)
32164af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    resources = result.inlined_files
32264af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    resources.add(tmp_dir.GetPath('index.html'))
32364af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    self.failUnlessEqual(resources, source_resources)
32464af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org    self.failUnlessEqual(expected_inlined,
32564af19a6674ed05ec49d616bc0268e25c2b17265joi@chromium.org                         util.FixLineEnd(result.inlined_data, '\n'))
326287cb84a6606e0129b6cee3588657d0fe8d0d62bjoi@chromium.org
327b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.orgif __name__ == '__main__':
328b4726940f72c78cc5b79262a17c6d7b12d9eb2a5flackr@chromium.org  unittest.main()
329