# 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', ('\n' '\n')) self.fs.AddFile( '/x/foo/other_module.html', ('\n' '\n' '\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', ('\n' '' '' '')) 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('') 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(''.format(external_path)) self.assertTrue(script1_pos < external_pos < script2_pos)