import argparse import subprocess import sys import unittest from pathlib import Path class TestHeaderGenIntegration(unittest.TestCase): def setUp(self): self.output_dir = TestHeaderGenIntegration.output_dir self.source_dir = Path(__file__).parent self.main_script = self.source_dir.parent / "main.py" def run_script(self, yaml_file, output_file, entry_points): command = [ "python3", str(self.main_script), str(yaml_file), "--output", str(output_file), ] for entry_point in entry_points: command.extend(["--entry-point", entry_point]) result = subprocess.run( command, capture_output=True, text=True, ) print("STDOUT:", result.stdout) print("STDERR:", result.stderr) result.check_returncode() def compare_files(self, generated_file, expected_file): with generated_file.open("r") as gen_file: gen_content = gen_file.read() with expected_file.open("r") as exp_file: exp_content = exp_file.read() self.assertEqual(gen_content, exp_content) def test_generate_header(self): yaml_file = self.source_dir / "input/test_small.yaml" expected_output_file = self.source_dir / "expected_output/test_header.h" output_file = self.output_dir / "test_small.h" entry_points = {"func_b", "func_a", "func_c", "func_d", "func_e"} self.run_script(yaml_file, output_file, entry_points) self.compare_files(output_file, expected_output_file) def main(): parser = argparse.ArgumentParser(description="TestHeaderGenIntegration arguments") parser.add_argument( "--output_dir", type=Path, help="Output directory for generated headers", required=True, ) args, remaining_argv = parser.parse_known_args() TestHeaderGenIntegration.output_dir = args.output_dir sys.argv[1:] = remaining_argv unittest.main() if __name__ == "__main__": main()