Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Unified Diff: tools/grit/grit/format/html_inline_unittest.py

Issue 1410853008: Move grit from DEPS into src. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: webview licenses Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/grit/grit/format/html_inline.py ('k') | tools/grit/grit/format/js_map_format.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/grit/grit/format/html_inline_unittest.py
diff --git a/tools/grit/grit/format/html_inline_unittest.py b/tools/grit/grit/format/html_inline_unittest.py
new file mode 100755
index 0000000000000000000000000000000000000000..ea76d3732e9f6f14d1ddc5099d59498074aa63fe
--- /dev/null
+++ b/tools/grit/grit/format/html_inline_unittest.py
@@ -0,0 +1,352 @@
+#!/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()
« no previous file with comments | « tools/grit/grit/format/html_inline.py ('k') | tools/grit/grit/format/js_map_format.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698