From bb4e7423e31230bce9bba713fb10a1fd1aaa9529 Mon Sep 17 00:00:00 2001
From: jzitnik-dev <email@jzitnik.dev>
Date: Sun, 2 Mar 2025 21:17:11 +0100
Subject: [PATCH] test: Added some more tests

---
 pom.xml                                       |  6 ++++
 .../game/crafting/CraftingRecipeList.java     |  2 +-
 .../items/registry/items/IronPickaxe.java     |  2 +-
 .../game/mobs/EntityHurtAnimation.java        |  2 +-
 .../java/cz/jzitnik/game/mobs/EntityKill.java |  2 +-
 .../game/mobs/EntityLogicProvider.java        |  2 +-
 .../game/mobs/EntitySpawnProvider.java        |  9 ------
 .../game/crafting/CraftingRecipeListTest.java | 30 +++++++++++++++++++
 .../game/mobs/EntityHurtAnimationTest.java    | 18 +++++++++++
 .../cz/jzitnik/game/mobs/EntityKillTest.java  | 18 +++++++++++
 .../game/mobs/EntityLogicProviderTest.java    | 17 +++++++++++
 .../jzitnik/game/smelting/SmeltingTest.java   |  9 ++++--
 12 files changed, 100 insertions(+), 17 deletions(-)
 create mode 100644 src/test/java/cz/jzitnik/game/crafting/CraftingRecipeListTest.java
 create mode 100644 src/test/java/cz/jzitnik/game/mobs/EntityHurtAnimationTest.java
 create mode 100644 src/test/java/cz/jzitnik/game/mobs/EntityKillTest.java
 create mode 100644 src/test/java/cz/jzitnik/game/mobs/EntityLogicProviderTest.java

diff --git a/pom.xml b/pom.xml
index 19ee8d7..9c32aed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,6 +51,12 @@
             <artifactId>jackson-databind</artifactId>
             <version>2.18.2</version>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.13.2</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java
