blob: 1e83cb48c2183ee710db239e1b12112ca68c5b14 [file] [log] [blame]
# 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)