Applied 236 return type annotations to functions with no return values across 100+ files (core modules, tests, scripts, simulations). Added Phase 4 to python_style_refactor track for remaining 597 items (untyped params, vars, and functions with return values). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
128 lines
4.5 KiB
Python
128 lines
4.5 KiB
Python
import subprocess
|
|
import time
|
|
import sys
|
|
import os
|
|
import glob
|
|
|
|
# --- Configuration ---
|
|
GUI_SCRIPT = 'gui_2.py'
|
|
TEST_HOOKS_FLAG = '--enable-test-hooks'
|
|
API_HOOK_CLIENT_MODULE = 'api_hook_client'
|
|
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
|
|
|
|
# Ensure project root is in sys.path to import modules like api_hook_client
|
|
if PROJECT_ROOT not in sys.path:
|
|
sys.path.insert(0, PROJECT_ROOT)
|
|
print(f"Added '{PROJECT_ROOT}' to sys.path for imports.")
|
|
|
|
try:
|
|
from api_hook_client import ApiHookClient
|
|
except ImportError as e:
|
|
print(f"Error: Could not import ApiHookClient from '{API_HOOK_CLIENT_MODULE}'.")
|
|
print(f"Please ensure '{API_HOOK_CLIENT_MODULE}.py' is accessible and '{PROJECT_ROOT}' is correctly added to sys.path.")
|
|
print(f"Import error: {e}")
|
|
sys.exit(1)
|
|
|
|
def run_visual_mma_verification() -> None:
|
|
print("Starting visual MMA verification test...")
|
|
# Change current directory to project root
|
|
original_dir = os.getcwd()
|
|
if original_dir != PROJECT_ROOT:
|
|
try:
|
|
os.chdir(PROJECT_ROOT)
|
|
print(f"Changed current directory to: {PROJECT_ROOT}")
|
|
except FileNotFoundError:
|
|
print(f"Error: Project root directory '{PROJECT_ROOT}' not found.")
|
|
return
|
|
# 1. Launch gui_2.py with --enable-test-hooks
|
|
gui_command = [sys.executable, GUI_SCRIPT, TEST_HOOKS_FLAG]
|
|
print(f"Launching GUI with command: {' '.join(gui_command)}")
|
|
try:
|
|
gui_process = subprocess.Popen(
|
|
gui_command,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
cwd=PROJECT_ROOT
|
|
)
|
|
print(f"GUI process started with PID: {gui_process.pid}")
|
|
except FileNotFoundError:
|
|
print(f"Error: Could not find Python executable '{sys.executable}' or script '{GUI_SCRIPT}'.")
|
|
return
|
|
except Exception as e:
|
|
print(f"Error starting GUI process: {e}")
|
|
return
|
|
# Wait for GUI to start
|
|
print("Waiting for GUI to initialize and hook server to start (5 seconds)...")
|
|
time.sleep(5)
|
|
if gui_process.poll() is not None:
|
|
print(f"Error: GUI process exited prematurely with return code {gui_process.returncode}.")
|
|
return
|
|
# 2. Use ApiHookClient
|
|
try:
|
|
client = ApiHookClient()
|
|
print("ApiHookClient initialized successfully.")
|
|
except Exception as e:
|
|
print(f"Failed to initialize ApiHookClient. Error: {e}")
|
|
if gui_process:
|
|
gui_process.terminate()
|
|
return
|
|
# 3. Setup MMA data
|
|
track_data = {
|
|
"id": "visual_test_track",
|
|
"title": "Visual Verification Track",
|
|
"description": "A track to verify MMA UI components"
|
|
}
|
|
tickets_data = [
|
|
{"id": "TICKET-001", "target_file": "core.py", "status": "todo"},
|
|
{"id": "TICKET-002", "target_file": "utils.py", "status": "running"},
|
|
{"id": "TICKET-003", "target_file": "tests.py", "status": "complete"},
|
|
{"id": "TICKET-004", "target_file": "api.py", "status": "blocked"},
|
|
{"id": "TICKET-005", "target_file": "gui.py", "status": "paused"},
|
|
]
|
|
print("\nPushing MMA state update...")
|
|
try:
|
|
payload = {
|
|
"status": "running",
|
|
"active_tier": "Tier 3",
|
|
"track": track_data,
|
|
"tickets": tickets_data
|
|
}
|
|
client.push_event("mma_state_update", payload)
|
|
print(" - MMA state update pushed.")
|
|
except Exception as e:
|
|
print(f" - Warning: Failed to push mma_state_update: {e}")
|
|
time.sleep(3)
|
|
print("Pushing 'mma_step_approval' event to trigger HITL modal...")
|
|
try:
|
|
approval_payload = {
|
|
"ticket_id": "TICKET-002",
|
|
"payload": "powershell -Command \"Write-Host 'Hello from Tier 3'\""
|
|
}
|
|
client.push_event("mma_step_approval", approval_payload)
|
|
print("mma_step_approval event pushed successfully.")
|
|
except Exception as e:
|
|
print(f"Error pushing mma_step_approval event: {e}")
|
|
# 5. Provide clear print statements for manual verification
|
|
print("\n--- Manual Verification Instructions ---")
|
|
print("Please visually inspect the running GUI application:")
|
|
print("1. MMA Dashboard: Ensure the 'MMA Dashboard' panel is visible and active.")
|
|
print("2. Ticket Queue: Verify the 'Ticket Queue' section displays all 5 tickets with correct statuses.")
|
|
print("3. Progress Bar: Check that the progress bar correctly reflects the completed/total tickets.")
|
|
print("4. Approval Modal: Confirm that an 'MMA Step Approval' modal has appeared.")
|
|
print("\n--------------------------------------")
|
|
print("The test script has finished its automated actions.")
|
|
print("The GUI application is still running. Press Enter to exit.")
|
|
try:
|
|
input()
|
|
except EOFError:
|
|
pass
|
|
print("\nStopping GUI process...")
|
|
if gui_process:
|
|
gui_process.terminate()
|
|
gui_process.wait(timeout=5)
|
|
print("Visual MMA verification test script finished.")
|
|
|
|
if __name__ == "__main__":
|
|
run_visual_mma_verification()
|