#!/usr/bin/env python3 import sys import io import contextlib from pathlib import Path sys.path.insert(0, str(Path.cwd())) from gx_cli.main import main def test_summary_basic(): """Test summary command on a .gx file""" gx_path = Path("/tmp/test_summary_basic.gx") # Compile compile_code = main(["compile", "/home/dave/sample_code.py", "-o", str(gx_path)]) if compile_code != 0: print("FAIL: compilation failed") return False # Summary f = io.StringIO() with contextlib.redirect_stdout(f): exit_code = main(["summary", str(gx_path)]) output = f.getvalue() if exit_code != 0: print("FAIL: summary returned non-zero") return False # Check for expected content if "GX File:" not in output: print("FAIL: missing 'GX File:' in summary") return False if "Source:" not in output: print("FAIL: missing 'Source:' in summary") return False print("PASS: Summary shows file info") return True def test_summary_content(): """Test that summary contains expected information""" gx_path = Path("/tmp/test_summary_content.gx") # Compile main(["compile", "/home/dave/sample_code.py", "-o", str(gx_path)]) # Summary f = io.StringIO() with contextlib.redirect_stdout(f): main(["summary", str(gx_path)]) output = f.getvalue() # Check for expected fields required_content = [ "GX File:", "Source:", "Type:", "Segments:", "Compressed:", "Version:" ] for content in required_content: if content not in output: print(f"FAIL: missing '{content}' in summary") return False # Should contain actual values if "/home/dave/sample_code.py" not in output: print("FAIL: source file path not in summary") return False if ".py" not in output: print("FAIL: source type not in summary") return False print("PASS: Summary contains all expected fields and values") return True def test_summary_readable(): """Test that summary output is human-readable""" gx_path = Path("/tmp/test_summary_readable.gx") # Compile main(["compile", "/home/dave/sample_code.py", "-o", str(gx_path)]) # Summary f = io.StringIO() with contextlib.redirect_stdout(f): main(["summary", str(gx_path)]) output = f.getvalue() # Should be formatted on separate lines lines = output.strip().split('\n') if len(lines) < 5: print(f"FAIL: summary too short ({len(lines)} lines)") return False # Each line should be readable for line in lines: if ":" in line: # Should be key: value format parts = line.split(":", 1) if len(parts) == 2: key = parts[0].strip() value = parts[1].strip() if not key or not value: print(f"FAIL: malformed line: {line}") return False print("PASS: Summary is human-readable") return True def main_test(): print("[TEST SUITE] test_summary.py") print() tests = [ ("Basic summary", test_summary_basic), ("Summary content", test_summary_content), ("Readable format", test_summary_readable), ] passed = 0 failed = 0 for name, test_func in tests: print(f"Running: {name}...", end=" ") try: if test_func(): passed += 1 else: failed += 1 except Exception as e: print(f"FAIL: {e}") failed += 1 print() print(f"Results: {passed} passed, {failed} failed") return 0 if failed == 0 else 1 if __name__ == "__main__": sys.exit(main_test())