| import subprocess |
| import unittest |
| from pathlib import Path |
| import os |
| import argparse |
| import sys |
| |
| |
| class TestHeaderGenIntegration(unittest.TestCase): |
| def setUp(self): |
| self.output_dir = Path( |
| args.output_dir if args.output_dir else "libc/newhdrgen/tests/output" |
| ) |
| |
| self.maxDiff = None |
| |
| self.source_dir = Path(__file__).resolve().parent.parent.parent.parent |
| |
| def run_script(self, yaml_file, h_def_file, output_dir, entry_points): |
| yaml_file = self.source_dir / yaml_file |
| h_def_file = self.source_dir / h_def_file |
| command = [ |
| "python3", |
| str(self.source_dir / "libc/newhdrgen/yaml_to_classes.py"), |
| str(yaml_file), |
| "--h_def_file", |
| str(h_def_file), |
| "--output_dir", |
| str(output_dir), |
| ] |
| |
| for entry_point in entry_points: |
| command.extend(["--e", 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 = "libc/newhdrgen/tests/input/test_small.yaml" |
| h_def_file = "libc/newhdrgen/tests/input/test_small.h.def" |
| expected_output_file = ( |
| self.source_dir / "libc/newhdrgen/tests/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"} |
| |
| if not self.output_dir.exists(): |
| self.output_dir.mkdir(parents=True) |
| |
| self.run_script(yaml_file, h_def_file, self.output_dir, entry_points) |
| |
| self.compare_files(output_file, expected_output_file) |
| |
| |
| if __name__ == "__main__": |
| parser = argparse.ArgumentParser(description="TestHeaderGenIntegration arguments") |
| parser.add_argument( |
| "--output_dir", type=str, help="Output directory for generated headers" |
| ) |
| args, remaining_argv = parser.parse_known_args() |
| |
| TestHeaderGenIntegration.output_dir = args.output_dir |
| |
| sys.argv[1:] = remaining_argv |
| |
| unittest.main() |