1import argparse 2import subprocess 3import sys 4import unittest 5from pathlib import Path 6 7 8class TestHeaderGenIntegration(unittest.TestCase): 9 def setUp(self): 10 self.output_dir = TestHeaderGenIntegration.output_dir 11 self.source_dir = Path(__file__).parent 12 self.main_script = self.source_dir.parent / "main.py" 13 14 def run_script(self, yaml_file, output_file, entry_points): 15 command = [ 16 "python3", 17 str(self.main_script), 18 str(yaml_file), 19 "--output", 20 str(output_file), 21 ] 22 23 for entry_point in entry_points: 24 command.extend(["--entry-point", entry_point]) 25 26 result = subprocess.run( 27 command, 28 capture_output=True, 29 text=True, 30 ) 31 32 print("STDOUT:", result.stdout) 33 print("STDERR:", result.stderr) 34 result.check_returncode() 35 36 def compare_files(self, generated_file, expected_file): 37 with generated_file.open("r") as gen_file: 38 gen_content = gen_file.read() 39 with expected_file.open("r") as exp_file: 40 exp_content = exp_file.read() 41 42 self.assertEqual(gen_content, exp_content) 43 44 def test_generate_header(self): 45 yaml_file = self.source_dir / "input/test_small.yaml" 46 expected_output_file = self.source_dir / "expected_output/test_header.h" 47 output_file = self.output_dir / "test_small.h" 48 entry_points = {"func_b", "func_a", "func_c", "func_d", "func_e"} 49 50 self.run_script(yaml_file, output_file, entry_points) 51 52 self.compare_files(output_file, expected_output_file) 53 54 55def main(): 56 parser = argparse.ArgumentParser(description="TestHeaderGenIntegration arguments") 57 parser.add_argument( 58 "--output_dir", 59 type=Path, 60 help="Output directory for generated headers", 61 required=True, 62 ) 63 args, remaining_argv = parser.parse_known_args() 64 65 TestHeaderGenIntegration.output_dir = args.output_dir 66 67 sys.argv[1:] = remaining_argv 68 69 unittest.main() 70 71 72if __name__ == "__main__": 73 main() 74