137 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			137 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | #!/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() |