OSDN Git Service

target/hppa: Remove get_temp_tl
[qmiga/qemu.git] / scripts / xml-preprocess-test.py
1 #!/usr/bin/env python3
2 #
3 # Copyright (c) 2023 Red Hat, Inc.
4 #
5 # SPDX-License-Identifier: MIT
6 """Unit tests for xml-preprocess"""
7
8 import contextlib
9 import importlib
10 import os
11 import platform
12 import subprocess
13 import tempfile
14 import unittest
15 from io import StringIO
16
17 xmlpp = importlib.import_module("xml-preprocess")
18
19
20 class TestXmlPreprocess(unittest.TestCase):
21     """Tests for xml-preprocess.Preprocessor"""
22
23     def test_preprocess_xml(self):
24         with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_file:
25             temp_file.write("<root></root>")
26             temp_file_name = temp_file.name
27         result = xmlpp.preprocess_xml(temp_file_name)
28         self.assertEqual(result, "<root></root>")
29         os.remove(temp_file_name)
30
31     def test_save_xml(self):
32         with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_file:
33             temp_file_name = temp_file.name
34             xmlpp.save_xml("<root></root>", temp_file_name)
35         self.assertTrue(os.path.isfile(temp_file_name))
36         os.remove(temp_file_name)
37
38     def test_include(self):
39         with tempfile.NamedTemporaryFile(mode="w", delete=False) as inc_file:
40             inc_file.write("<included>Content from included file</included>")
41             inc_file_name = inc_file.name
42         xml_str = f"<?include {inc_file_name} ?>"
43         expected = "<included>Content from included file</included>"
44         xpp = xmlpp.Preprocessor()
45         result = xpp.preprocess(xml_str)
46         self.assertEqual(result, expected)
47         os.remove(inc_file_name)
48         self.assertRaises(FileNotFoundError, xpp.preprocess, xml_str)
49
50     def test_envvar(self):
51         os.environ["TEST_ENV_VAR"] = "TestValue"
52         xml_str = "<root>$(env.TEST_ENV_VAR)</root>"
53         expected = "<root>TestValue</root>"
54         xpp = xmlpp.Preprocessor()
55         result = xpp.preprocess(xml_str)
56         self.assertEqual(result, expected)
57         self.assertRaises(KeyError, xpp.preprocess, "$(env.UNKNOWN)")
58
59     def test_sys_var(self):
60         xml_str = "<root>$(sys.ARCH)</root>"
61         expected = f"<root>{platform.architecture()[0]}</root>"
62         xpp = xmlpp.Preprocessor()
63         result = xpp.preprocess(xml_str)
64         self.assertEqual(result, expected)
65         self.assertRaises(KeyError, xpp.preprocess, "$(sys.UNKNOWN)")
66
67     def test_cus_var(self):
68         xml_str = "<root>$(var.USER)</root>"
69         expected = "<root></root>"
70         xpp = xmlpp.Preprocessor()
71         result = xpp.preprocess(xml_str)
72         self.assertEqual(result, expected)
73         xml_str = "<?define USER=FOO?><root>$(var.USER)</root>"
74         expected = "<root>FOO</root>"
75         xpp = xmlpp.Preprocessor()
76         result = xpp.preprocess(xml_str)
77         self.assertEqual(result, expected)
78
79     def test_error_warning(self):
80         xml_str = "<root><?warning \"test warn\"?></root>"
81         expected = "<root></root>"
82         xpp = xmlpp.Preprocessor()
83         out = StringIO()
84         with contextlib.redirect_stdout(out):
85             result = xpp.preprocess(xml_str)
86         self.assertEqual(result, expected)
87         self.assertEqual(out.getvalue(), "[Warning]: test warn\n")
88         self.assertRaises(RuntimeError, xpp.preprocess, "<?error \"test\"?>")
89
90     def test_cmd(self):
91         xpp = xmlpp.Preprocessor()
92         result = xpp.preprocess('<root><?cmd "echo hello world"?></root>')
93         self.assertEqual(result, "<root>hello world</root>")
94         self.assertRaises(
95             subprocess.CalledProcessError,
96             xpp.preprocess, '<?cmd "test-unknown-cmd"?>'
97         )
98
99     def test_foreach(self):
100         xpp = xmlpp.Preprocessor()
101         result = xpp.preprocess(
102             '<root><?foreach x in a;b;c?>$(var.x)<?endforeach?></root>'
103         )
104         self.assertEqual(result, "<root>abc</root>")
105
106     def test_if_elseif(self):
107         xpp = xmlpp.Preprocessor()
108         result = xpp.preprocess('<root><?if True?>ok<?endif?></root>')
109         self.assertEqual(result, "<root>ok</root>")
110         result = xpp.preprocess('<root><?if False?>ok<?endif?></root>')
111         self.assertEqual(result, "<root></root>")
112         result = xpp.preprocess('<root><?if True?>ok<?else?>ko<?endif?></root>')
113         self.assertEqual(result, "<root>ok</root>")
114         result = xpp.preprocess('<root><?if False?>ok<?else?>ko<?endif?></root>')
115         self.assertEqual(result, "<root>ko</root>")
116         result = xpp.preprocess(
117             '<root><?if False?>ok<?elseif True?>ok2<?else?>ko<?endif?></root>'
118         )
119         self.assertEqual(result, "<root>ok2</root>")
120         result = xpp.preprocess(
121             '<root><?if False?>ok<?elseif False?>ok<?else?>ko<?endif?></root>'
122         )
123         self.assertEqual(result, "<root>ko</root>")
124
125     def test_ifdef(self):
126         xpp = xmlpp.Preprocessor()
127         result = xpp.preprocess('<root><?ifdef USER?>ok<?else?>ko<?endif?></root>')
128         self.assertEqual(result, "<root>ko</root>")
129         result = xpp.preprocess(
130             '<?define USER=FOO?><root><?ifdef USER?>ok<?else?>ko<?endif?></root>'
131         )
132         self.assertEqual(result, "<root>ok</root>")
133
134
135 if __name__ == "__main__":
136     unittest.main()