| #!/usr/bin/env python |
| # Copyright 2017 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 optimize_webui |
| import os |
| import shutil |
| import tempfile |
| import unittest |
| |
| |
| _HERE_DIR = os.path.dirname(__file__) |
| |
| |
| class OptimizeWebUiTest(unittest.TestCase): |
| def setUp(self): |
| self._out_folder = None |
| self._tmp_dirs = [] |
| self._tmp_src_dir = None |
| |
| def tearDown(self): |
| for tmp_dir in self._tmp_dirs: |
| shutil.rmtree(tmp_dir) |
| |
| def _write_file_to_src_dir(self, file_path, file_contents): |
| if not self._tmp_src_dir: |
| self._tmp_src_dir = self._create_tmp_dir() |
| file_path_normalized = os.path.normpath(os.path.join(self._tmp_src_dir, |
| file_path)) |
| file_dir = os.path.dirname(file_path_normalized) |
| if not os.path.exists(file_dir): |
| os.makedirs(file_dir) |
| with open(file_path_normalized, 'w') as tmp_file: |
| tmp_file.write(file_contents) |
| |
| def _create_tmp_dir(self): |
| # TODO(dbeam): support cross-drive paths (i.e. d:\ vs c:\). |
| tmp_dir = tempfile.mkdtemp(dir=_HERE_DIR) |
| self._tmp_dirs.append(tmp_dir) |
| return tmp_dir |
| |
| def _read_out_file(self, file_name): |
| assert self._out_folder |
| return open(os.path.join(self._out_folder, file_name), 'r').read() |
| |
| def _run_optimize(self, depfile, html_in_file, html_out_file, |
| html_out_file_polymer2, js_out_file): |
| # TODO(dbeam): make it possible to _run_optimize twice? Is that useful? |
| assert not self._out_folder |
| self._out_folder = self._create_tmp_dir() |
| optimize_webui.main([ |
| '--depfile', os.path.join(self._out_folder,'depfile.d'), |
| '--html_in_files', html_in_file, |
| '--html_out_files', html_out_file, |
| '--html_out_files_polymer2', html_out_file_polymer2, |
| '--host', 'fake-host', |
| '--input', self._tmp_src_dir, |
| '--js_out_files', js_out_file, |
| '--out_folder', self._out_folder, |
| ]) |
| |
| |
| def testSimpleOptimize(self): |
| self._write_file_to_src_dir('element.html', '<div>got here!</div>') |
| self._write_file_to_src_dir('element.js', "alert('yay');") |
| self._write_file_to_src_dir('element_in_dir/element_in_dir.html', |
| '<script src="element_in_dir.js">') |
| self._write_file_to_src_dir('element_in_dir/element_in_dir.js', |
| "alert('hello from element_in_dir');") |
| self._write_file_to_src_dir('ui.html', ''' |
| <link rel="import" href="element.html"> |
| <link rel="import" href="element_in_dir/element_in_dir.html"> |
| <script src="element.js"></script> |
| ''') |
| |
| self._run_optimize(depfile='depfile.d', |
| html_in_file='ui.html', |
| html_out_file='fast.html', |
| html_out_file_polymer2='fast.p2.html', |
| js_out_file='fast.js') |
| |
| fast_html = self._read_out_file('fast.html') |
| self.assertNotIn('element.html', fast_html) |
| self.assertNotIn('element.js', fast_html) |
| self.assertNotIn('element_in_dir.html', fast_html) |
| self.assertNotIn('element_in_dir.js', fast_html) |
| self.assertIn('got here!', fast_html) |
| self.assertIn('<script src="fast.js"></script>', fast_html) |
| |
| fast_js = self._read_out_file('fast.js') |
| self.assertIn('yay', fast_js) |
| self.assertIn('hello from element_in_dir', fast_js) |
| |
| depfile_d = self._read_out_file('depfile.d') |
| self.assertIn('element.html', depfile_d) |
| self.assertIn('element.js', depfile_d) |
| self.assertIn(os.path.normpath('element_in_dir/element_in_dir.html'), |
| depfile_d) |
| self.assertIn(os.path.normpath('element_in_dir/element_in_dir.js'), |
| depfile_d) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |