From e93c2cc121d4ab0c3764664cb49d7a2972f2f58f Mon Sep 17 00:00:00 2001 From: alexcrea Date: Sat, 5 Jul 2025 23:04:42 +0200 Subject: [PATCH] add unit test for new features --- .../delilaheve/util/EnchantmentUtilTests.java | 22 +++--- .../cuanvil/anvil/AnvilFuseTests.java | 10 +-- .../cuanvil/api/ConflictApiTests.java | 8 +- .../api/CustomAnvilRecipeApiTests.java | 75 ++++++++++++------- .../cuanvil/api/UnitRepairApiTests.java | 8 +- .../cuanvil/data/AnvilClickTestData.java | 7 ++ .../cuanvil/data/AnvilFuseTestData.java | 7 ++ .../cuanvil/data/TestDataContainer.java | 8 +- .../cuanvil/util/AnvilFuseTestUtil.java | 66 ++++++++++++---- 9 files changed, 145 insertions(+), 66 deletions(-) diff --git a/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java b/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java index 48efc6b..10ea252 100644 --- a/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java +++ b/src/test/java/io/delilaheve/util/EnchantmentUtilTests.java @@ -88,16 +88,16 @@ public class EnchantmentUtilTests extends ConfigResetCustomAnvilTest { ); // Test with no permission - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData2); + nullResultData.executeTest(anvil, player); + nullResultData2.executeTest(anvil, player); // Add permission PermissionAttachment attachment = player.addAttachment(plugin); attachment.setPermission(permission, true); // Test with new permission - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData2); + legalResultData.executeTest(anvil, player); + legalResultData2.executeTest(anvil, player); } @Test @@ -161,24 +161,24 @@ public class EnchantmentUtilTests extends ConfigResetCustomAnvilTest { ); // Test failing result first - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData2); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData3); + nullResultData2.executeTest(anvil, player); + nullResultData3.executeTest(anvil, player); // Test working sharpness 2 - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); // Set merge limit to 2 & test ConfigHolder.DEFAULT_CONFIG.getConfig().set("disable-merge-over.minecraft:sharpness", 1); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); // Add permission PermissionAttachment attachment = player.addAttachment(plugin); attachment.setPermission(permission, true); // Test working sharpness 2 - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData2); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData3); + legalResultData.executeTest(anvil, player); + legalResultData2.executeTest(anvil, player); + legalResultData3.executeTest(anvil, player); } } diff --git a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java index 60df37e..19f1d6f 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/anvil/AnvilFuseTests.java @@ -67,7 +67,7 @@ public class AnvilFuseTests extends SharedCustomAnvilTest { 5 ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, data); + data.executeTest(anvil, player); } @Test @@ -87,7 +87,7 @@ public class AnvilFuseTests extends SharedCustomAnvilTest { 5 ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, data); + data.executeTest(anvil, player); } @Test @@ -101,7 +101,7 @@ public class AnvilFuseTests extends SharedCustomAnvilTest { null ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, data); + data.executeTest(anvil, player); } // Note: currently anvil can only have null name. maybe handle differently later @@ -117,10 +117,10 @@ public class AnvilFuseTests extends SharedCustomAnvilTest { AnvilFuseTestData data = new AnvilFuseTestData( base, null, expected, expected, null, - 1, 1, null + 1, null, 1 ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, data); + data.executeTest(anvil, player); } } diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java index b1d7564..1a9a256 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/api/ConflictApiTests.java @@ -71,7 +71,7 @@ public class ConflictApiTests extends ConfigResetCustomAnvilTest { Assertions.assertNotNull(sharpness); // Testing default conflict (illegal item should not be produced) - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); // Try to find & remove conflict EnchantConflictGroup conflict = findGroup("sword_enchant_conflict"); @@ -79,7 +79,7 @@ public class ConflictApiTests extends ConfigResetCustomAnvilTest { // Test what happen when we remove the conflict (illegal item should be allowed) ConflictAPI.removeConflict(conflict); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); // We create and add a new conflict ConflictBuilder builder = new ConflictBuilder("sword_enchant_conflict"); @@ -88,11 +88,11 @@ public class ConflictApiTests extends ConfigResetCustomAnvilTest { // Nothing should change as it is not new: it was previously deleted Assertions.assertFalse(builder.registerIfNew()); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); // Now the conflict should be registered and conflict should exist Assertions.assertTrue(builder.registerIfAbsent()); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); } @Test diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java index 5e9e716..651b873 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/api/CustomAnvilRecipeApiTests.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.api; import org.bukkit.Material; +import org.bukkit.event.Event; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.AnvilInventory; import org.bukkit.inventory.Inventory; @@ -11,10 +12,11 @@ import org.junit.jupiter.api.Test; import org.mockbukkit.mockbukkit.entity.PlayerMock; import org.mockbukkit.mockbukkit.inventory.ItemStackMock; import xyz.alexcrea.cuanvil.config.ConfigHolder; +import xyz.alexcrea.cuanvil.data.AnvilClickTestData; +import xyz.alexcrea.cuanvil.data.TestDataContainer; import xyz.alexcrea.cuanvil.recipe.AnvilCustomRecipe; import xyz.alexcrea.cuanvil.tests.ConfigResetCustomAnvilTest; import xyz.alexcrea.cuanvil.data.AnvilFuseTestData; -import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil; import static org.junit.jupiter.api.Assertions.*; @@ -57,14 +59,14 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { ); // Testing default conflict (no recipe exist) - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); // Add and test recipe AnvilRecipeBuilder builder = new AnvilRecipeBuilder(recipeName); builder.setExactCount(true).setLeftItem(stick).setResultItem(stick).setLevelCostPerCraft(2); assertTrue(builder.registerIfAbsent()); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); AnvilCustomRecipe recipe = getByName(recipeName); assertNotNull(recipe); @@ -72,21 +74,21 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { // Remove recipe assertTrue(CustomAnvilRecipeApi.removeRecipe(recipe)); assertFalse(CustomAnvilRecipeApi.removeRecipe(recipe)); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); recipe = getByName(recipeName); assertNull(recipe); // Try to add deleted recipe with no override (should not add) assertFalse(CustomAnvilRecipeApi.addRecipe(builder, false)); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); recipe = getByName(recipeName); assertNull(recipe); // Try to add deleted recipe with override (should add) assertTrue(CustomAnvilRecipeApi.addRecipe(builder, true)); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); recipe = getByName(recipeName); assertNotNull(recipe); @@ -119,7 +121,7 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { null, null ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); AnvilRecipeBuilder builder = new AnvilRecipeBuilder(recipeName); builder.setExactCount(false) @@ -130,8 +132,8 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { assertTrue(builder.registerIfAbsent()); // Now working test - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData1); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData2); + legalResultData1.executeTest(anvil, player); + legalResultData2.executeTest(anvil, player); } @Test @@ -142,26 +144,37 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { ItemStack stick5 = new ItemStackMock(Material.STICK, 5); ItemStack stick10 = new ItemStackMock(Material.STICK, 10); + AnvilFuseTestData nullResultData = new AnvilFuseTestData( stick, stick, null ); - AnvilFuseTestData legalResultData1 = new AnvilFuseTestData( + TestDataContainer legalResultData1 = new TestDataContainer(new AnvilFuseTestData( stick, stick, null, stick2, null, 1, null, null - ); + ), new AnvilClickTestData( + null, null, null, stick2, + 1, + Event.Result.DENY, true, Event.Result.DENY - AnvilFuseTestData legalResultData2 = new AnvilFuseTestData( + )); + + TestDataContainer legalResultData2 = new TestDataContainer(new AnvilFuseTestData( stick5, stick, null, stick10, null, 4, null, null - ); + ), new AnvilClickTestData( + null, null, null, stick10, + 4, + Event.Result.DENY, true, Event.Result.DENY - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + )); + + nullResultData.executeTest(anvil, player); AnvilRecipeBuilder builder = new AnvilRecipeBuilder(recipeName); builder.setExactCount(false) @@ -173,8 +186,8 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { assertTrue(builder.registerIfAbsent()); // Now working test - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData1); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData2); + legalResultData1.executeTest(anvil, player); + legalResultData2.executeTest(anvil, player); } @Test @@ -190,21 +203,30 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { null ); - AnvilFuseTestData legalResultData1 = new AnvilFuseTestData( + TestDataContainer legalResultData1 = new TestDataContainer(new AnvilFuseTestData( stick, stick, null, stick2, null, 2, null, null - ); + ), new AnvilClickTestData( + null, null, null, stick2, + 2, + Event.Result.DENY, true, Event.Result.DENY - AnvilFuseTestData legalResultData2 = new AnvilFuseTestData( + )); + + TestDataContainer legalResultData2 = new TestDataContainer(new AnvilFuseTestData( stick5, stick, null, stick10, null, 5, null, null - ); + ), new AnvilClickTestData( + null, null, null, stick10, + 5, + Event.Result.DENY, true, Event.Result.DENY + )); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); AnvilRecipeBuilder builder = new AnvilRecipeBuilder(recipeName); builder.setExactCount(false) @@ -216,14 +238,17 @@ public class CustomAnvilRecipeApiTests extends ConfigResetCustomAnvilTest { assertTrue(builder.registerIfAbsent()); // Now working test - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData1); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData2); + legalResultData1.executeTest(anvil, player); + //TODO check exp ? + System.out.printf(String.valueOf(player.getExp())); + legalResultData2.executeTest(anvil, player); + //TODO check exp ? } @Nullable - public static AnvilCustomRecipe getByName(String name){ + public static AnvilCustomRecipe getByName(String name) { for (AnvilCustomRecipe registeredRecipe : CustomAnvilRecipeApi.getRegisteredRecipes()) { - if(registeredRecipe.getName().contentEquals(name)){ + if (registeredRecipe.getName().contentEquals(name)) { return registeredRecipe; } } diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java index 8166797..adda4e1 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/api/UnitRepairApiTests.java @@ -58,7 +58,7 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest { 2 ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); } @Test @@ -76,7 +76,7 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest { // Remove unit repair assertTrue(UnitRepairApi.removeUnitRepair(Material.DIAMOND, Material.DIAMOND_PICKAXE)); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); // see override assertFalse(UnitRepairApi.addUnitRepair(Material.DIAMOND, Material.DIAMOND_PICKAXE, 0.25)); @@ -107,12 +107,12 @@ public class UnitRepairApiTests extends ConfigResetCustomAnvilTest { 2 ); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, nullResultData); + nullResultData.executeTest(anvil, player); // Add unit repair assertTrue(UnitRepairApi.addUnitRepair(Material.STICK, Material.DIAMOND_PICKAXE)); assertFalse(UnitRepairApi.addUnitRepair(Material.STICK, Material.DIAMOND_PICKAXE)); - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, legalResultData); + legalResultData.executeTest(anvil, player); } } diff --git a/src/test/java/xyz/alexcrea/cuanvil/data/AnvilClickTestData.java b/src/test/java/xyz/alexcrea/cuanvil/data/AnvilClickTestData.java index 65d7ddb..002b194 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/data/AnvilClickTestData.java +++ b/src/test/java/xyz/alexcrea/cuanvil/data/AnvilClickTestData.java @@ -1,8 +1,11 @@ package xyz.alexcrea.cuanvil.data; +import org.bukkit.entity.Player; import org.bukkit.event.Event; +import org.bukkit.inventory.AnvilInventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil; public record AnvilClickTestData( @Nullable ItemStack leftItem, @@ -47,4 +50,8 @@ public record AnvilClickTestData( int levelCost) { this(expectedCursor, levelCost, null); } + + public void executeTest(AnvilInventory anvil, Player player){ + AnvilFuseTestUtil.executeAnvilClickTest(anvil, player, this); + } } diff --git a/src/test/java/xyz/alexcrea/cuanvil/data/AnvilFuseTestData.java b/src/test/java/xyz/alexcrea/cuanvil/data/AnvilFuseTestData.java index a01d0ab..8542d41 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/data/AnvilFuseTestData.java +++ b/src/test/java/xyz/alexcrea/cuanvil/data/AnvilFuseTestData.java @@ -1,7 +1,10 @@ package xyz.alexcrea.cuanvil.data; +import org.bukkit.entity.HumanEntity; +import org.bukkit.inventory.AnvilInventory; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.Nullable; +import xyz.alexcrea.cuanvil.util.AnvilFuseTestUtil; public record AnvilFuseTestData( @Nullable ItemStack leftItem, @@ -51,4 +54,8 @@ public record AnvilFuseTestData( ); } + public void executeTest(AnvilInventory anvil, HumanEntity player){ + AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, this); + } + } diff --git a/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java b/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java index 2c8ff93..b4f47a5 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java +++ b/src/test/java/xyz/alexcrea/cuanvil/data/TestDataContainer.java @@ -16,17 +16,17 @@ public record TestDataContainer( ) { public void executeTest(AnvilInventory anvil, Player player) { - executeFuseTest(anvil, player); - if (clickData != null) executeClickTest(anvil, player); + fuseData.executeTest(anvil, player); + if (clickData != null) clickData.executeTest(anvil, player); } public void executeFuseTest(AnvilInventory anvil, HumanEntity player) { - AnvilFuseTestUtil.executeAnvilFuseTest(anvil, player, fuseData); + fuseData.executeTest(anvil, player); } public void executeClickTest(AnvilInventory anvil, Player player) { Assertions.assertNotNull(clickData); - AnvilFuseTestUtil.executeAnvilClickTest(anvil, player, clickData); + clickData.executeTest(anvil, player); } public @NotNull TestDataContainer nullifyResult() { diff --git a/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java b/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java index b73b884..1d3c5f4 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java +++ b/src/test/java/xyz/alexcrea/cuanvil/util/AnvilFuseTestUtil.java @@ -110,22 +110,60 @@ public class AnvilFuseTestUtil { Assertions.assertEquals(player.getOpenInventory().getTopInventory(), anvil, "Openned inventory is not anvil"); + ItemStack afterLeft = data.expectedAfterLeftPlaced(); + ItemStack afterRight = data.expectedAfterRightPlaced(); + ItemStack afterBoth = data.expectedResult(); + // Fist, test null result(s) + // Test with only the left item - anvil.setItem(1, null); // We clear the right slot in case something was there - testPlacingItem(anvil, player, - 0, data.expectedPriceAfterLeftPlaced(), - data.leftItem(), data.expectedAfterLeftPlaced()); + if(afterLeft == null){ + anvil.setItem(1, null); // We clear the right slot in case something was there + testPlacingItem(anvil, player, + 0, data.expectedPriceAfterLeftPlaced(), + data.leftItem(), null); + } // Test with only the right item - anvil.setItem(0, null); // We only want the right item. so we remove the left one - testPlacingItem(anvil, player, - 1, data.expectedPriceAfterRightPlaced(), - data.rightItem(), data.expectedAfterRightPlaced()); + if(afterRight == null){ + anvil.setItem(0, null); // We only want the right item. so we remove the left one + testPlacingItem(anvil, player, + 1, data.expectedPriceAfterRightPlaced(), + data.rightItem(), null); + } // Test with both placed - testPlacingItem(anvil, player, - 0, data.expectedPriceAfterBothPlaced(), - data.leftItem(), data.expectedResult()); + if(afterBoth == null){ + anvil.setItem(0, data.leftItem()); + testPlacingItem(anvil, player, + 1, data.expectedPriceAfterBothPlaced(), + data.rightItem(), data.expectedResult()); + } + + // Then, test non null result(s) + + // Test with only the left item + if(afterLeft != null){ + anvil.setItem(1, null); // We clear the right slot in case something was there + testPlacingItem(anvil, player, + 0, data.expectedPriceAfterLeftPlaced(), + data.leftItem(), afterLeft); + } + + // Test with only the right item + if(afterRight != null){ + anvil.setItem(0, null); // We only want the right item. so we remove the left one + testPlacingItem(anvil, player, + 1, data.expectedPriceAfterRightPlaced(), + data.rightItem(), afterRight); + } + + // Test with both placed + if(afterBoth != null){ + anvil.setItem(0, data.leftItem()); + testPlacingItem(anvil, player, + 1, data.expectedPriceAfterBothPlaced(), + data.rightItem(), afterBoth); + } } public static void executeAnvilClickTest( @@ -139,6 +177,7 @@ public class AnvilFuseTestUtil { ItemStack result = anvil.getResult(); player.setLevel(0); + player.setExp(0); player.setItemOnCursor(null); // Do a test with not enough level @@ -151,6 +190,7 @@ public class AnvilFuseTestUtil { assertEqual(null, player.getItemOnCursor()); } player.setLevel(data.levelCost()); + player.setExp(0); player.setItemOnCursor(null); simulateClick(anvil, player, data.expectedResult()); @@ -208,7 +248,7 @@ public class AnvilFuseTestUtil { public static void assertEqual(@Nullable ItemStack expected, @Nullable ItemStack other) { boolean secondIsAir = isAir(other); if (isAir(expected)) - Assertions.assertTrue(secondIsAir, "Item " + other + " was not air but was expected to be"); + Assertions.assertTrue(secondIsAir, "Item " + other + " was not air but was expected to be."); else { Assertions.assertFalse(secondIsAir, "Item " + other + " is air but was expected to be " + expected); @@ -225,7 +265,7 @@ public class AnvilFuseTestUtil { public static void assertPriceEqual(Integer expectedPrice, int price) { if (expectedPrice == null) return; - Assertions.assertEquals(expectedPrice, price); + Assertions.assertEquals(expectedPrice, price, "Price of anvil fuse was wrong"); } }