From ac854ed4f1ba21c495038fb4d78df79d8db56734 Mon Sep 17 00:00:00 2001 From: Paul Martin Date: Fri, 25 Apr 2025 15:18:36 +0200 Subject: [PATCH 1/3] Unit Tests --- pom.xml | 25 ++++ .../fabrik/simulator/pic16f84/Commands.java | 37 ++++- .../pic16f84/Controller_Frontend.java | 31 +--- .../fabrik/simulator/pic16f84/EEPROM.java | 3 +- .../simulator/pic16f84/PICComponent.java | 4 +- .../simulator/pic16f84/WatchdogTimer.java | 2 +- .../pic16f84/interfaces/CommandInterface.java | 6 + .../pic16f84/interfaces/EEPROMInterface.java | 4 + .../FrontendControllerInterface.java | 1 - .../simulator/pic16f84/CommandsTests.java | 88 +++++++++++ .../simulator/pic16f84/DataRegisterTests.java | 50 +++++++ .../simulator/pic16f84/EEPROMTests.java | 137 ++++++++++++++++++ .../pic16f84/WatchDogTimerTests.java | 50 +++++++ 13 files changed, 399 insertions(+), 39 deletions(-) create mode 100644 src/test/java/fabrik/simulator/pic16f84/CommandsTests.java create mode 100644 src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java create mode 100644 src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java create mode 100644 src/test/java/fabrik/simulator/pic16f84/WatchDogTimerTests.java diff --git a/pom.xml b/pom.xml index 85afb62..41d0a6a 100644 --- a/pom.xml +++ b/pom.xml @@ -80,6 +80,13 @@ ${junit.version} test + + + org.mockito + mockito-core + 5.17.0 + test + @@ -113,6 +120,24 @@ + + org.apache.maven.plugins + maven-dependency-plugin + + + + properties + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + @{argLine} -javaagent:${org.mockito:mockito-core:jar} + + \ No newline at end of file diff --git a/src/main/java/fabrik/simulator/pic16f84/Commands.java b/src/main/java/fabrik/simulator/pic16f84/Commands.java index 8116fde..7fab199 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Commands.java +++ b/src/main/java/fabrik/simulator/pic16f84/Commands.java @@ -4,6 +4,7 @@ import fabrik.simulator.pic16f84.interfaces.*; public class Commands extends PICComponent implements CommandInterface { private int wRegister; private long totalExecutionTime; + private double executionTimeMultiplier = 1; public Commands(){ super(); @@ -22,7 +23,7 @@ public class Commands extends PICComponent implements CommandInterface { } public double getTotalExecutionTime() { - return (totalExecutionTime * frontendController.getExecutionTimeMultiplier()); + return (totalExecutionTime * getExecutionTimeMultiplier()); } public void resetTotalExecutionTime() { @@ -248,8 +249,6 @@ public class Commands extends PICComponent implements CommandInterface { else{ System.out.println("Nicht gefunden!"); } - - } public void SLEEP() { @@ -557,9 +556,39 @@ public class Commands extends PICComponent implements CommandInterface { } } + public double getExecutionTimeMultiplier(){ + return executionTimeMultiplier; + } + + public void setExecutionTimeMultiplier(String option){ + switch (option) { + case "8 MHZ": + executionTimeMultiplier = 0.5; + break; + + case "4 MHZ": + executionTimeMultiplier = 1; + break; + case "1 MHZ": + executionTimeMultiplier = 4; + break; + case "500 HZ": + executionTimeMultiplier = 8; + break; + + case "100 HZ": + executionTimeMultiplier = 40; + break; + + case "32 HZ": + executionTimeMultiplier = 125; + break; + } + } + + @Override public void initialize(PICComponents picComponents) { - System.out.println("Commands"); super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java index 587b4a2..45ff56e 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java +++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java @@ -43,13 +43,6 @@ public class Controller_Frontend extends PICComponent implements FrontendControl private int [][] read; private int [] ind; private PICComponents picComponents; - private double executionTimeMultiplier = 1; - - - - public double getExecutionTimeMultiplier(){ - return executionTimeMultiplier; - } private boolean isBreakpointReached = false; @@ -160,29 +153,7 @@ public class Controller_Frontend extends PICComponent implements FrontendControl private void updateExecutionTimeMultiplier() { String selectedOption = executionTimeComboBox.getValue(); - switch (selectedOption) { - case "8 MHZ": - executionTimeMultiplier = 0.5; - break; - - case "4 MHZ": - executionTimeMultiplier = 1; - break; - case "1 MHZ": - executionTimeMultiplier = 4; - break; - case "500 HZ": - executionTimeMultiplier = 8; - break; - - case "100 HZ": - executionTimeMultiplier = 40; - break; - - case "32 HZ": - executionTimeMultiplier = 125; - break; - } + commands.setExecutionTimeMultiplier(selectedOption); } @FXML diff --git a/src/main/java/fabrik/simulator/pic16f84/EEPROM.java b/src/main/java/fabrik/simulator/pic16f84/EEPROM.java index ddd3034..19791a1 100644 --- a/src/main/java/fabrik/simulator/pic16f84/EEPROM.java +++ b/src/main/java/fabrik/simulator/pic16f84/EEPROM.java @@ -36,6 +36,7 @@ public class EEPROM extends PICComponent implements EEPROMInterface { } public long read (int address) { + if (address < 0) return 0; FileReader reader; try { reader = new FileReader("eeprom.json"); @@ -60,6 +61,7 @@ public class EEPROM extends PICComponent implements EEPROMInterface { } public void write (int address, long data) { + if (address < 0) return; FileReader reader; try { reader = new FileReader("eeprom.json"); @@ -172,7 +174,6 @@ public class EEPROM extends PICComponent implements EEPROMInterface { @Override public void initialize(PICComponents picComponents) { - System.out.println("EEPROM"); super.initialize(picComponents); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/PICComponent.java b/src/main/java/fabrik/simulator/pic16f84/PICComponent.java index 1989679..f5fe00e 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PICComponent.java +++ b/src/main/java/fabrik/simulator/pic16f84/PICComponent.java @@ -5,7 +5,7 @@ import fabrik.simulator.pic16f84.interfaces.*; public abstract class PICComponent { DataRegisterInterface dataRegister; EEPROMInterface eeprom; - PreScaler preScaler; + PreScalerInterface preScaler; IOPortInterface ioPorts; TimerInterface timer; InterruptInterface interrupts; @@ -22,7 +22,7 @@ public abstract class PICComponent { dataRegister = (DataRegisterInterface) picComponents.getComponent(DataRegisterInterface.class); eeprom = (EEPROMInterface) picComponents.getComponent(EEPROMInterface.class); ioPorts = (IOPortInterface) picComponents.getComponent(IOPortInterface.class); - preScaler = (PreScaler) picComponents.getComponent(PreScalerInterface.class); + preScaler = (PreScalerInterface) picComponents.getComponent(PreScalerInterface.class); timer = (TimerInterface) picComponents.getComponent(TimerInterface.class); interrupts = (InterruptInterface) picComponents.getComponent(InterruptInterface.class); //table = (TableInterface) picComponents.getComponent(TableInterface.class); diff --git a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java index 8c9f352..e1b3b7f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java +++ b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java @@ -26,7 +26,7 @@ public class WatchdogTimer extends PICComponent implements WatchdogTimerInterfac } else { rawtimer++; - realtimer = (long) (rawtimer * frontendController.getExecutionTimeMultiplier()); + realtimer = (long) (rawtimer * commands.getExecutionTimeMultiplier()); } } } diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/CommandInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/CommandInterface.java index a05f745..4cbeacb 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/CommandInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/CommandInterface.java @@ -10,4 +10,10 @@ public interface CommandInterface extends PICComponentInterface { void decode(int i); void resetTotalExecutionTime(); + + void addExecutionTime(int i); + + double getExecutionTimeMultiplier(); + + void setExecutionTimeMultiplier(String option); } diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/EEPROMInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/EEPROMInterface.java index 776b4bd..4f4c49f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/EEPROMInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/EEPROMInterface.java @@ -4,4 +4,8 @@ public interface EEPROMInterface extends PICComponentInterface { void registerTime(boolean b); void parse(int i, int content, int i1); + + long read(int address); + + void write (int address, long data); } diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java index bc4364e..bc7aeb8 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/FrontendControllerInterface.java @@ -1,7 +1,6 @@ package fabrik.simulator.pic16f84.interfaces; public interface FrontendControllerInterface extends PICComponentInterface { - double getExecutionTimeMultiplier(); void sleep(); diff --git a/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java b/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java new file mode 100644 index 0000000..a81e121 --- /dev/null +++ b/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java @@ -0,0 +1,88 @@ +package fabrik.simulator.pic16f84; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import fabrik.simulator.pic16f84.interfaces.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + + +class CommandsTests { + PICComponents picComponents; + + public CommandsTests() {} + + @BeforeEach + void resetComponents() { + picComponents = new PICComponents(); + } + + @Test + @DisplayName("Execution Time wird korrekt addiert") + void executionTimeIsAddedCorrectly() { + TimerInterface timerMock = mock(TimerInterface.class); + picComponents.registerComponent(TimerInterface.class, timerMock); + + EEPROMInterface eepromMock = mock(EEPROMInterface.class); + picComponents.registerComponent(EEPROMInterface.class, eepromMock); + + CommandInterface commands = new Commands(); + picComponents.registerComponent(CommandInterface.class, commands); + picComponents.initAll(); + + + commands.addExecutionTime(5); + + + assertEquals(5, commands.getTotalExecutionTime()); + } + + @Test + @DisplayName("Execution Time wird korrekt zurückgesetzt") + void executionTimeResetWorks() { + TimerInterface timerMock = mock(TimerInterface.class); + picComponents.registerComponent(TimerInterface.class, timerMock); + + EEPROMInterface eepromMock = mock(EEPROMInterface.class); + picComponents.registerComponent(EEPROMInterface.class, eepromMock); + + CommandInterface commands = new Commands(); + picComponents.registerComponent(CommandInterface.class, commands); + picComponents.initAll(); + + + commands.addExecutionTime(5); + commands.resetTotalExecutionTime(); + + + assertEquals(0, commands.getTotalExecutionTime()); + } + + @Test + @DisplayName("Execution Time Faktor wird berücksichtigt") + void executionTimeMultiplierIsUsed() { + TimerInterface timerMock = mock(TimerInterface.class); + picComponents.registerComponent(TimerInterface.class, timerMock); + + EEPROMInterface eepromMock = mock(EEPROMInterface.class); + picComponents.registerComponent(EEPROMInterface.class, eepromMock); + + CommandInterface commands = new Commands(); + picComponents.registerComponent(CommandInterface.class, commands); + picComponents.initAll(); + + commands.addExecutionTime(5); + commands.setExecutionTimeMultiplier("100 HZ"); + + assertEquals(5 * 40, commands.getTotalExecutionTime()); + } + + @Test + @DisplayName("Decode mit ungültigem Opcode wirft keine Exception") + void decodeInvalidOpcodeDoesNotCrash() { + CommandInterface commands = new Commands(); + + assertDoesNotThrow(() -> commands.decode(1)); + } +} diff --git a/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java b/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java new file mode 100644 index 0000000..b40c794 --- /dev/null +++ b/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java @@ -0,0 +1,50 @@ +package fabrik.simulator.pic16f84; + +import fabrik.simulator.pic16f84.interfaces.*; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; + +class DataRegisterTests { + PICComponents picComponents; + + public DataRegisterTests() {} + + @BeforeEach + void resetComponents() { + picComponents = new PICComponents(); + } + + + @Test + @DisplayName("DataRegister wird durch Components initialisiert und enthält dann die korrekten Startwerte") + void registerGetsInitializedThroughComponents() { + IOPortInterface mockIOPorts = mock(IOPortInterface.class); + picComponents.registerComponent(IOPortInterface.class, mockIOPorts); + + DataRegisterInterface dataRegister = new DataRegister(); + picComponents.registerComponent(DataRegisterInterface.class, dataRegister); + + + picComponents.initAll(); + int [] expected = {0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 24, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + int [] actual = dataRegister.getDataRegister(); + + assertEquals(expected.length, actual.length); + for (int i = 0; i Date: Sun, 27 Apr 2025 22:52:25 +0200 Subject: [PATCH 2/3] Simplify ComponentLocator --- .idea/misc.xml | 2 +- .../fabrik/simulator/pic16f84/Commands.java | 4 +-- .../pic16f84/Controller_Frontend.java | 9 +++--- .../simulator/pic16f84/CreateWindow.java | 5 ++-- .../simulator/pic16f84/DataRegister.java | 4 +-- .../fabrik/simulator/pic16f84/EEPROM.java | 5 ++-- .../simulator/pic16f84/EmptyRegister.java | 2 +- .../fabrik/simulator/pic16f84/IOPorts.java | 4 +-- .../fabrik/simulator/pic16f84/Interrupts.java | 8 ++---- .../simulator/pic16f84/PICComponent.java | 28 ++++++++----------- ...mponents.java => PICComponentLocator.java} | 10 ++++--- .../fabrik/simulator/pic16f84/PreScaler.java | 4 +-- .../simulator/pic16f84/ProgramStack.java | 4 +-- .../java/fabrik/simulator/pic16f84/Table.java | 3 +- .../java/fabrik/simulator/pic16f84/Timer.java | 7 ++--- .../pic16f84/ToggleButtonGroupExt.java | 5 ++-- .../simulator/pic16f84/WatchdogTimer.java | 4 +-- .../interfaces/PICComponentInterface.java | 4 +-- .../simulator/pic16f84/CommandsTests.java | 4 +-- .../simulator/pic16f84/DataRegisterTests.java | 4 +-- .../simulator/pic16f84/EEPROMTests.java | 4 +-- .../pic16f84/WatchDogTimerTests.java | 4 +-- 22 files changed, 57 insertions(+), 71 deletions(-) rename src/main/java/fabrik/simulator/pic16f84/{PICComponents.java => PICComponentLocator.java} (67%) diff --git a/.idea/misc.xml b/.idea/misc.xml index 0b4fa18..c4f391f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/src/main/java/fabrik/simulator/pic16f84/Commands.java b/src/main/java/fabrik/simulator/pic16f84/Commands.java index 7fab199..f34645b 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Commands.java +++ b/src/main/java/fabrik/simulator/pic16f84/Commands.java @@ -588,7 +588,7 @@ public class Commands extends PICComponent implements CommandInterface { @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java index 45ff56e..33adadc 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java +++ b/src/main/java/fabrik/simulator/pic16f84/Controller_Frontend.java @@ -3,7 +3,6 @@ package fabrik.simulator.pic16f84; import com.gluonhq.charm.glisten.control.ToggleButtonGroup; import fabrik.simulator.pic16f84.interfaces.*; -import fabrik.simulator.pic16f84.interfaces.WatchdogTimerInterface; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; @@ -42,7 +41,7 @@ public class Controller_Frontend extends PICComponent implements FrontendControl private int [] prog; private int [][] read; private int [] ind; - private PICComponents picComponents; + private PICComponentLocator picComponents; private boolean isBreakpointReached = false; @@ -553,9 +552,9 @@ public class Controller_Frontend extends PICComponent implements FrontendControl } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); - this.picComponents = picComponents; + public void initialize(PICComponentLocator locator) { + super.initialize(locator); + this.picComponents = locator; System.out.println("Frontend"); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java b/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java index c8263e3..a9fe284 100644 --- a/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java +++ b/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java @@ -4,11 +4,9 @@ import fabrik.simulator.pic16f84.interfaces.*; import javafx.application.Application; import javafx.fxml.FXMLLoader; -import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; -import javafx.scene.control.Tab; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; @@ -17,7 +15,7 @@ import java.io.IOException; import java.util.Objects; public class CreateWindow extends Application { - private PICComponents picComponents = new PICComponents(); // Subjekt + private PICComponentLocator picComponents = new PICComponentLocator(); // Subjekt public static GridPane grid = new GridPane(); private static VBox table; @@ -40,6 +38,7 @@ public class CreateWindow extends Application { FXMLLoader codewindow = new FXMLLoader(CreateWindow.class.getResource("frontend.fxml")); codewindow.setController(picComponents.getComponent(FrontendControllerInterface.class)); Parent code = codewindow.load(); + table = Table.init(picComponents); grid.add(table, 1, 1); grid.add(code, 0, 1); diff --git a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java index 42a7245..a88328e 100644 --- a/src/main/java/fabrik/simulator/pic16f84/DataRegister.java +++ b/src/main/java/fabrik/simulator/pic16f84/DataRegister.java @@ -39,8 +39,8 @@ public class DataRegister extends PICComponent implements DataRegisterInterface } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); System.out.println("DataRegister.\n"); initOrReset(); } diff --git a/src/main/java/fabrik/simulator/pic16f84/EEPROM.java b/src/main/java/fabrik/simulator/pic16f84/EEPROM.java index 19791a1..747b76f 100644 --- a/src/main/java/fabrik/simulator/pic16f84/EEPROM.java +++ b/src/main/java/fabrik/simulator/pic16f84/EEPROM.java @@ -1,7 +1,6 @@ package fabrik.simulator.pic16f84; -import eu.hansolo.tilesfx.Command; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; @@ -173,7 +172,7 @@ public class EEPROM extends PICComponent implements EEPROMInterface { } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/EmptyRegister.java b/src/main/java/fabrik/simulator/pic16f84/EmptyRegister.java index 535b694..6a31434 100644 --- a/src/main/java/fabrik/simulator/pic16f84/EmptyRegister.java +++ b/src/main/java/fabrik/simulator/pic16f84/EmptyRegister.java @@ -145,7 +145,7 @@ public class EmptyRegister implements DataRegisterInterface { } @Override - public void initialize(PICComponents picComponents) { + public void initialize(PICComponentLocator picComponents) { } } diff --git a/src/main/java/fabrik/simulator/pic16f84/IOPorts.java b/src/main/java/fabrik/simulator/pic16f84/IOPorts.java index d723dc6..f8f675e 100644 --- a/src/main/java/fabrik/simulator/pic16f84/IOPorts.java +++ b/src/main/java/fabrik/simulator/pic16f84/IOPorts.java @@ -227,8 +227,8 @@ public class IOPorts extends PICComponent implements IOPortInterface { } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); System.out.println("IOPorts.\n"); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/Interrupts.java b/src/main/java/fabrik/simulator/pic16f84/Interrupts.java index d734b1c..8561389 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Interrupts.java +++ b/src/main/java/fabrik/simulator/pic16f84/Interrupts.java @@ -1,9 +1,5 @@ package fabrik.simulator.pic16f84; -import eu.hansolo.tilesfx.Command; -import fabrik.simulator.pic16f84.interfaces.CommandInterface; -import fabrik.simulator.pic16f84.interfaces.DataRegisterInterface; -import fabrik.simulator.pic16f84.interfaces.FrontendControllerInterface; import fabrik.simulator.pic16f84.interfaces.InterruptInterface; public class Interrupts extends PICComponent implements InterruptInterface { @@ -66,7 +62,7 @@ public class Interrupts extends PICComponent implements InterruptInterface { @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/PICComponent.java b/src/main/java/fabrik/simulator/pic16f84/PICComponent.java index f5fe00e..c1c70ab 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PICComponent.java +++ b/src/main/java/fabrik/simulator/pic16f84/PICComponent.java @@ -9,27 +9,23 @@ public abstract class PICComponent { IOPortInterface ioPorts; TimerInterface timer; InterruptInterface interrupts; - //TableInterface table; - //WindowManagement createWindow; FrontendControllerInterface frontendController; WatchdogTimerInterface watchdogTimer; ProgramStackInterface programStack; CommandInterface commands; ToggleButtonInterface toggleButtonExt; - void initialize(PICComponents picComponents) { - toggleButtonExt = (ToggleButtonInterface) picComponents.getComponent(ToggleButtonInterface.class); - dataRegister = (DataRegisterInterface) picComponents.getComponent(DataRegisterInterface.class); - eeprom = (EEPROMInterface) picComponents.getComponent(EEPROMInterface.class); - ioPorts = (IOPortInterface) picComponents.getComponent(IOPortInterface.class); - preScaler = (PreScalerInterface) picComponents.getComponent(PreScalerInterface.class); - timer = (TimerInterface) picComponents.getComponent(TimerInterface.class); - interrupts = (InterruptInterface) picComponents.getComponent(InterruptInterface.class); - //table = (TableInterface) picComponents.getComponent(TableInterface.class); - //createWindow = (WindowManagement) picComponents.getComponent(WindowManagement.class); - frontendController = (FrontendControllerInterface) picComponents.getComponent(FrontendControllerInterface.class); - watchdogTimer = (WatchdogTimerInterface) picComponents.getComponent(WatchdogTimerInterface.class); - programStack = (ProgramStackInterface) picComponents.getComponent(ProgramStackInterface.class); - commands = (CommandInterface) picComponents.getComponent(CommandInterface.class); + void initialize(PICComponentLocator locator) { + toggleButtonExt = locator.getComponent(ToggleButtonInterface.class); + dataRegister = locator.getComponent(DataRegisterInterface.class); + eeprom = locator.getComponent(EEPROMInterface.class); + ioPorts = locator.getComponent(IOPortInterface.class); + preScaler = locator.getComponent(PreScalerInterface.class); + timer = locator.getComponent(TimerInterface.class); + interrupts = locator.getComponent(InterruptInterface.class); + frontendController = locator.getComponent(FrontendControllerInterface.class); + watchdogTimer = locator.getComponent(WatchdogTimerInterface.class); + programStack = locator.getComponent(ProgramStackInterface.class); + commands = locator.getComponent(CommandInterface.class); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/PICComponents.java b/src/main/java/fabrik/simulator/pic16f84/PICComponentLocator.java similarity index 67% rename from src/main/java/fabrik/simulator/pic16f84/PICComponents.java rename to src/main/java/fabrik/simulator/pic16f84/PICComponentLocator.java index e40062f..5b5395a 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PICComponents.java +++ b/src/main/java/fabrik/simulator/pic16f84/PICComponentLocator.java @@ -4,10 +4,11 @@ import fabrik.simulator.pic16f84.interfaces.*; import java.util.HashMap; -public class PICComponents { +public class PICComponentLocator { + // https://en.wikipedia.org/wiki/Service_locator_pattern private final HashMap, PICComponentInterface> componentCatalogue; - public PICComponents() { + public PICComponentLocator() { super(); this.componentCatalogue = new HashMap<>(); } @@ -16,8 +17,9 @@ public class PICComponents { this.componentCatalogue.put(componentClass, component); } - public PICComponentInterface getComponent(Class componentClass) { - return this.componentCatalogue.get(componentClass); + public T getComponent(Class componentClass) { + T component = (T) this.componentCatalogue.get(componentClass); + return component; } public void initAll() { diff --git a/src/main/java/fabrik/simulator/pic16f84/PreScaler.java b/src/main/java/fabrik/simulator/pic16f84/PreScaler.java index a54909f..f374f3e 100644 --- a/src/main/java/fabrik/simulator/pic16f84/PreScaler.java +++ b/src/main/java/fabrik/simulator/pic16f84/PreScaler.java @@ -54,7 +54,7 @@ public class PreScaler extends PICComponent implements PreScalerInterface { } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java b/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java index 0ee1725..b81b576 100644 --- a/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java +++ b/src/main/java/fabrik/simulator/pic16f84/ProgramStack.java @@ -48,7 +48,7 @@ public class ProgramStack extends PICComponent implements ProgramStackInterface } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/Table.java b/src/main/java/fabrik/simulator/pic16f84/Table.java index 3e0f734..e00ee18 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Table.java +++ b/src/main/java/fabrik/simulator/pic16f84/Table.java @@ -4,7 +4,6 @@ import fabrik.simulator.pic16f84.interfaces.*; import javafx.beans.property.SimpleStringProperty; import javafx.geometry.Insets; -import javafx.scene.chart.PieChart; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TableColumn; @@ -46,7 +45,7 @@ public class Table { return s; } - public static VBox init(PICComponents picComponents){ + public static VBox init(PICComponentLocator picComponents){ dataRegister = (DataRegisterInterface) picComponents.getComponent(DataRegisterInterface.class); commands = (CommandInterface) picComponents.getComponent(CommandInterface.class); ioPorts = (IOPortInterface) picComponents.getComponent(IOPortInterface.class); diff --git a/src/main/java/fabrik/simulator/pic16f84/Timer.java b/src/main/java/fabrik/simulator/pic16f84/Timer.java index 168d7f4..45415b8 100644 --- a/src/main/java/fabrik/simulator/pic16f84/Timer.java +++ b/src/main/java/fabrik/simulator/pic16f84/Timer.java @@ -1,8 +1,5 @@ package fabrik.simulator.pic16f84; -import fabrik.simulator.pic16f84.interfaces.DataRegisterInterface; -import fabrik.simulator.pic16f84.interfaces.FrontendControllerInterface; -import fabrik.simulator.pic16f84.interfaces.InterruptInterface; import fabrik.simulator.pic16f84.interfaces.TimerInterface; public class Timer extends PICComponent implements TimerInterface { @@ -67,7 +64,7 @@ public class Timer extends PICComponent implements TimerInterface { } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java b/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java index 1871d8a..4868ca9 100644 --- a/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java +++ b/src/main/java/fabrik/simulator/pic16f84/ToggleButtonGroupExt.java @@ -1,7 +1,6 @@ package fabrik.simulator.pic16f84; import com.gluonhq.charm.glisten.control.ToggleButtonGroup; -import fabrik.simulator.pic16f84.interfaces.IOPortInterface; import fabrik.simulator.pic16f84.interfaces.ToggleButtonInterface; import javafx.collections.ListChangeListener; import javafx.event.EventHandler; @@ -59,8 +58,8 @@ public class ToggleButtonGroupExt extends PICComponent implements ToggleButtonIn }; @Override - public void initialize(PICComponents picComponents) { + public void initialize(PICComponentLocator locator) { System.out.println("ToggleButtonGroupExt"); - super.initialize(picComponents); + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java index e1b3b7f..a2c16b4 100644 --- a/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java +++ b/src/main/java/fabrik/simulator/pic16f84/WatchdogTimer.java @@ -53,7 +53,7 @@ public class WatchdogTimer extends PICComponent implements WatchdogTimerInterfac } @Override - public void initialize(PICComponents picComponents) { - super.initialize(picComponents); + public void initialize(PICComponentLocator locator) { + super.initialize(locator); } } diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/PICComponentInterface.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/PICComponentInterface.java index 5803db2..763fbb9 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/PICComponentInterface.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/PICComponentInterface.java @@ -1,7 +1,7 @@ package fabrik.simulator.pic16f84.interfaces; -import fabrik.simulator.pic16f84.PICComponents; +import fabrik.simulator.pic16f84.PICComponentLocator; public interface PICComponentInterface { - void initialize(PICComponents picComponents); + void initialize(PICComponentLocator picComponents); } diff --git a/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java b/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java index a81e121..43d7721 100644 --- a/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java +++ b/src/test/java/fabrik/simulator/pic16f84/CommandsTests.java @@ -9,13 +9,13 @@ import org.junit.jupiter.api.Test; class CommandsTests { - PICComponents picComponents; + PICComponentLocator picComponents; public CommandsTests() {} @BeforeEach void resetComponents() { - picComponents = new PICComponents(); + picComponents = new PICComponentLocator(); } @Test diff --git a/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java b/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java index b40c794..b72b12e 100644 --- a/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java +++ b/src/test/java/fabrik/simulator/pic16f84/DataRegisterTests.java @@ -9,13 +9,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; class DataRegisterTests { - PICComponents picComponents; + PICComponentLocator picComponents; public DataRegisterTests() {} @BeforeEach void resetComponents() { - picComponents = new PICComponents(); + picComponents = new PICComponentLocator(); } diff --git a/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java b/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java index 604cc1a..5f8962c 100644 --- a/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java +++ b/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java @@ -20,14 +20,14 @@ import static org.mockito.Mockito.mock; class EEPROMTests { - PICComponents picComponents; + PICComponentLocator picComponents; String savedEEPROM; public EEPROMTests() {} @BeforeEach void resetComponentsAndReadEEPROM() throws IOException { - picComponents = new PICComponents(); + picComponents = new PICComponentLocator(); savedEEPROM = Files.readString(Path.of("eeprom.json")); } diff --git a/src/test/java/fabrik/simulator/pic16f84/WatchDogTimerTests.java b/src/test/java/fabrik/simulator/pic16f84/WatchDogTimerTests.java index d6ee7d6..3b601c4 100644 --- a/src/test/java/fabrik/simulator/pic16f84/WatchDogTimerTests.java +++ b/src/test/java/fabrik/simulator/pic16f84/WatchDogTimerTests.java @@ -10,11 +10,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; class WatchDogTimerTests { - private PICComponents picComponents; + private PICComponentLocator picComponents; @BeforeEach void resetComponents() { - picComponents = new PICComponents(); + picComponents = new PICComponentLocator(); } @Test From 0dd7494f5a649a7214fa631ecaf1cd0ce5592d94 Mon Sep 17 00:00:00 2001 From: Paul Martin Date: Mon, 28 Apr 2025 16:45:30 +0200 Subject: [PATCH 3/3] Create Main Class --- .../simulator/pic16f84/CreateWindow.java | 29 ++++++++++--------- .../java/fabrik/simulator/pic16f84/Main.java | 25 ++++++++++++++++ .../pic16f84/interfaces/WindowManagement.java | 4 ++- .../simulator/pic16f84/EEPROMTests.java | 2 -- 4 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 src/main/java/fabrik/simulator/pic16f84/Main.java diff --git a/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java b/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java index a9fe284..5ccceeb 100644 --- a/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java +++ b/src/main/java/fabrik/simulator/pic16f84/CreateWindow.java @@ -14,25 +14,14 @@ import javafx.stage.Stage; import java.io.IOException; import java.util.Objects; -public class CreateWindow extends Application { - private PICComponentLocator picComponents = new PICComponentLocator(); // Subjekt +public class CreateWindow extends Application implements WindowManagement { + private static PICComponentLocator picComponents; // Subjekt public static GridPane grid = new GridPane(); private static VBox table; @Override public void start(Stage primaryStage) throws IOException { - - picComponents.registerComponent(CommandInterface.class, new Commands()); - picComponents.registerComponent(ToggleButtonInterface.class, new ToggleButtonGroupExt()); picComponents.registerComponent(FrontendControllerInterface.class, new Controller_Frontend()); - picComponents.registerComponent(DataRegisterInterface.class, new DataRegister()); - picComponents.registerComponent(EEPROMInterface.class, new EEPROM()); - picComponents.registerComponent(InterruptInterface.class, new Interrupts()); - picComponents.registerComponent(IOPortInterface.class, new IOPorts()); - picComponents.registerComponent(PreScalerInterface.class, new PreScaler()); - picComponents.registerComponent(ProgramStackInterface.class, new ProgramStack()); - picComponents.registerComponent(TimerInterface.class, new Timer()); - picComponents.registerComponent(WatchdogTimerInterface.class, new WatchdogTimer()); picComponents.initAll(); FXMLLoader codewindow = new FXMLLoader(CreateWindow.class.getResource("frontend.fxml")); @@ -52,6 +41,10 @@ public class CreateWindow extends Application { primaryStage.show(); } + public void startFromMain(String[] args){ + launch(args); + } + public static void main(String[] args) { launch(args); } @@ -61,7 +54,15 @@ public class CreateWindow extends Application { table= Table.refresh(); grid.add(table, 1, 1); } + + @Override + public void initialize(PICComponentLocator picComponents) { + CreateWindow.picComponents = picComponents; + } + + public CreateWindow (){ + + } } - diff --git a/src/main/java/fabrik/simulator/pic16f84/Main.java b/src/main/java/fabrik/simulator/pic16f84/Main.java new file mode 100644 index 0000000..b59cd38 --- /dev/null +++ b/src/main/java/fabrik/simulator/pic16f84/Main.java @@ -0,0 +1,25 @@ +package fabrik.simulator.pic16f84; + +import fabrik.simulator.pic16f84.interfaces.*; + +public class Main { + private static final PICComponentLocator picComponents = new PICComponentLocator(); // Subjekt + + public static void main(String[] args) { + picComponents.registerComponent(CommandInterface.class, new Commands()); + picComponents.registerComponent(ToggleButtonInterface.class, new ToggleButtonGroupExt()); + picComponents.registerComponent(DataRegisterInterface.class, new DataRegister()); + picComponents.registerComponent(EEPROMInterface.class, new EEPROM()); + picComponents.registerComponent(InterruptInterface.class, new Interrupts()); + picComponents.registerComponent(IOPortInterface.class, new IOPorts()); + picComponents.registerComponent(PreScalerInterface.class, new PreScaler()); + picComponents.registerComponent(ProgramStackInterface.class, new ProgramStack()); + picComponents.registerComponent(TimerInterface.class, new Timer()); + picComponents.registerComponent(WatchdogTimerInterface.class, new WatchdogTimer()); + CreateWindow window = new CreateWindow(); + picComponents.registerComponent(WindowManagement.class, window); + picComponents.initAll(); + + window.startFromMain(new String[]{}); + } +} diff --git a/src/main/java/fabrik/simulator/pic16f84/interfaces/WindowManagement.java b/src/main/java/fabrik/simulator/pic16f84/interfaces/WindowManagement.java index b30939c..75c3dca 100644 --- a/src/main/java/fabrik/simulator/pic16f84/interfaces/WindowManagement.java +++ b/src/main/java/fabrik/simulator/pic16f84/interfaces/WindowManagement.java @@ -1,5 +1,7 @@ package fabrik.simulator.pic16f84.interfaces; public interface WindowManagement extends PICComponentInterface { - void refreshTable(); + static void refreshTable() {} + + static void startFromMain(String[] args) {} } diff --git a/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java b/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java index 5f8962c..d1174ab 100644 --- a/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java +++ b/src/test/java/fabrik/simulator/pic16f84/EEPROMTests.java @@ -15,7 +15,6 @@ import java.nio.file.Files; import java.nio.file.Path; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; @@ -133,5 +132,4 @@ class EEPROMTests { assertEquals(0, result); } - } \ No newline at end of file