summaryrefslogtreecommitdiff
path: root/src/main/java/testing/HeadlessSimulatorFrame.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-06-21 20:10:38 +0300
committerPaul Buetow <paul@buetow.org>2025-06-21 20:10:38 +0300
commit695adc1f6bfb0a0eeef4dd6c035475ea2826871f (patch)
tree945fc0552d4f7f1ef1f468f6030e9925970fa72b /src/main/java/testing/HeadlessSimulatorFrame.java
parentd3b697218773eaa5a3dd368705184726dbc0fa38 (diff)
Complete GUI decoupling implementation for headless testing
- 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 <noreply@anthropic.com>
Diffstat (limited to 'src/main/java/testing/HeadlessSimulatorFrame.java')
-rw-r--r--src/main/java/testing/HeadlessSimulatorFrame.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/main/java/testing/HeadlessSimulatorFrame.java b/src/main/java/testing/HeadlessSimulatorFrame.java
new file mode 100644
index 0000000..8c85b0b
--- /dev/null
+++ b/src/main/java/testing/HeadlessSimulatorFrame.java
@@ -0,0 +1,73 @@
+package testing;
+
+import simulator.*;
+import prefs.*;
+import java.util.*;
+import java.awt.*;
+import javax.swing.*;
+
+/**
+ * A headless implementation of VSSimulatorFrame that avoids GUI initialization.
+ * This frame is used for loading simulations in test/headless environments.
+ */
+public class HeadlessSimulatorFrame {
+ private Vector<VSSimulator> simulators = new Vector<>();
+ private VSPrefs prefs;
+ private VSSimulator currentSimulator;
+
+ public HeadlessSimulatorFrame(VSPrefs prefs) {
+ this.prefs = prefs;
+ }
+
+ public void addSimulator(VSSimulator simulator) {
+ simulators.add(simulator);
+ currentSimulator = simulator;
+ }
+
+ public void removeSimulator(VSSimulator simulator) {
+ simulators.remove(simulator);
+ if (currentSimulator == simulator) {
+ currentSimulator = simulators.isEmpty() ? null : simulators.lastElement();
+ }
+ }
+
+ public void resetCurrentSimulator() {
+ if (currentSimulator != null) {
+ simulators.remove(currentSimulator);
+ currentSimulator = null;
+ }
+ }
+
+ public VSPrefs getPrefs() {
+ return prefs;
+ }
+
+ public Vector<VSSimulator> getSimulators() {
+ return simulators;
+ }
+
+ public VSSimulator getCurrentSimulator() {
+ return currentSimulator;
+ }
+
+ public void setVisible(boolean visible) {
+ // Do nothing - no GUI to show
+ }
+
+ public void pack() {
+ // Do nothing - no GUI to pack
+ }
+
+ public void repaint() {
+ // Do nothing - no GUI to repaint
+ }
+
+ public boolean isDisplayable() {
+ return false;
+ }
+
+ public void dispose() {
+ simulators.clear();
+ currentSimulator = null;
+ }
+} \ No newline at end of file