summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/test/action/test_html_fragment_preprocessor.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/test/action/test_html_fragment_preprocessor.py')
-rw-r--r--python/mozbuild/mozbuild/test/action/test_html_fragment_preprocessor.py196
1 files changed, 196 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/action/test_html_fragment_preprocessor.py b/python/mozbuild/mozbuild/test/action/test_html_fragment_preprocessor.py
new file mode 100644
index 0000000000..3cce1c5f94
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/action/test_html_fragment_preprocessor.py
@@ -0,0 +1,196 @@
+import os
+import unittest
+import xml.etree.ElementTree as ET
+
+import mozpack.path as mozpath
+import mozunit
+
+from mozbuild.action.html_fragment_preprocesor import (
+ fill_html_fragments_map,
+ generate,
+ get_fragment_key,
+ get_html_fragments_from_file,
+)
+
+test_data_path = mozpath.abspath(mozpath.dirname(__file__))
+test_data_path = mozpath.join(test_data_path, "data", "html_fragment_preprocesor")
+
+
+def data(name):
+ return os.path.join(test_data_path, name)
+
+
+TEST_PATH = "/some/path/somewhere/example.xml".replace("/", os.sep)
+EXAMPLE_BASIC = data("example_basic.xml")
+EXAMPLE_TEMPLATES = data("example_multiple_templates.xml")
+EXAMPLE_XUL = data("example_xul.xml")
+DUMMY_FILE = data("dummy.js")
+
+
+class TestNode(unittest.TestCase):
+ """
+ Tests for html_fragment_preprocesor.py.
+ """
+
+ maxDiff = None
+
+ def assertXMLEqual(self, a, b, message):
+ aRoot = ET.fromstring(a)
+ bRoot = ET.fromstring(b)
+ self.assertXMLNodesEqual(aRoot, bRoot, message)
+
+ def assertXMLNodesEqual(self, a, b, message, xpath=""):
+ xpath += "/" + a.tag
+ messageWithPath = message + " at " + xpath
+ self.assertEqual(a.tag, b.tag, messageWithPath + " tag name")
+ self.assertEqual(a.text, b.text, messageWithPath + " text")
+ self.assertEqual(
+ a.attrib.keys(), b.attrib.keys(), messageWithPath + " attribute names"
+ )
+ for aKey, aValue in a.attrib.items():
+ self.assertEqual(
+ aValue,
+ b.attrib[aKey],
+ messageWithPath + "[@" + aKey + "] attribute value",
+ )
+ for aChild, bChild in zip(a, b):
+ self.assertXMLNodesEqual(aChild, bChild, message, xpath)
+
+ def test_get_fragment_key_path(self):
+ key = get_fragment_key("/some/path/somewhere/example.xml")
+ self.assertEqual(key, "example")
+
+ def test_get_fragment_key_with_named_template(self):
+ key = get_fragment_key(TEST_PATH, "some-template")
+ self.assertEqual(key, "example/some-template")
+
+ def test_get_html_fragments_from_template_no_doctype_no_name(self):
+ key = "example"
+ fragment_map = {}
+ template = ET.Element("template")
+ p1 = ET.SubElement(template, "p")
+ p1.text = "Hello World"
+ p2 = ET.SubElement(template, "p")
+ p2.text = "Goodbye"
+ fill_html_fragments_map(fragment_map, TEST_PATH, template)
+ self.assertEqual(fragment_map[key], "<p>Hello World</p><p>Goodbye</p>")
+
+ def test_get_html_fragments_from_named_template_with_html_element(self):
+ key = "example/some-template"
+ fragment_map = {}
+ template = ET.Element("template")
+ template.attrib["name"] = "some-template"
+ p = ET.SubElement(template, "p")
+ p.text = "Hello World"
+ fill_html_fragments_map(fragment_map, TEST_PATH, template)
+ self.assertEqual(fragment_map[key], "<p>Hello World</p>")
+
+ def test_get_html_fragments_from_template_with_doctype(self):
+ key = "example"
+ doctype = "doctype definition goes here"
+ fragment_map = {}
+ template = ET.Element("template")
+ p = ET.SubElement(template, "p")
+ p.text = "Hello World"
+ fill_html_fragments_map(fragment_map, TEST_PATH, template, doctype)
+ self.assertEqual(
+ fragment_map[key], "doctype definition goes here\n<p>Hello World</p>"
+ )
+
+ def test_get_html_fragments_from_file_basic(self):
+ key = "example_basic"
+ fragment_map = {}
+ get_html_fragments_from_file(fragment_map, EXAMPLE_BASIC)
+ self.assertEqual(
+ fragment_map[key],
+ '<div xmlns="http://www.w3.org/1999/xhtml" class="main">'
+ + " <p>Hello World</p> </div>",
+ )
+
+ def test_get_html_fragments_from_file_multiple_templates(self):
+ key1 = "example_multiple_templates/alpha"
+ key2 = "example_multiple_templates/beta"
+ key3 = "example_multiple_templates/charlie"
+ fragment_map = {}
+ get_html_fragments_from_file(fragment_map, EXAMPLE_TEMPLATES)
+ self.assertIn("<p>Hello World</p>", fragment_map[key1], "Has HTML content")
+ self.assertIn(
+ '<!ENTITY % exampleDTD SYSTEM "chrome://global/locale/example.dtd">',
+ fragment_map[key1],
+ "Has doctype",
+ )
+ self.assertIn("<p>Lorem ipsum", fragment_map[key2], "Has HTML content")
+ self.assertIn(
+ '<!ENTITY % exampleDTD SYSTEM "chrome://global/locale/example.dtd">',
+ fragment_map[key2],
+ "Has doctype",
+ )
+ self.assertIn("<p>Goodbye</p>", fragment_map[key3], "Has HTML content")
+ self.assertIn(
+ '<!ENTITY % exampleDTD SYSTEM "chrome://global/locale/example.dtd">',
+ fragment_map[key3],
+ "Has doctype",
+ )
+
+ def test_get_html_fragments_from_file_with_xul(self):
+ key = "example_xul"
+ fragment_map = {}
+ get_html_fragments_from_file(fragment_map, EXAMPLE_XUL)
+ xml = "<root>" + fragment_map[key] + "</root>"
+ self.assertXMLEqual(
+ xml,
+ "<root>"
+ + '<html:link xmlns:html="http://www.w3.org/1999/xhtml" '
+ + 'href="chrome://global/skin/example.css" rel="stylesheet">'
+ + "</html:link> "
+ + '<hbox xmlns="http://www.mozilla.org/keymaster/'
+ + 'gatekeeper/there.is.only.xul" flex="1" id="label-box" '
+ + 'part="label-box" role="none"> '
+ + '<image part="icon" role="none"></image> '
+ + '<label crop="end" flex="1" id="label" part="label" '
+ + 'role="none"></label> '
+ + '<label crop="end" flex="1" id="highlightable-label" '
+ + 'part="label" role="none"></label> '
+ + "</hbox> "
+ + '<html:slot xmlns:html="http://www.w3.org/1999/xhtml">'
+ + "</html:slot></root>",
+ "XML values must match",
+ )
+
+ def test_generate(self):
+ with open(DUMMY_FILE, "w") as file:
+ deps = generate(
+ file,
+ EXAMPLE_BASIC,
+ EXAMPLE_TEMPLATES,
+ EXAMPLE_XUL,
+ )
+ with open(DUMMY_FILE, "r") as file:
+ contents = file.read()
+ self.assertIn(
+ "<!ENTITY % exampleDTD SYSTEM",
+ contents,
+ "Has doctype",
+ )
+ self.assertIn("<p>Lorem ipsum", contents, "Has HTML content")
+ self.assertIn('"example_basic"', contents, "Has basic fragment key")
+ self.assertIn(
+ '"example_multiple_templates/alpha"',
+ contents,
+ "Has multiple templates fragment key",
+ )
+ self.assertIn('"example_xul"', contents, "Has XUL fragment key")
+ self.assertIn(
+ "const getHTMLFragment =",
+ contents,
+ "Has fragment loader method declaration",
+ )
+ os.remove(DUMMY_FILE)
+ self.assertEqual(len(deps), 3, "deps are correct")
+ self.assertIn(EXAMPLE_BASIC, deps, "deps are correct")
+ self.assertIn(EXAMPLE_TEMPLATES, deps, "deps are correct")
+ self.assertIn(EXAMPLE_XUL, deps, "deps are correct")
+
+
+if __name__ == "__main__":
+ mozunit.main()