index 807a367..5f035b0 100644
--- a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java
+++ b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java
@@ -8,7 +8,7 @@ import org.reflections.Reflections;
 import java.util.*;
 
 public class CraftingRecipeList {
-    private static final List<CraftingRecipe> recipes = new ArrayList<>();
+    public static final List<CraftingRecipe> recipes = new ArrayList<>();
 
     static {
         registerRecipes();
diff --git a/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronPickaxe.java b/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronPickaxe.java
index dd4efe9..2b83057 100644
--- a/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronPickaxe.java
+++ b/src/main/java/cz/jzitnik/game/entities/items/registry/items/IronPickaxe.java
@@ -6,7 +6,7 @@ import cz.jzitnik.game.entities.items.Item;
 import cz.jzitnik.game.entities.items.ItemType;
 import cz.jzitnik.game.entities.items.ToolVariant;
 
-@ItemRegistry("wooden_pickaxe")
+@ItemRegistry("iron_pickaxe")
 public class IronPickaxe extends Item {
     public IronPickaxe() {
         super("iron_pickaxe", "Iron pickaxe", ItemType.PICKAXE, SpriteLoader.SPRITES.IRON_PICKAXE, ToolVariant.IRON, 13.5, 250, false);
diff --git a/src/main/java/cz/jzitnik/game/mobs/EntityHurtAnimation.java b/src/main/java/cz/jzitnik/game/mobs/EntityHurtAnimation.java
index f706a9e..1fdb716 100644
--- a/src/main/java/cz/jzitnik/game/mobs/EntityHurtAnimation.java
+++ b/src/main/java/cz/jzitnik/game/mobs/EntityHurtAnimation.java
@@ -7,7 +7,7 @@ import cz.jzitnik.game.annotations.EntityHurtAnimationHandler;
 import org.reflections.Reflections;
 
 public class EntityHurtAnimation {
-    private final HashMap<String, EntityHurtAnimationChanger> handlerList = new HashMap<>();
+    public final HashMap<String, EntityHurtAnimationChanger> handlerList = new HashMap<>();
 
     public EntityHurtAnimation() {
         registerHandlers();
diff --git a/src/main/java/cz/jzitnik/game/mobs/EntityKill.java b/src/main/java/cz/jzitnik/game/mobs/EntityKill.java
index 7aa682d..7a664dc 100644
--- a/src/main/java/cz/jzitnik/game/mobs/EntityKill.java
+++ b/src/main/java/cz/jzitnik/game/mobs/EntityKill.java
@@ -7,7 +7,7 @@ import cz.jzitnik.game.annotations.EntityKillHandler;
 import org.reflections.Reflections;
 
 public class EntityKill {
-    private final HashMap<String, EntityKillInterface> handlerList = new HashMap<>();
+    public final HashMap<String, EntityKillInterface> handlerList = new HashMap<>();
 
     public EntityKill() {
         registerHandlers();
diff --git a/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java b/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java
index 3c334cc..bde9842 100644
--- a/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java
+++ b/src/main/java/cz/jzitnik/game/mobs/EntityLogicProvider.java
@@ -14,7 +14,7 @@ import org.reflections.Reflections;
 
 public class EntityLogicProvider {
     private static final int CHUNK_SIZE = 20;
-    private final HashMap<String, EntityLogicInterface> logicList = new HashMap<>();
+    public final HashMap<String, EntityLogicInterface> logicList = new HashMap<>();
 
     @AllArgsConstructor
     @Getter
diff --git a/src/main/java/cz/jzitnik/game/mobs/EntitySpawnProvider.java b/src/main/java/cz/jzitnik/game/mobs/EntitySpawnProvider.java
index 9b00369..9474792 100644
--- a/src/main/java/cz/jzitnik/game/mobs/EntitySpawnProvider.java
+++ b/src/main/java/cz/jzitnik/game/mobs/EntitySpawnProvider.java
@@ -15,15 +15,6 @@ import org.reflections.Reflections;
 public class EntitySpawnProvider {
     private final List<EntitySpawnInterface> spawnList = new ArrayList<>();
 
-    @AllArgsConstructor
-    @Getter
-    public static class EntityLogicMobDTO {
-        private Game game;
-        private Block mob;
-        private int x;
-        private int y;
-    }
-
     public void update(Game game, Terminal terminal) {
         int[] playerLocation = game.getPlayerCords();
         int playerX = playerLocation[0];
diff --git a/src/test/java/cz/jzitnik/game/crafting/CraftingRecipeListTest.java b/src/test/java/cz/jzitnik/game/crafting/CraftingRecipeListTest.java
new file mode 100644
index 0000000..0f9f805
--- /dev/null
+++ b/src/test/java/cz/jzitnik/game/crafting/CraftingRecipeListTest.java
@@ -0,0 +1,30 @@
+package cz.jzitnik.game.crafting;
+
+import cz.jzitnik.game.entities.items.ItemBlockSupplier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class CraftingRecipeListTest {
+    @Test
+    @DisplayName("Verify that all items in the crafting recipe list are actual items")
+    void verifyAllItems() {
+        for (CraftingRecipe craftingRecipe : CraftingRecipeList.recipes) {
+            if (!craftingRecipe.isUsingRegex()) {
+                for (String[] arr : craftingRecipe.getRecipe()) {
+                    for (String item : arr) {
+                        if (item == null ) {
+                            continue;
+                        }
+                        assertDoesNotThrow(() -> ItemBlockSupplier.getItem(item), "Item " + item + " does not exist but is present as source in crafting recipe list.");
+                    }
+                }
+            }
+
+            assertDoesNotThrow(craftingRecipe.getItemSupplier()::get, "Output item does not exist for recipe: " + Arrays.deepToString(craftingRecipe.getRecipe()) + ".");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/cz/jzitnik/game/mobs/EntityHurtAnimationTest.java b/src/test/java/cz/jzitnik/game/mobs/EntityHurtAnimationTest.java
new file mode 100644
index 0000000..705d297
--- /dev/null
+++ b/src/test/java/cz/jzitnik/game/mobs/EntityHurtAnimationTest.java
@@ -0,0 +1,18 @@
+package cz.jzitnik.game.mobs;
+
+import cz.jzitnik.game.entities.items.ItemBlockSupplier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class EntityHurtAnimationTest {
+    @Test
+    @DisplayName("Test that entities exists for all entity spawn handlers")
+    void allEntitiesExists() {
+        EntityHurtAnimation entityHurtAnimation = new EntityHurtAnimation();
+        for (String entity : entityHurtAnimation.handlerList.keySet()) {
+            assertDoesNotThrow(() -> ItemBlockSupplier.getEntity(entity), "Entity " + entity + " does not exist but has hurt animation implemented.");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/cz/jzitnik/game/mobs/EntityKillTest.java b/src/test/java/cz/jzitnik/game/mobs/EntityKillTest.java
new file mode 100644
index 0000000..233b2d4
--- /dev/null
+++ b/src/test/java/cz/jzitnik/game/mobs/EntityKillTest.java
@@ -0,0 +1,18 @@
+package cz.jzitnik.game.mobs;
+
+import cz.jzitnik.game.entities.items.ItemBlockSupplier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class EntityKillTest {
+    @Test
+    @DisplayName("Test that entities exists for all entity spawn handlers")
+    void allEntitiesExists() {
+        EntityKill entityKill = new EntityKill();
+        for (String entity : entityKill.handlerList.keySet()) {
+            assertDoesNotThrow(() -> ItemBlockSupplier.getEntity(entity), "Entity " + entity + " does not exist but has a kill implemented.");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/cz/jzitnik/game/mobs/EntityLogicProviderTest.java b/src/test/java/cz/jzitnik/game/mobs/EntityLogicProviderTest.java
new file mode 100644
index 0000000..c2cad2b
--- /dev/null
+++ b/src/test/java/cz/jzitnik/game/mobs/EntityLogicProviderTest.java
@@ -0,0 +1,17 @@
+package cz.jzitnik.game.mobs;
+
+import cz.jzitnik.game.entities.items.ItemBlockSupplier;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+
+class EntityLogicProviderTest {
+    @Test
+    @DisplayName("Test that entities exists for all entity spawn handlers")
+    void allEntitiesExists() {
+        EntityLogicProvider entityLogicProvider = new EntityLogicProvider();
+        for (String entity : entityLogicProvider.logicList.keySet()) {
+            assertDoesNotThrow(() -> ItemBlockSupplier.getEntity(entity), "Entity " + entity + " does not exist but has a logic implemented.");
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java b/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java
index 2223ab8..1975693 100644
--- a/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java
+++ b/src/test/java/cz/jzitnik/game/smelting/SmeltingTest.java
@@ -4,7 +4,6 @@ import cz.jzitnik.game.entities.items.Item;
 import cz.jzitnik.game.entities.items.ItemBlockSupplier;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.function.Executable;
 
 import java.util.function.Supplier;
 
@@ -15,11 +14,15 @@ public class SmeltingTest {
     @DisplayName("Verity that all items in Smelting are actual items")
     void testAllItems() {
         for (String item : Smelting.smeltingList.keySet()) {
-            assertDoesNotThrow(() -> ItemBlockSupplier.getItem(item));
+            assertDoesNotThrow(() -> ItemBlockSupplier.getItem(item), "Item " + item + "does not exist but is present as source in Smelting.");
         }
 
         for (Supplier<Item> supplier: Smelting.smeltingList.values()) {
-            assertDoesNotThrow(supplier::get);
+            assertDoesNotThrow(supplier::get, "Item does not exist but is present as result in Smelting.");
+        }
+
+        for (String fuel : Smelting.fuelList.keySet()) {
+            assertDoesNotThrow(() -> ItemBlockSupplier.getItem(fuel), "Item " + fuel + "does not exist but is present as fuel in Smelting.");
         }
     }
 }
\ No newline at end of file