123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #!/usr/bin/env python3
- #
- # Copyright (c) 2023 Red Hat, Inc.
- #
- # SPDX-License-Identifier: MIT
- """Unit tests for xml-preprocess"""
- import contextlib
- import importlib
- import os
- import platform
- import subprocess
- import tempfile
- import unittest
- from io import StringIO
- xmlpp = importlib.import_module("xml-preprocess")
- class TestXmlPreprocess(unittest.TestCase):
- """Tests for xml-preprocess.Preprocessor"""
- def test_preprocess_xml(self):
- with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_file:
- temp_file.write("<root></root>")
- temp_file_name = temp_file.name
- result = xmlpp.preprocess_xml(temp_file_name)
- self.assertEqual(result, "<root></root>")
- os.remove(temp_file_name)
- def test_save_xml(self):
- with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_file:
- temp_file_name = temp_file.name
- xmlpp.save_xml("<root></root>", temp_file_name)
- self.assertTrue(os.path.isfile(temp_file_name))
- os.remove(temp_file_name)
- def test_include(self):
- with tempfile.NamedTemporaryFile(mode="w", delete=False) as inc_file:
- inc_file.write("<included>Content from included file</included>")
- inc_file_name = inc_file.name
- xml_str = f"<?include {inc_file_name} ?>"
- expected = "<included>Content from included file</included>"
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess(xml_str)
- self.assertEqual(result, expected)
- os.remove(inc_file_name)
- self.assertRaises(FileNotFoundError, xpp.preprocess, xml_str)
- def test_envvar(self):
- os.environ["TEST_ENV_VAR"] = "TestValue"
- xml_str = "<root>$(env.TEST_ENV_VAR)</root>"
- expected = "<root>TestValue</root>"
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess(xml_str)
- self.assertEqual(result, expected)
- self.assertRaises(KeyError, xpp.preprocess, "$(env.UNKNOWN)")
- def test_sys_var(self):
- xml_str = "<root>$(sys.ARCH)</root>"
- expected = f"<root>{platform.architecture()[0]}</root>"
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess(xml_str)
- self.assertEqual(result, expected)
- self.assertRaises(KeyError, xpp.preprocess, "$(sys.UNKNOWN)")
- def test_cus_var(self):
- xml_str = "<root>$(var.USER)</root>"
- expected = "<root></root>"
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess(xml_str)
- self.assertEqual(result, expected)
- xml_str = "<?define USER=FOO?><root>$(var.USER)</root>"
- expected = "<root>FOO</root>"
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess(xml_str)
- self.assertEqual(result, expected)
- def test_error_warning(self):
- xml_str = "<root><?warning \"test warn\"?></root>"
- expected = "<root></root>"
- xpp = xmlpp.Preprocessor()
- out = StringIO()
- with contextlib.redirect_stdout(out):
- result = xpp.preprocess(xml_str)
- self.assertEqual(result, expected)
- self.assertEqual(out.getvalue(), "[Warning]: test warn\n")
- self.assertRaises(RuntimeError, xpp.preprocess, "<?error \"test\"?>")
- def test_cmd(self):
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess('<root><?cmd "echo hello world"?></root>')
- self.assertEqual(result, "<root>hello world</root>")
- self.assertRaises(
- subprocess.CalledProcessError,
- xpp.preprocess, '<?cmd "test-unknown-cmd"?>'
- )
- def test_foreach(self):
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess(
- '<root><?foreach x in a;b;c?>$(var.x)<?endforeach?></root>'
- )
- self.assertEqual(result, "<root>abc</root>")
- def test_if_elseif(self):
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess('<root><?if True?>ok<?endif?></root>')
- self.assertEqual(result, "<root>ok</root>")
- result = xpp.preprocess('<root><?if False?>ok<?endif?></root>')
- self.assertEqual(result, "<root></root>")
- result = xpp.preprocess('<root><?if True?>ok<?else?>ko<?endif?></root>')
- self.assertEqual(result, "<root>ok</root>")
- result = xpp.preprocess('<root><?if False?>ok<?else?>ko<?endif?></root>')
- self.assertEqual(result, "<root>ko</root>")
- result = xpp.preprocess(
- '<root><?if False?>ok<?elseif True?>ok2<?else?>ko<?endif?></root>'
- )
- self.assertEqual(result, "<root>ok2</root>")
- result = xpp.preprocess(
- '<root><?if False?>ok<?elseif False?>ok<?else?>ko<?endif?></root>'
- )
- self.assertEqual(result, "<root>ko</root>")
- def test_ifdef(self):
- xpp = xmlpp.Preprocessor()
- result = xpp.preprocess('<root><?ifdef USER?>ok<?else?>ko<?endif?></root>')
- self.assertEqual(result, "<root>ko</root>")
- result = xpp.preprocess(
- '<?define USER=FOO?><root><?ifdef USER?>ok<?else?>ko<?endif?></root>'
- )
- self.assertEqual(result, "<root>ok</root>")
- if __name__ == "__main__":
- unittest.main()
|