sourcesage

by sarathsp06
Verified
#!/usr/bin/env python3 """Test script for the Makefile.""" import os import subprocess import sys def test_makefile_exists(): """Test that the Makefile exists.""" assert os.path.isfile("Makefile"), "Makefile does not exist" print("✓ Makefile exists") def test_makefile_targets(): """Test that the Makefile contains the expected targets.""" expected_targets = [ "init", "test", "lint", "fix", "format", "clean", "run", "build", "install", "help" ] # Run 'make -pn' to get all targets try: output = subprocess.check_output(["make", "-pn"], stderr=subprocess.STDOUT, text=True) except subprocess.CalledProcessError as e: print(f"Error running 'make -pn': {e}") return False # Check each expected target missing_targets = [] for target in expected_targets: if f"{target}:" not in output: missing_targets.append(target) if missing_targets: print(f"Missing targets in Makefile: {', '.join(missing_targets)}") return False print(f"✓ All {len(expected_targets)} expected targets found in Makefile") return True def test_help_target(): """Test that the help target works.""" try: output = subprocess.check_output(["make", "help"], stderr=subprocess.STDOUT, text=True) except subprocess.CalledProcessError as e: print(f"Error running 'make help': {e}") return False # Check that help output contains descriptions for all targets expected_targets = ["init", "test", "lint", "fix", "format", "clean", "run", "build", "install", "help"] missing_descriptions = [] for target in expected_targets: if target not in output: missing_descriptions.append(target) if missing_descriptions: print(f"Help output missing descriptions for: {', '.join(missing_descriptions)}") return False print("✓ Help target works correctly") return True def main(): """Run all tests.""" print("=== Testing Makefile ===") tests = [ test_makefile_exists, test_makefile_targets, test_help_target ] success = True for test in tests: try: result = test() if result is False: # Only check if explicitly False success = False except Exception as e: print(f"Error in {test.__name__}: {e}") success = False if success: print("\nAll Makefile tests passed!") return 0 else: print("\nSome Makefile tests failed!") return 1 if __name__ == "__main__": sys.exit(main())