19b286e76SMarc-André Lureau#!/usr/bin/env python3 29b286e76SMarc-André Lureau# 39b286e76SMarc-André Lureau# Copyright (c) 2023 Red Hat, Inc. 49b286e76SMarc-André Lureau# 59b286e76SMarc-André Lureau# SPDX-License-Identifier: MIT 69b286e76SMarc-André Lureau"""Unit tests for xml-preprocess""" 79b286e76SMarc-André Lureau 89b286e76SMarc-André Lureauimport contextlib 99b286e76SMarc-André Lureauimport importlib 109b286e76SMarc-André Lureauimport os 119b286e76SMarc-André Lureauimport platform 129b286e76SMarc-André Lureauimport subprocess 139b286e76SMarc-André Lureauimport tempfile 149b286e76SMarc-André Lureauimport unittest 159b286e76SMarc-André Lureaufrom io import StringIO 169b286e76SMarc-André Lureau 179b286e76SMarc-André Lureauxmlpp = importlib.import_module("xml-preprocess") 189b286e76SMarc-André Lureau 199b286e76SMarc-André Lureau 209b286e76SMarc-André Lureauclass TestXmlPreprocess(unittest.TestCase): 219b286e76SMarc-André Lureau """Tests for xml-preprocess.Preprocessor""" 229b286e76SMarc-André Lureau 239b286e76SMarc-André Lureau def test_preprocess_xml(self): 249b286e76SMarc-André Lureau with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_file: 259b286e76SMarc-André Lureau temp_file.write("<root></root>") 269b286e76SMarc-André Lureau temp_file_name = temp_file.name 279b286e76SMarc-André Lureau result = xmlpp.preprocess_xml(temp_file_name) 289b286e76SMarc-André Lureau self.assertEqual(result, "<root></root>") 299b286e76SMarc-André Lureau os.remove(temp_file_name) 309b286e76SMarc-André Lureau 319b286e76SMarc-André Lureau def test_save_xml(self): 329b286e76SMarc-André Lureau with tempfile.NamedTemporaryFile(mode="w", delete=False) as temp_file: 339b286e76SMarc-André Lureau temp_file_name = temp_file.name 349b286e76SMarc-André Lureau xmlpp.save_xml("<root></root>", temp_file_name) 359b286e76SMarc-André Lureau self.assertTrue(os.path.isfile(temp_file_name)) 369b286e76SMarc-André Lureau os.remove(temp_file_name) 379b286e76SMarc-André Lureau 389b286e76SMarc-André Lureau def test_include(self): 399b286e76SMarc-André Lureau with tempfile.NamedTemporaryFile(mode="w", delete=False) as inc_file: 409b286e76SMarc-André Lureau inc_file.write("<included>Content from included file</included>") 419b286e76SMarc-André Lureau inc_file_name = inc_file.name 429b286e76SMarc-André Lureau xml_str = f"<?include {inc_file_name} ?>" 439b286e76SMarc-André Lureau expected = "<included>Content from included file</included>" 449b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 459b286e76SMarc-André Lureau result = xpp.preprocess(xml_str) 469b286e76SMarc-André Lureau self.assertEqual(result, expected) 479b286e76SMarc-André Lureau os.remove(inc_file_name) 489b286e76SMarc-André Lureau self.assertRaises(FileNotFoundError, xpp.preprocess, xml_str) 499b286e76SMarc-André Lureau 509b286e76SMarc-André Lureau def test_envvar(self): 519b286e76SMarc-André Lureau os.environ["TEST_ENV_VAR"] = "TestValue" 529b286e76SMarc-André Lureau xml_str = "<root>$(env.TEST_ENV_VAR)</root>" 539b286e76SMarc-André Lureau expected = "<root>TestValue</root>" 549b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 559b286e76SMarc-André Lureau result = xpp.preprocess(xml_str) 569b286e76SMarc-André Lureau self.assertEqual(result, expected) 579b286e76SMarc-André Lureau self.assertRaises(KeyError, xpp.preprocess, "$(env.UNKNOWN)") 589b286e76SMarc-André Lureau 599b286e76SMarc-André Lureau def test_sys_var(self): 609b286e76SMarc-André Lureau xml_str = "<root>$(sys.ARCH)</root>" 619b286e76SMarc-André Lureau expected = f"<root>{platform.architecture()[0]}</root>" 629b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 639b286e76SMarc-André Lureau result = xpp.preprocess(xml_str) 649b286e76SMarc-André Lureau self.assertEqual(result, expected) 659b286e76SMarc-André Lureau self.assertRaises(KeyError, xpp.preprocess, "$(sys.UNKNOWN)") 669b286e76SMarc-André Lureau 679b286e76SMarc-André Lureau def test_cus_var(self): 689b286e76SMarc-André Lureau xml_str = "<root>$(var.USER)</root>" 699b286e76SMarc-André Lureau expected = "<root></root>" 709b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 719b286e76SMarc-André Lureau result = xpp.preprocess(xml_str) 729b286e76SMarc-André Lureau self.assertEqual(result, expected) 739b286e76SMarc-André Lureau xml_str = "<?define USER=FOO?><root>$(var.USER)</root>" 749b286e76SMarc-André Lureau expected = "<root>FOO</root>" 759b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 769b286e76SMarc-André Lureau result = xpp.preprocess(xml_str) 779b286e76SMarc-André Lureau self.assertEqual(result, expected) 789b286e76SMarc-André Lureau 799b286e76SMarc-André Lureau def test_error_warning(self): 809b286e76SMarc-André Lureau xml_str = "<root><?warning \"test warn\"?></root>" 819b286e76SMarc-André Lureau expected = "<root></root>" 829b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 839b286e76SMarc-André Lureau out = StringIO() 849b286e76SMarc-André Lureau with contextlib.redirect_stdout(out): 859b286e76SMarc-André Lureau result = xpp.preprocess(xml_str) 869b286e76SMarc-André Lureau self.assertEqual(result, expected) 879b286e76SMarc-André Lureau self.assertEqual(out.getvalue(), "[Warning]: test warn\n") 889b286e76SMarc-André Lureau self.assertRaises(RuntimeError, xpp.preprocess, "<?error \"test\"?>") 899b286e76SMarc-André Lureau 909b286e76SMarc-André Lureau def test_cmd(self): 919b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 929b286e76SMarc-André Lureau result = xpp.preprocess('<root><?cmd "echo hello world"?></root>') 939b286e76SMarc-André Lureau self.assertEqual(result, "<root>hello world</root>") 949b286e76SMarc-André Lureau self.assertRaises( 959b286e76SMarc-André Lureau subprocess.CalledProcessError, 969b286e76SMarc-André Lureau xpp.preprocess, '<?cmd "test-unknown-cmd"?>' 979b286e76SMarc-André Lureau ) 989b286e76SMarc-André Lureau 999b286e76SMarc-André Lureau def test_foreach(self): 1009b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 1019b286e76SMarc-André Lureau result = xpp.preprocess( 1029b286e76SMarc-André Lureau '<root><?foreach x in a;b;c?>$(var.x)<?endforeach?></root>' 1039b286e76SMarc-André Lureau ) 1049b286e76SMarc-André Lureau self.assertEqual(result, "<root>abc</root>") 1059b286e76SMarc-André Lureau 1069b286e76SMarc-André Lureau def test_if_elseif(self): 1079b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 1089b286e76SMarc-André Lureau result = xpp.preprocess('<root><?if True?>ok<?endif?></root>') 1099b286e76SMarc-André Lureau self.assertEqual(result, "<root>ok</root>") 1109b286e76SMarc-André Lureau result = xpp.preprocess('<root><?if False?>ok<?endif?></root>') 1119b286e76SMarc-André Lureau self.assertEqual(result, "<root></root>") 1129b286e76SMarc-André Lureau result = xpp.preprocess('<root><?if True?>ok<?else?>ko<?endif?></root>') 1139b286e76SMarc-André Lureau self.assertEqual(result, "<root>ok</root>") 1149b286e76SMarc-André Lureau result = xpp.preprocess('<root><?if False?>ok<?else?>ko<?endif?></root>') 1159b286e76SMarc-André Lureau self.assertEqual(result, "<root>ko</root>") 1169b286e76SMarc-André Lureau result = xpp.preprocess( 1179b286e76SMarc-André Lureau '<root><?if False?>ok<?elseif True?>ok2<?else?>ko<?endif?></root>' 1189b286e76SMarc-André Lureau ) 1199b286e76SMarc-André Lureau self.assertEqual(result, "<root>ok2</root>") 1209b286e76SMarc-André Lureau result = xpp.preprocess( 1219b286e76SMarc-André Lureau '<root><?if False?>ok<?elseif False?>ok<?else?>ko<?endif?></root>' 1229b286e76SMarc-André Lureau ) 1239b286e76SMarc-André Lureau self.assertEqual(result, "<root>ko</root>") 1249b286e76SMarc-André Lureau 1259b286e76SMarc-André Lureau def test_ifdef(self): 1269b286e76SMarc-André Lureau xpp = xmlpp.Preprocessor() 1279b286e76SMarc-André Lureau result = xpp.preprocess('<root><?ifdef USER?>ok<?else?>ko<?endif?></root>') 1289b286e76SMarc-André Lureau self.assertEqual(result, "<root>ko</root>") 1299b286e76SMarc-André Lureau result = xpp.preprocess( 1309b286e76SMarc-André Lureau '<?define USER=FOO?><root><?ifdef USER?>ok<?else?>ko<?endif?></root>' 1319b286e76SMarc-André Lureau ) 1329b286e76SMarc-André Lureau self.assertEqual(result, "<root>ok</root>") 1339b286e76SMarc-André Lureau 1349b286e76SMarc-André Lureau 1359b286e76SMarc-André Lureauif __name__ == "__main__": 1369b286e76SMarc-André Lureau unittest.main() 137