diff --git a/pom.xml b/pom.xml
index 7c01dbe..07dd66f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,19 @@
javafx-fxml
${javafx.version}
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.10.0
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.10.0
+ test
+
diff --git a/src/main/java/com/andrewlalis/javafx_scene_router/RouteHistory.java b/src/main/java/com/andrewlalis/javafx_scene_router/RouteHistory.java
index 63bb612..e9cc2b9 100644
--- a/src/main/java/com/andrewlalis/javafx_scene_router/RouteHistory.java
+++ b/src/main/java/com/andrewlalis/javafx_scene_router/RouteHistory.java
@@ -124,4 +124,20 @@ public class RouteHistory {
}
return breadCrumbs;
}
+
+ /**
+ * Gets an unmodifiable view of the items in this history.
+ * @return This history's items.
+ */
+ public List getItems() {
+ return Collections.unmodifiableList(items);
+ }
+
+ /**
+ * Gets the current item index.
+ * @return The current item index.
+ */
+ public int getCurrentItemIndex() {
+ return currentItemIndex;
+ }
}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index acf59e9..12979d8 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -2,9 +2,8 @@
* The JavaFX-Scene-Router module. Require this to use the library.
*/
module com.andrewlalis.javafx_scene_router {
- requires javafx.base;
- requires javafx.controls;
requires javafx.fxml;
+ requires javafx.graphics;
exports com.andrewlalis.javafx_scene_router;
}
diff --git a/src/test/java/com/andrewlalis/javafx_scene_router/RouteHistoryTest.java b/src/test/java/com/andrewlalis/javafx_scene_router/RouteHistoryTest.java
new file mode 100644
index 0000000..38d409d
--- /dev/null
+++ b/src/test/java/com/andrewlalis/javafx_scene_router/RouteHistoryTest.java
@@ -0,0 +1,89 @@
+package com.andrewlalis.javafx_scene_router;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class RouteHistoryTest {
+ @Test
+ public void testPush() {
+ var history = new RouteHistory();
+ assertTrue(history.getItems().isEmpty());
+ assertEquals(-1, history.getCurrentItemIndex());
+ history.push("test", "Hello");
+ assertEquals(history.getItems().size(), 1);
+ assertEquals(0, history.getCurrentItemIndex());
+ assertEquals("Hello", history.getCurrentContext());
+ }
+
+ @Test
+ public void testGetCurrentContext() {
+ var history = new RouteHistory();
+ assertNull(history.getCurrentContext());
+ history.push("test", 5);
+ assertEquals(Integer.valueOf(5), history.getCurrentContext());
+ history.push("test2", null);
+ assertNull(history.getCurrentContext());
+ history.back();
+ assertEquals(Integer.valueOf(5), history.getCurrentContext());
+ }
+
+ @Test
+ public void testBack() {
+ var history = new RouteHistory();
+ assertFalse(history.canGoBack());
+ assertTrue(history.back().isEmpty());
+ history.push("a", "a");
+ assertFalse(history.canGoBack());
+ history.push("b", "b");
+ assertTrue(history.canGoBack());
+ var prev = history.back();
+ assertTrue(prev.isPresent());
+ assertEquals(new RouteHistoryItem("a", "a"), prev.get());
+ assertFalse(history.canGoBack());
+ assertTrue(history.back().isEmpty());
+ }
+
+ @Test
+ public void testForward() {
+ var history = new RouteHistory();
+ assertFalse(history.canGoForward());
+ assertTrue(history.forward().isEmpty());
+ history.push("a", "a");
+ history.push("b", "b");
+ history.push("c", "c");
+ assertFalse(history.canGoForward());
+ assertTrue(history.forward().isEmpty());
+ history.back();
+ assertTrue(history.canGoForward());
+ var next = history.forward();
+ assertTrue(next.isPresent());
+ assertEquals(new RouteHistoryItem("c", "c"), next.get());
+ }
+
+ @Test
+ public void testClear() {
+ var history = new RouteHistory();
+ history.push("a", "a");
+ history.clear();
+ assertFalse(history.canGoBack());
+ assertFalse(history.canGoForward());
+ assertNull(history.getCurrentContext());
+ assertTrue(history.getItems().isEmpty());
+ assertEquals(-1, history.getCurrentItemIndex());
+ }
+
+ @Test
+ public void testGetBreadCrumbs() {
+ var h1 = new RouteHistory();
+ var b1 = h1.getBreadCrumbs();
+ assertTrue(b1.isEmpty());
+
+ var h2 = new RouteHistory();
+ h2.push("a", "a");
+ var b2 = h2.getBreadCrumbs();
+ assertEquals(b2.size(), 1);
+ assertEquals("a", b2.get(0).route());
+ assertTrue(b2.get(0).current());
+ }
+}