Index: grit/format/html_inline_unittest.py |
diff --git a/grit/format/html_inline_unittest.py b/grit/format/html_inline_unittest.py |
deleted file mode 100755 |
index ea76d3732e9f6f14d1ddc5099d59498074aa63fe..0000000000000000000000000000000000000000 |
--- a/grit/format/html_inline_unittest.py |
+++ /dev/null |
@@ -1,352 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2012 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. |
- |
-'''Unit tests for grit.format.html_inline''' |
- |
- |
-import os |
-import re |
-import sys |
-if __name__ == '__main__': |
- sys.path.append(os.path.join(os.path.dirname(__file__), '../..')) |
- |
-import unittest |
- |
-from grit import util |
-from grit.format import html_inline |
- |
- |
-class HtmlInlineUnittest(unittest.TestCase): |
- '''Unit tests for HtmlInline.''' |
- |
- def testGetResourceFilenames(self): |
- '''Tests that all included files are returned by GetResourceFilenames.''' |
- |
- files = { |
- 'index.html': ''' |
- <!DOCTYPE HTML> |
- <html> |
- <head> |
- <link rel="stylesheet" href="test.css"> |
- <link rel="stylesheet" |
- href="really-long-long-long-long-long-test.css"> |
- </head> |
- <body> |
- <include src="test.html"> |
- <include |
- src="really-long-long-long-long-long-test-file-omg-so-long.html"> |
- <iron-icon src="[[icon]]"></iron-icon><!-- Should be ignored. --> |
- <iron-icon src="{{src}}"></iron-icon><!-- Also ignored. --> |
- </body> |
- </html> |
- ''', |
- |
- 'test.html': ''' |
- <include src="test2.html"> |
- ''', |
- |
- 'really-long-long-long-long-long-test-file-omg-so-long.html': ''' |
- <!-- This really long named resource should be included. --> |
- ''', |
- |
- 'test2.html': ''' |
- <!-- This second level resource should also be included. --> |
- ''', |
- |
- 'test.css': ''' |
- .image { |
- background: url('test.png'); |
- } |
- ''', |
- |
- 'really-long-long-long-long-long-test.css': ''' |
- a:hover { |
- font-weight: bold; /* Awesome effect is awesome! */ |
- } |
- ''', |
- |
- 'test.png': 'PNG DATA', |
- } |
- |
- source_resources = set() |
- tmp_dir = util.TempDir(files) |
- for filename in files: |
- source_resources.add(tmp_dir.GetPath(filename)) |
- |
- resources = html_inline.GetResourceFilenames(tmp_dir.GetPath('index.html')) |
- resources.add(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(resources, source_resources) |
- tmp_dir.CleanUp() |
- |
- def testUnmatchedEndIfBlock(self): |
- '''Tests that an unmatched </if> raises an exception.''' |
- |
- files = { |
- 'index.html': ''' |
- <!DOCTYPE HTML> |
- <html> |
- <if expr="lang == 'fr'"> |
- bonjour |
- </if> |
- </if> |
- </html> |
- ''', |
- } |
- |
- tmp_dir = util.TempDir(files) |
- |
- with self.assertRaises(Exception) as cm: |
- html_inline.GetResourceFilenames(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(cm.exception.message, 'Unmatched </if>') |
- tmp_dir.CleanUp() |
- |
- def testCompressedJavaScript(self): |
- '''Tests that ".src=" doesn't treat as a tag.''' |
- |
- files = { |
- 'index.js': ''' |
- if(i<j)a.src="hoge.png"; |
- ''', |
- } |
- |
- source_resources = set() |
- tmp_dir = util.TempDir(files) |
- for filename in files: |
- source_resources.add(tmp_dir.GetPath(filename)) |
- |
- resources = html_inline.GetResourceFilenames(tmp_dir.GetPath('index.js')) |
- resources.add(tmp_dir.GetPath('index.js')) |
- self.failUnlessEqual(resources, source_resources) |
- tmp_dir.CleanUp() |
- |
- def testInlineCSSImports(self): |
- '''Tests that @import directives in inlined CSS files are inlined too. |
- ''' |
- |
- files = { |
- 'index.html': ''' |
- <html> |
- <head> |
- <link rel="stylesheet" href="css/test.css"> |
- </head> |
- </html> |
- ''', |
- |
- 'css/test.css': ''' |
- @import url('test2.css'); |
- blink { |
- display: none; |
- } |
- ''', |
- |
- 'css/test2.css': ''' |
- .image { |
- background: url('../images/test.png'); |
- } |
- '''.strip(), |
- |
- 'images/test.png': 'PNG DATA' |
- } |
- |
- expected_inlined = ''' |
- <html> |
- <head> |
- <style> |
- .image { |
- background: url('data:image/png;base64,UE5HIERBVEE='); |
- } |
- blink { |
- display: none; |
- } |
- </style> |
- </head> |
- </html> |
- ''' |
- |
- source_resources = set() |
- tmp_dir = util.TempDir(files) |
- for filename in files: |
- source_resources.add(tmp_dir.GetPath(util.normpath(filename))) |
- |
- result = html_inline.DoInline(tmp_dir.GetPath('index.html'), None) |
- resources = result.inlined_files |
- resources.add(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(resources, source_resources) |
- self.failUnlessEqual(expected_inlined, |
- util.FixLineEnd(result.inlined_data, '\n')) |
- |
- tmp_dir.CleanUp() |
- |
- def testInlineCSSLinks(self): |
- '''Tests that only CSS files referenced via relative URLs are inlined.''' |
- |
- files = { |
- 'index.html': ''' |
- <html> |
- <head> |
- <link rel="stylesheet" href="foo.css"> |
- <link rel="stylesheet" href="chrome://resources/bar.css"> |
- </head> |
- </html> |
- ''', |
- |
- 'foo.css': ''' |
- @import url(chrome://resources/blurp.css); |
- blink { |
- display: none; |
- } |
- ''', |
- } |
- |
- expected_inlined = ''' |
- <html> |
- <head> |
- <style> |
- @import url(chrome://resources/blurp.css); |
- blink { |
- display: none; |
- } |
- </style> |
- <link rel="stylesheet" href="chrome://resources/bar.css"> |
- </head> |
- </html> |
- ''' |
- |
- source_resources = set() |
- tmp_dir = util.TempDir(files) |
- for filename in files: |
- source_resources.add(tmp_dir.GetPath(filename)) |
- |
- result = html_inline.DoInline(tmp_dir.GetPath('index.html'), None) |
- resources = result.inlined_files |
- resources.add(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(resources, source_resources) |
- self.failUnlessEqual(expected_inlined, |
- util.FixLineEnd(result.inlined_data, '\n')) |
- |
- def testFilenameVariableExpansion(self): |
- '''Tests that variables are expanded in filenames before inlining.''' |
- |
- files = { |
- 'index.html': ''' |
- <html> |
- <head> |
- <link rel="stylesheet" href="style[WHICH].css"> |
- <script src="script[WHICH].js"></script> |
- </head> |
- <include src="tmpl[WHICH].html"> |
- <img src="img[WHICH].png"> |
- </html> |
- ''', |
- 'style1.css': '''h1 {}''', |
- 'tmpl1.html': '''<h1></h1>''', |
- 'script1.js': '''console.log('hello');''', |
- 'img1.png': '''abc''', |
- } |
- |
- expected_inlined = ''' |
- <html> |
- <head> |
- <style>h1 {}</style> |
- <script>console.log('hello');</script> |
- </head> |
- <h1></h1> |
- <img src="data:image/png;base64,YWJj"> |
- </html> |
- ''' |
- |
- source_resources = set() |
- tmp_dir = util.TempDir(files) |
- for filename in files: |
- source_resources.add(tmp_dir.GetPath(filename)) |
- |
- def replacer(var, repl): |
- return lambda filename: filename.replace('[%s]' % var, repl) |
- |
- # Test normal inlining. |
- result = html_inline.DoInline( |
- tmp_dir.GetPath('index.html'), |
- None, |
- filename_expansion_function=replacer('WHICH', '1')) |
- resources = result.inlined_files |
- resources.add(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(resources, source_resources) |
- self.failUnlessEqual(expected_inlined, |
- util.FixLineEnd(result.inlined_data, '\n')) |
- |
- # Test names-only inlining. |
- result = html_inline.DoInline( |
- tmp_dir.GetPath('index.html'), |
- None, |
- names_only=True, |
- filename_expansion_function=replacer('WHICH', '1')) |
- resources = result.inlined_files |
- resources.add(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(resources, source_resources) |
- |
- def testWithCloseTags(self): |
- '''Tests that close tags are removed.''' |
- |
- files = { |
- 'index.html': ''' |
- <html> |
- <head> |
- <link rel="stylesheet" href="style1.css"></link> |
- <link rel="stylesheet" href="style2.css"> |
- </link> |
- <link rel="stylesheet" href="style2.css" |
- > |
- </link> |
- <script src="script1.js"></script> |
- </head> |
- <include src="tmpl1.html"></include> |
- <include src="tmpl2.html"> |
- </include> |
- <include src="tmpl2.html" |
- > |
- </include> |
- <img src="img1.png"> |
- </html> |
- ''', |
- 'style1.css': '''h1 {}''', |
- 'style2.css': '''h2 {}''', |
- 'tmpl1.html': '''<h1></h1>''', |
- 'tmpl2.html': '''<h2></h2>''', |
- 'script1.js': '''console.log('hello');''', |
- 'img1.png': '''abc''', |
- } |
- |
- expected_inlined = ''' |
- <html> |
- <head> |
- <style>h1 {}</style> |
- <style>h2 {}</style> |
- <style>h2 {}</style> |
- <script>console.log('hello');</script> |
- </head> |
- <h1></h1> |
- <h2></h2> |
- <h2></h2> |
- <img src="data:image/png;base64,YWJj"> |
- </html> |
- ''' |
- |
- source_resources = set() |
- tmp_dir = util.TempDir(files) |
- for filename in files: |
- source_resources.add(tmp_dir.GetPath(filename)) |
- |
- # Test normal inlining. |
- result = html_inline.DoInline( |
- tmp_dir.GetPath('index.html'), |
- None) |
- resources = result.inlined_files |
- resources.add(tmp_dir.GetPath('index.html')) |
- self.failUnlessEqual(resources, source_resources) |
- self.failUnlessEqual(expected_inlined, |
- util.FixLineEnd(result.inlined_data, '\n')) |
- |
-if __name__ == '__main__': |
- unittest.main() |