-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feat: Updated event system to work with channels.
- Loading branch information
Showing
8 changed files
with
330 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
src/main/java/edu/ntnu/idi/idatt2003/g40/mappe/service/event/EventChannel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| package edu.ntnu.idi.idatt2003.g40.mappe.service.event; | ||
|
|
||
| /** | ||
| * Interface representing an event channel. | ||
| * | ||
| * <p>Used to separate event types into groups.</p> | ||
| * | ||
| * <p>Decreases coupling and enables testing of event types.</p> | ||
| * */ | ||
| public interface EventChannel { | ||
|
|
||
| /** | ||
| * Getter method for enum name. | ||
| * | ||
| * @return String name of enum. | ||
| * */ | ||
| String getName(); | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
98 changes: 98 additions & 0 deletions
98
src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/service/event/EventManagerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,98 @@ | ||
| package edu.ntnu.idi.idatt2003.g40.mappe.service.event; | ||
|
|
||
| import edu.ntnu.idi.idatt2003.g40.mappe.view.ViewData; | ||
| import org.junit.jupiter.api.BeforeEach; | ||
| import org.junit.jupiter.api.Test; | ||
|
|
||
| import static org.junit.jupiter.api.Assertions.*; | ||
|
|
||
| class EventManagerTest { | ||
| private enum TestEventTypes implements EventChannel { | ||
| TEST_TYPE_1, | ||
| TEST_TYPE_2, | ||
| TEST_TYPE_3; | ||
|
|
||
| @Override | ||
| public String getName() { | ||
| return this.name(); | ||
| } | ||
| } | ||
|
|
||
| private GenericEventPublisher testEventPublisher; | ||
| private GenericEventPublisher testEventPublisher2; | ||
| private GenericEventPublisher testEventPublisher3; | ||
|
|
||
| private GenericEventSubscriber testEventSubscriber; | ||
| private GenericEventSubscriber testEventSubscriber2; | ||
|
|
||
| private EventManager testEventManager; | ||
|
|
||
| @BeforeEach | ||
| void setUp() { | ||
| testEventManager = new EventManager(); | ||
|
|
||
| testEventSubscriber = new GenericEventSubscriber(); | ||
| testEventSubscriber2 = new GenericEventSubscriber(); | ||
|
|
||
| testEventPublisher = new GenericEventPublisher(testEventManager, TestEventTypes.TEST_TYPE_1); | ||
| testEventPublisher2 = new GenericEventPublisher(testEventManager, TestEventTypes.TEST_TYPE_2); | ||
| testEventPublisher3 = new GenericEventPublisher(testEventManager, TestEventTypes.TEST_TYPE_3); | ||
|
|
||
| testEventManager.addSubscriber(testEventSubscriber, TestEventTypes.TEST_TYPE_1); | ||
| testEventManager.addSubscriber(testEventSubscriber2, TestEventTypes.TEST_TYPE_2); | ||
| } | ||
|
|
||
| @Test | ||
| void firedEventCaughtByCorrectSubscriber() { | ||
| assertFalse(testEventSubscriber.invokedEvent); | ||
| testEventPublisher.fireEvent(); | ||
| assertTrue(testEventSubscriber.invokedEvent); | ||
| } | ||
|
|
||
| @Test | ||
| void firedEventNotCaughtByIncorrectSubscriber() { | ||
| assertFalse(testEventSubscriber.invokedEvent); | ||
| testEventPublisher2.fireEvent(); | ||
| assertFalse(testEventSubscriber.invokedEvent); | ||
| } | ||
|
|
||
| @Test | ||
| void firedEventThrowsErrorWhenNoSubscribers() { | ||
| assertFalse(testEventSubscriber.invokedEvent); | ||
| assertThrows(IllegalArgumentException.class, () -> { | ||
| testEventPublisher3.fireEvent(); | ||
| }); | ||
| assertFalse(testEventSubscriber.invokedEvent); | ||
| } | ||
|
|
||
| private class GenericEventPublisher implements EventPublisher { | ||
|
|
||
| private final ViewData viewData; | ||
| private final EventData<ViewData> eventData; | ||
| private final EventManager eventManager; | ||
|
|
||
| public GenericEventPublisher(final EventManager eventManager, final TestEventTypes eventType) { | ||
| viewData = new ViewData("Test"); | ||
| eventData = new EventData<ViewData>(eventType, viewData); | ||
| this.eventManager = eventManager; | ||
| } | ||
|
|
||
| public void fireEvent() { | ||
| invoke(eventData, eventManager); | ||
| } | ||
|
|
||
| @Override | ||
| public <T> void invoke(EventData<T> data, EventManager eventManager) { | ||
| eventManager.invokeEvent(data); | ||
| } | ||
| } | ||
|
|
||
| private class GenericEventSubscriber implements EventSubscriber { | ||
| public boolean invokedEvent = false; | ||
|
|
||
| @Override | ||
| public <T> void handleEvent(EventData<T> data) { | ||
| invokedEvent = true; | ||
| } | ||
| } | ||
| } |
69 changes: 69 additions & 0 deletions
69
src/test/java/edu/ntnu/idi/idatt2003/g40/mappe/view/ViewControllerTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| package edu.ntnu.idi.idatt2003.g40.mappe.view; | ||
|
|
||
| import static org.junit.jupiter.api.Assertions.assertFalse; | ||
| import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
|
||
| import edu.ntnu.idi.idatt2003.g40.mappe.service.event.EventManager; | ||
| import javafx.scene.control.Button; | ||
| import javafx.scene.layout.Pane; | ||
| import javafx.stage.Stage; | ||
| import org.junit.jupiter.api.Test; | ||
| import org.testfx.framework.junit5.ApplicationTest; | ||
|
|
||
| class ViewControllerTest extends ApplicationTest { | ||
| private EventManager testEventManager; | ||
| private GenericViewController testViewController; | ||
| private GenericViewElement testViewElement; | ||
|
|
||
| @Override | ||
| public void start(Stage stage) { | ||
| testEventManager = new EventManager(); | ||
| testViewElement = new ViewControllerTest.GenericViewElement(new Pane()); | ||
| testViewController = new GenericViewController(testViewElement, testEventManager); | ||
| } | ||
|
|
||
| @Test | ||
| void controllerElementSetsButtonBehavior() { | ||
| assertFalse(testViewElement.buttonPressed); | ||
| testViewElement.getInteractableButton().fire(); | ||
| assertTrue(testViewElement.buttonPressed); | ||
| } | ||
|
|
||
| private class GenericViewElement extends ViewElement<Pane> { | ||
| public Boolean buttonPressed = false; | ||
| private Button interactableButton; | ||
|
|
||
| protected GenericViewElement(final Pane rootPane) { | ||
| super(rootPane); | ||
| } | ||
|
|
||
| @Override | ||
| protected void initLayout() { | ||
| interactableButton = new Button("Click me!"); | ||
| getButtons().add(interactableButton); | ||
| } | ||
|
|
||
| public Button getInteractableButton() { | ||
| return interactableButton; | ||
| } | ||
|
|
||
| @Override | ||
| protected void initStyling() { } | ||
| } | ||
|
|
||
| private class GenericViewController extends ViewController<ViewControllerTest.GenericViewElement> { | ||
|
|
||
| protected GenericViewController(final ViewControllerTest.GenericViewElement viewElement, | ||
| final EventManager eventManager) | ||
| throws IllegalArgumentException { | ||
| super(viewElement, eventManager); | ||
| } | ||
|
|
||
| @Override | ||
| protected void initInteractions() { | ||
| getViewElement().getInteractableButton().setOnAction(e -> { | ||
| getViewElement().buttonPressed = true; | ||
| }); | ||
| } | ||
| } | ||
| } |
Oops, something went wrong.