diff options
Diffstat (limited to 'catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py')
-rw-r--r-- | catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py b/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py new file mode 100644 index 00000000..1e83cb48 --- /dev/null +++ b/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py @@ -0,0 +1,89 @@ +# Copyright (c) 2014 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 os +import unittest + +from py_vulcanize import generate +from py_vulcanize import fake_fs +from py_vulcanize import project as project_module + + +class GenerateTests(unittest.TestCase): + + def setUp(self): + self.fs = fake_fs.FakeFS() + self.fs.AddFile( + '/x/foo/my_module.html', + ('<!DOCTYPE html>\n' + '<link rel="import" href="/foo/other_module.html">\n')) + self.fs.AddFile( + '/x/foo/other_module.html', + ('<!DOCTYPE html>\n' + '<script src="/foo/raw/raw_script.js"></script>\n' + '<script>\n' + ' \'use strict\';\n' + ' HelloWorld();\n' + '</script>\n')) + self.fs.AddFile('/x/foo/raw/raw_script.js', '\n/* raw script */\n') + self.fs.AddFile('/x/components/polymer/polymer.min.js', '\n') + + self.fs.AddFile('/x/foo/external_script.js', 'External()') + self.fs.AddFile('/x/foo/inline_and_external_module.html', + ('<!DOCTYPE html>\n' + '<script>Script1()</script>' + '<script src=/foo/external_script.js></script>' + '<script>Script2()</script>')) + + self.project = project_module.Project([os.path.normpath('/x')]) + + def testJSGeneration(self): + with self.fs: + load_sequence = self.project.CalcLoadSequenceForModuleNames( + [os.path.normpath('foo.my_module')]) + generate.GenerateJS(load_sequence) + + def testHTMLGeneration(self): + with self.fs: + load_sequence = self.project.CalcLoadSequenceForModuleNames( + [os.path.normpath('foo.my_module')]) + result = generate.GenerateStandaloneHTMLAsString(load_sequence) + self.assertIn('HelloWorld();', result) + + def testExtraScriptWithWriteContentsFunc(self): + with self.fs: + load_sequence = self.project.CalcLoadSequenceForModuleNames( + [os.path.normpath('foo.my_module')]) + + class ExtraScript(generate.ExtraScript): + + def WriteToFile(self, f): + f.write('<script>ExtraScript!</script>') + + result = generate.GenerateStandaloneHTMLAsString( + load_sequence, title='Title', extra_scripts=[ExtraScript()]) + self.assertIn('ExtraScript', result) + + def testScriptOrdering(self): + with self.fs: + load_sequence = self.project.CalcLoadSequenceForModuleNames( + [os.path.normpath('foo.inline_and_external_module')]) + result = generate.GenerateStandaloneHTMLAsString(load_sequence) + script1_pos = result.index('Script1()') + script2_pos = result.index('Script2()') + external_pos = result.index('External()') + self.assertTrue(script1_pos < external_pos < script2_pos) + + def testScriptOrderingWithIncludeTag(self): + with self.fs: + load_sequence = self.project.CalcLoadSequenceForModuleNames( + [os.path.normpath('foo.inline_and_external_module')]) + result = generate.GenerateJS(load_sequence, + use_include_tags_for_scripts = True, + dir_for_include_tag_root='/x/') + script1_pos = result.index('Script1()') + script2_pos = result.index('Script2()') + external_path = os.path.join('foo', 'external_script.js') + external_pos = result.index('<include src="{0}">'.format(external_path)) + self.assertTrue(script1_pos < external_pos < script2_pos) |