Files
metabuilder/dbal/shared/scripts/test.py
2026-03-09 22:30:41 +00:00

105 lines
3.1 KiB
Python

#!/usr/bin/env python3
"""
Test runner for DBAL
Runs unit tests, integration tests, and conformance tests
"""
import subprocess
import sys
from pathlib import Path
import argparse
def test_typescript(root_dir: Path, test_type: str = 'all') -> bool:
"""Run TypeScript tests"""
print(f"\n=== Running TypeScript {test_type} Tests ===")
ts_dir = root_dir / 'ts'
test_commands = {
'unit': ['npm', 'run', 'test:unit'],
'integration': ['npm', 'run', 'test:integration'],
'all': ['npm', 'test']
}
try:
subprocess.run(test_commands[test_type], cwd=ts_dir, check=True)
print(f"✓ TypeScript {test_type} tests passed")
return True
except subprocess.CalledProcessError:
print(f"✗ TypeScript {test_type} tests failed", file=sys.stderr)
return False
def test_cpp(root_dir: Path, test_type: str = 'all') -> bool:
"""Run C++ tests"""
print(f"\n=== Running C++ {test_type} Tests ===")
build_dir = root_dir / 'cpp' / 'build'
if not build_dir.exists():
print("✗ C++ build directory not found. Run build.py first.", file=sys.stderr)
return False
test_executables = {
'unit': ['./unit_tests'],
'integration': ['./integration_tests'],
'all': ['ctest', '--output-on-failure']
}
try:
subprocess.run(test_executables[test_type], cwd=build_dir, check=True)
print(f"✓ C++ {test_type} tests passed")
return True
except subprocess.CalledProcessError:
print(f"✗ C++ {test_type} tests failed", file=sys.stderr)
return False
def test_conformance(root_dir: Path) -> bool:
"""Run conformance tests"""
print("\n=== Running Conformance Tests ===")
conformance_script = root_dir / 'tools' / 'conformance' / 'run_all.py'
try:
subprocess.run(['python3', str(conformance_script)], check=True)
print("✓ Conformance tests passed")
return True
except subprocess.CalledProcessError:
print("✗ Conformance tests failed", file=sys.stderr)
return False
def main():
parser = argparse.ArgumentParser(description='Run DBAL tests')
parser.add_argument('--type', default='all', choices=['unit', 'integration', 'conformance', 'all'],
help='Type of tests to run')
parser.add_argument('--lang', default='all', choices=['ts', 'cpp', 'all'],
help='Language implementation to test')
args = parser.parse_args()
root_dir = Path(__file__).parent.parent
print("DBAL Test Runner")
print("=" * 60)
success = True
if args.type == 'conformance' or args.type == 'all':
success = test_conformance(root_dir) and success
else:
if args.lang in ['ts', 'all']:
success = test_typescript(root_dir, args.type) and success
if args.lang in ['cpp', 'all']:
success = test_cpp(root_dir, args.type) and success
if success:
print("\n✓ All tests passed!")
return 0
else:
print("\n✗ Some tests failed", file=sys.stderr)
return 1
if __name__ == '__main__':
sys.exit(main())