aboutsummaryrefslogtreecommitdiff
path: root/catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py')
-rw-r--r--catapult/common/py_vulcanize/py_vulcanize/generate_unittest.py89
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)