#!/usr/bin/env python3 """ Test script for Serial Monitor functionality Tests connection, reading, and cursor-based pagination """ import asyncio import json import sys from pathlib import Path # Add src to path for imports sys.path.insert(0, str(Path(__file__).parent / "src")) from fastmcp import Context from mcp_arduino_server.components.serial_monitor import ( SerialListPortsParams, SerialListPortsTool, SerialMonitorContext, ) async def test_serial_monitor(): """Test serial monitor functionality""" print("๐Ÿงช Testing Serial Monitor Components\n") # Create context ctx = Context() monitor = SerialMonitorContext() await monitor.initialize() ctx.state["serial_monitor"] = monitor print("โœ… Serial monitor initialized") # Test listing ports print("\n๐Ÿ“ก Testing port listing...") list_tool = SerialListPortsTool() params = SerialListPortsParams(arduino_only=False) result = await list_tool.run(params, ctx) if result["success"]: print(f"โœ… Found {len(result['ports'])} ports:") for port in result["ports"]: arduino_badge = "๐ŸŸข Arduino" if port["is_arduino"] else "โšช Other" print(f" {arduino_badge} {port['device']}: {port['description']}") if port["vid"] and port["pid"]: print(f" VID:PID = {port['vid']:04x}:{port['pid']:04x}") else: print("โŒ Failed to list ports") # Get monitor state print("\n๐Ÿ“Š Serial Monitor State:") state = monitor.get_state() print(json.dumps(state, indent=2)) # Cleanup await monitor.cleanup() print("\nโœ… Test complete!") if __name__ == "__main__": asyncio.run(test_serial_monitor())