diff options
-rw-r--r-- | var/spack/repos/builtin/packages/libxml2/package.py | 117 |
1 files changed, 82 insertions, 35 deletions
diff --git a/var/spack/repos/builtin/packages/libxml2/package.py b/var/spack/repos/builtin/packages/libxml2/package.py index 640988d617..bde03c534d 100644 --- a/var/spack/repos/builtin/packages/libxml2/package.py +++ b/var/spack/repos/builtin/packages/libxml2/package.py @@ -4,9 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import os -import llnl.util.filesystem as fs -import llnl.util.tty as tty - from spack.build_systems import autotools, nmake from spack.package import * @@ -101,41 +98,91 @@ class Libxml2(AutotoolsPackage, NMakePackage): ) filter_file("-Wno-long-long -Wno-format-extra-args", "", "configure") - def test(self): - """Perform smoke tests on the installed package""" - # Start with what we already have post-install - tty.msg("test: Performing simple import test") - self.builder.import_module_test() + def test_import(self): + """import module test""" + if "+python" not in self.spec: + raise SkipTest("Package must be built with +python") - data_dir = self.test_suite.current_test_data_dir + with working_dir("spack-test", create=True): + python("-c", "import libxml2") + + def test_xmlcatalog(self): + """check minimal creation output""" + path = self.prefix.bin.xmlcatalog + if not os.path.exists(path): + raise SkipTest("xmlcatalog is not installed") + + xmlcatalog = which(path) + out = xmlcatalog("--create", output=str.split, error=str.split) + + expected = [r"<catalog xmlns", r'catalog"/>'] + check_outputs(expected, out) + + def test_xml2_config(self): + """check version output""" + path = join_path(self.prefix.bin, "xml2-config") + if not os.path.exists(path): + raise SkipTest("xml2-config is not installed") + + xml2_config = which(path) + out = xml2_config("--version", output=str.split, error=str.split) + assert str(self.spec.version) in out + + def test_xmllint(self): + """run xmllint generation and validation checks""" + path = self.prefix.bin.xmllint + if not os.path.exists(path): + raise SkipTest("xmllint is not installed") - # Now run defined tests based on expected executables - dtd_path = data_dir.join("info.dtd") test_filename = "test.xml" - exec_checks = { - "xml2-config": [("--version", [str(self.spec.version)], 0)], - "xmllint": [ - (["--auto", "-o", test_filename], [], 0), - ( - ["--postvalid", test_filename], - ["validity error", "no DTD found", "does not validate"], - 3, - ), - ( - ["--dtdvalid", dtd_path, test_filename], - ["validity error", "does not follow the DTD"], - 3, - ), - (["--dtdvalid", dtd_path, data_dir.join("info.xml")], [], 0), - ], - "xmlcatalog": [("--create", ["<catalog xmlns", 'catalog"/>'], 0)], - } - for exe in exec_checks: - for options, expected, status in exec_checks[exe]: - self.run_test(exe, options, expected, status) - - # Perform some cleanup - fs.force_remove(test_filename) + xmllint = which(path) + + with test_part(self, "test_xmllint_auto", purpose="generate {0}".format(test_filename)): + xmllint("--auto", "-o", test_filename) + + with test_part( + self, + "test_xmllint_validate_no_dtd", + purpose="validate {0} without a DTD".format(test_filename), + ): + out = xmllint( + "--postvalid", + test_filename, + output=str.split, + error=str.split, + fail_on_error=False, + ) + + expected = [r"validity error", r"no DTD found", r"does not validate"] + check_outputs(expected, out) + + data_dir = self.test_suite.current_test_data_dir + dtd_path = data_dir.join("info.dtd") + + with test_part( + self, + "test_xmllint_validate_with_dtd", + purpose="validate {0} with a DTD".format(test_filename), + ): + out = xmllint( + "--dtdvalid", + dtd_path, + test_filename, + output=str.split, + error=str.split, + fail_on_error=False, + ) + + expected = [r"validity error", r"does not follow the DTD"] + check_outputs(expected, out) + + test_filename = data_dir.join("info.xml") + with test_part( + self, + "test_xmllint_validate_works", + purpose="validate {0} with a DTD".format(test_filename), + ): + xmllint("--dtdvalid", dtd_path, data_dir.join("info.xml")) class RunAfter(object): |