#!/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_inspect_basic(): """Test inspecting a .gx file""" gx_path = Path("/tmp/test_inspect_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 # Inspect f = io.StringIO() with contextlib.redirect_stdout(f): exit_code = main(["inspect", str(gx_path)]) output = f.getvalue() if exit_code != 0: print("FAIL: inspect returned non-zero") return False # Verify output contains expected sections if "[Manifest]" not in output: print("FAIL: missing [Manifest] section") return False if "[Segments]" not in output: print("FAIL: missing [Segments] section") return False if "[Payload]" not in output: print("FAIL: missing [Payload] section") return False print("PASS: Inspect shows manifest, segments, and payload") return True def test_inspect_manifest_fields(): """Test that manifest contains expected fields""" gx_path = Path("/tmp/test_manifest_fields.gx") # Compile main(["compile", "/home/dave/sample_code.py", "-o", str(gx_path)]) # Inspect and capture output f = io.StringIO() with contextlib.redirect_stdout(f): main(["inspect", str(gx_path)]) output = f.getvalue() # Check for key manifest fields required_fields = ["version", "origin", "source_file", "source_type", "compression_model", "contributor"] for field in required_fields: if field not in output: print(f"FAIL: missing manifest field: {field}") return False print("PASS: Manifest contains all required fields") return True def test_inspect_segments(): """Test that segments are listed correctly""" gx_path = Path("/tmp/test_segments.gx") # Compile main(["compile", "/home/dave/sample_code.py", "-o", str(gx_path)]) # Inspect f = io.StringIO() with contextlib.redirect_stdout(f): main(["inspect", str(gx_path)]) output = f.getvalue() # Should have segment entries if "seg_0:" not in output: print("FAIL: segment seg_0 not found") return False # Should show line ranges if "lines" not in output: print("FAIL: segment line ranges not shown") return False print("PASS: Segments listed with line ranges") return True def main_test(): print("[TEST SUITE] test_inspect.py") print() tests = [ ("Basic inspect", test_inspect_basic), ("Manifest fields", test_inspect_manifest_fields), ("Segments listing", test_inspect_segments), ] 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())