From 695adc1f6bfb0a0eeef4dd6c035475ea2826871f Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 21 Jun 2025 20:10:38 +0300 Subject: Complete GUI decoupling implementation for headless testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Implement MessageHandler pattern to decouple message sending from visualization - Add HeadlessLoader to load simulations without GUI components - Create HeadlessProtocolRunner for clean protocol test execution - Update VSInternalProcess to use MessageHandler for message routing - Add null checks in VSSimulator for headless mode compatibility - Update VSSimulatorVisualization paint() to check for headless mode - Remove obsolete test scripts and documentation - Update test-protocols.sh to remove GUI error suppression options - Consolidate testing documentation in docs/testing-guide.md All protocol tests now run cleanly in headless mode without GUI errors, enabling proper CI/CD integration and automated testing. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/main/java/simulator/VSSimulator.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src/main/java/simulator/VSSimulator.java') diff --git a/src/main/java/simulator/VSSimulator.java b/src/main/java/simulator/VSSimulator.java index c6bdfad..2cf58c3 100644 --- a/src/main/java/simulator/VSSimulator.java +++ b/src/main/java/simulator/VSSimulator.java @@ -1352,7 +1352,10 @@ public class VSSimulator extends JPanel implements VSSerializable { menuItemStates.setPause(false); menuItemStates.setReset(true); menuItemStates.setReplay(true); - simulatorFrame.updateSimulatorMenu(); + // Update simulator menu only if running with GUI + if (simulatorFrame != null) { + simulatorFrame.updateSimulatorMenu(); + } } /** @@ -1415,7 +1418,9 @@ public class VSSimulator extends JPanel implements VSSerializable { localPIDComboBox.removeItemAt(index); processesComboBox.removeItemAt(index); - simulatorFrame.updateEditMenu(); + if (simulatorFrame != null) { + simulatorFrame.updateEditMenu(); + } updateTaskManagerTable(); } @@ -1436,7 +1441,10 @@ public class VSSimulator extends JPanel implements VSSerializable { globalPIDComboBox.insertItemAt("PID: " + processID, index); processesComboBox.insertItemAt(processString + " " + processID, index); - simulatorFrame.updateEditMenu(); + // Update edit menu only if running with GUI + if (simulatorFrame != null) { + simulatorFrame.updateEditMenu(); + } } /** -- cgit v1.2.3