Home | History | Annotate | Download | only in py_vulcanize
      1 # Copyright (c) 2014 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import os
      6 import unittest
      7 
      8 from py_vulcanize import generate
      9 from py_vulcanize import fake_fs
     10 from py_vulcanize import project as project_module
     11 
     12 
     13 class GenerateTests(unittest.TestCase):
     14 
     15   def setUp(self):
     16     self.fs = fake_fs.FakeFS()
     17     self.fs.AddFile(
     18         '/x/foo/my_module.html',
     19         ('<!DOCTYPE html>\n'
     20          '<link rel="import" href="/foo/other_module.html">\n'))
     21     self.fs.AddFile(
     22         '/x/foo/other_module.html',
     23         ('<!DOCTYPE html>\n'
     24          '<script src="/foo/raw/raw_script.js"></script>\n'
     25          '<script>\n'
     26          '  \'use strict\';\n'
     27          '  HelloWorld();\n'
     28          '</script>\n'))
     29     self.fs.AddFile('/x/foo/raw/raw_script.js', '\n/* raw script */\n')
     30     self.fs.AddFile('/x/components/polymer/polymer.min.js', '\n')
     31 
     32     self.project = project_module.Project([os.path.normpath('/x')])
     33 
     34   def testJSGeneration(self):
     35     with self.fs:
     36       load_sequence = self.project.CalcLoadSequenceForModuleNames(
     37           [os.path.normpath('foo.my_module')])
     38       generate.GenerateJS(load_sequence)
     39 
     40   def testHTMLGeneration(self):
     41     with self.fs:
     42       load_sequence = self.project.CalcLoadSequenceForModuleNames(
     43           [os.path.normpath('foo.my_module')])
     44       result = generate.GenerateStandaloneHTMLAsString(load_sequence)
     45       self.assertIn('HelloWorld();', result)
     46 
     47   def testExtraScriptWithWriteContentsFunc(self):
     48     with self.fs:
     49       load_sequence = self.project.CalcLoadSequenceForModuleNames(
     50           [os.path.normpath('foo.my_module')])
     51 
     52       class ExtraScript(generate.ExtraScript):
     53 
     54         def WriteToFile(self, f):
     55           f.write('<script>ExtraScript!</script>')
     56 
     57       result = generate.GenerateStandaloneHTMLAsString(
     58           load_sequence, title='Title', extra_scripts=[ExtraScript()])
     59       self.assertIn('ExtraScript', result)
     60