From b304ce14e16790327554f2880e21ffa669c5018b Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 12 Jun 2020 19:18:29 +0200 Subject: [PATCH] [CI skip] Added lots more unit tests, some will be skipped --- .../implementation/items/food/MagicSugar.java | 2 +- .../testing/interfaces/SlimefunItemTest.java | 21 ++++++- .../{ => backpacks}/TestEnderBackpack.java | 4 +- .../implementations/food/TestDietCookie.java | 57 +++++++++++++++++++ .../implementations/food/TestMagicSugar.java | 57 +++++++++++++++++++ .../implementations/food/TestMeatJerky.java | 56 ++++++++++++++++++ .../food/TestMonsterJerky.java | 57 +++++++++++++++++++ 7 files changed, 250 insertions(+), 4 deletions(-) rename src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/{ => backpacks}/TestEnderBackpack.java (96%) create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestDietCookie.java create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMagicSugar.java create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMeatJerky.java create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMonsterJerky.java diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java index 50942cbb6..fb7af2b3e 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/food/MagicSugar.java @@ -38,7 +38,7 @@ public class MagicSugar extends SimpleSlimefunItem { ItemUtils.consumeItem(e.getItem(), false); } - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, 3)); }; } diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/interfaces/SlimefunItemTest.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/interfaces/SlimefunItemTest.java index 3e8bbb775..00a102426 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/interfaces/SlimefunItemTest.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/interfaces/SlimefunItemTest.java @@ -3,21 +3,40 @@ package io.github.thebusybiscuit.slimefun4.testing.interfaces; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.EquipmentSlot; import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler; import me.mrCookieSlime.Slimefun.Objects.handlers.ItemUseHandler; +@FunctionalInterface public interface SlimefunItemTest { + /** + * This method should construct a new {@link SlimefunItem} of type T. + * + * + * @param plugin + * The current instance of {@link SlimefunPlugin} + * @param id + * An id for this {@link SlimefunItem} + * + * @return A newly constructed {@link SlimefunItem} + */ T registerSlimefunItem(SlimefunPlugin plugin, String id); - default void simulateNormalRightClick(Player player, T item) { + default void simulateRightClick(Player player, T item) { PlayerInteractEvent e = new PlayerInteractEvent(player, Action.RIGHT_CLICK_AIR, item.getItem().clone(), null, null, EquipmentSlot.HAND); PlayerRightClickEvent event = new PlayerRightClickEvent(e); item.callItemHandler(ItemUseHandler.class, handler -> handler.onRightClick(event)); } + default void simulateConsumption(Player player, T item) { + PlayerItemConsumeEvent event = new PlayerItemConsumeEvent(player, item.getItem().clone()); + item.callItemHandler(ItemConsumptionHandler.class, handler -> handler.onConsume(event, player, event.getItem())); + } + } diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/TestEnderBackpack.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/backpacks/TestEnderBackpack.java similarity index 96% rename from src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/TestEnderBackpack.java rename to src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/backpacks/TestEnderBackpack.java index 7487d292e..d85469718 100644 --- a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/TestEnderBackpack.java +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/backpacks/TestEnderBackpack.java @@ -1,4 +1,4 @@ -package io.github.thebusybiscuit.slimefun4.testing.tests.items.implementations; +package io.github.thebusybiscuit.slimefun4.testing.tests.items.implementations.backpacks; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -46,7 +46,7 @@ public class TestEnderBackpack implements SlimefunItemTest { Player player = server.addPlayer(); EnderBackpack backpack = registerSlimefunItem(plugin, "TEST_ENDER_BACKPACK"); - simulateNormalRightClick(player, backpack); + simulateRightClick(player, backpack); // We expect the Enderchest to be open now Assertions.assertEquals(player.getEnderChest(), player.getOpenInventory().getTopInventory()); diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestDietCookie.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestDietCookie.java new file mode 100644 index 000000000..1d20f6276 --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestDietCookie.java @@ -0,0 +1,57 @@ +package io.github.thebusybiscuit.slimefun4.testing.tests.items.implementations.food; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import io.github.thebusybiscuit.slimefun4.implementation.items.food.DietCookie; +import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; +import io.github.thebusybiscuit.slimefun4.testing.interfaces.SlimefunItemTest; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class TestDietCookie implements SlimefunItemTest { + + private static ServerMock server; + private static SlimefunPlugin plugin; + + @BeforeAll + public static void load() { + server = MockBukkit.mock(); + plugin = MockBukkit.load(SlimefunPlugin.class); + } + + @AfterAll + public static void unload() { + MockBukkit.unmock(); + } + + @Override + public DietCookie registerSlimefunItem(SlimefunPlugin plugin, String id) { + SlimefunItemStack item = new SlimefunItemStack(id, Material.COOKIE, "&5Test Cookie"); + DietCookie cookie = new DietCookie(TestUtilities.getCategory(plugin, "diet_cookie"), item, RecipeType.NULL, new ItemStack[9]); + cookie.register(plugin); + return cookie; + } + + @Test + public void testConsumptionBehaviour() { + PlayerMock player = server.addPlayer(); + DietCookie cookie = registerSlimefunItem(plugin, "TEST_DIET_COOKIE"); + + simulateConsumption(player, cookie); + + player.assertSoundHeard(Sound.ENTITY_GENERIC_EAT); + Assertions.assertTrue(player.hasPotionEffect(PotionEffectType.LEVITATION)); + } + +} diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMagicSugar.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMagicSugar.java new file mode 100644 index 000000000..7f289bcfc --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMagicSugar.java @@ -0,0 +1,57 @@ +package io.github.thebusybiscuit.slimefun4.testing.tests.items.implementations.food; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import io.github.thebusybiscuit.slimefun4.implementation.items.food.MagicSugar; +import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; +import io.github.thebusybiscuit.slimefun4.testing.interfaces.SlimefunItemTest; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class TestMagicSugar implements SlimefunItemTest { + + private static ServerMock server; + private static SlimefunPlugin plugin; + + @BeforeAll + public static void load() { + server = MockBukkit.mock(); + plugin = MockBukkit.load(SlimefunPlugin.class); + } + + @AfterAll + public static void unload() { + MockBukkit.unmock(); + } + + @Override + public MagicSugar registerSlimefunItem(SlimefunPlugin plugin, String id) { + SlimefunItemStack item = new SlimefunItemStack(id, Material.SUGAR, "&5Test Magic Sugar"); + MagicSugar sugar = new MagicSugar(TestUtilities.getCategory(plugin, "magic_sugar"), item, RecipeType.NULL, new ItemStack[9]); + sugar.register(plugin); + return sugar; + } + + @Test + public void testRightClickBehaviour() { + PlayerMock player = server.addPlayer(); + MagicSugar sugar = registerSlimefunItem(plugin, "TEST_MAGIC_SUGAR"); + + simulateRightClick(player, sugar); + + player.assertSoundHeard(Sound.ENTITY_GENERIC_EAT); + Assertions.assertTrue(player.hasPotionEffect(PotionEffectType.SPEED)); + } + +} diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMeatJerky.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMeatJerky.java new file mode 100644 index 000000000..129da4cfe --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMeatJerky.java @@ -0,0 +1,56 @@ +package io.github.thebusybiscuit.slimefun4.testing.tests.items.implementations.food; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import io.github.thebusybiscuit.slimefun4.implementation.items.food.MeatJerky; +import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; +import io.github.thebusybiscuit.slimefun4.testing.interfaces.SlimefunItemTest; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class TestMeatJerky implements SlimefunItemTest { + + private static ServerMock server; + private static SlimefunPlugin plugin; + + @BeforeAll + public static void load() { + server = MockBukkit.mock(); + plugin = MockBukkit.load(SlimefunPlugin.class); + } + + @AfterAll + public static void unload() { + MockBukkit.unmock(); + } + + @Override + public MeatJerky registerSlimefunItem(SlimefunPlugin plugin, String id) { + SlimefunItemStack item = new SlimefunItemStack(id, Material.COOKED_BEEF, "&5Test Jerky"); + MeatJerky meat = new MeatJerky(TestUtilities.getCategory(plugin, "test_jerky"), item, RecipeType.NULL, new ItemStack[9]); + meat.register(plugin); + return meat; + } + + @Test + public void testConsumptionBehaviour() { + PlayerMock player = server.addPlayer(); + MeatJerky jerky = registerSlimefunItem(plugin, "TEST_MEAT_JERKY"); + float saturation = player.getSaturation(); + + simulateConsumption(player, jerky); + + // Saturation should have increased + Assertions.assertTrue(player.getSaturation() > saturation); + } + +} diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMonsterJerky.java b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMonsterJerky.java new file mode 100644 index 000000000..e7ecb40b2 --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/testing/tests/items/implementations/food/TestMonsterJerky.java @@ -0,0 +1,57 @@ +package io.github.thebusybiscuit.slimefun4.testing.tests.items.implementations.food; + +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffectType; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import be.seeseemelk.mockbukkit.MockBukkit; +import be.seeseemelk.mockbukkit.ServerMock; +import be.seeseemelk.mockbukkit.entity.PlayerMock; +import io.github.thebusybiscuit.slimefun4.implementation.items.food.MonsterJerky; +import io.github.thebusybiscuit.slimefun4.testing.TestUtilities; +import io.github.thebusybiscuit.slimefun4.testing.interfaces.SlimefunItemTest; +import me.mrCookieSlime.Slimefun.SlimefunPlugin; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.api.SlimefunItemStack; + +public class TestMonsterJerky implements SlimefunItemTest { + + private static ServerMock server; + private static SlimefunPlugin plugin; + + @BeforeAll + public static void load() { + server = MockBukkit.mock(); + plugin = MockBukkit.load(SlimefunPlugin.class); + } + + @AfterAll + public static void unload() { + MockBukkit.unmock(); + } + + @Override + public MonsterJerky registerSlimefunItem(SlimefunPlugin plugin, String id) { + SlimefunItemStack item = new SlimefunItemStack(id, Material.ROTTEN_FLESH, "&5Test Monster Jerky"); + MonsterJerky jerky = new MonsterJerky(TestUtilities.getCategory(plugin, "monster_jerky"), item, RecipeType.NULL, new ItemStack[9]); + jerky.register(plugin); + return jerky; + } + + @Test + public void testConsumptionBehaviour() { + PlayerMock player = server.addPlayer(); + player.addPotionEffect(PotionEffectType.HUNGER.createEffect(20, 2)); + MonsterJerky jerky = registerSlimefunItem(plugin, "TEST_MONSTER_JERKY"); + + simulateConsumption(player, jerky); + + Assertions.assertFalse(player.hasPotionEffect(PotionEffectType.HUNGER)); + Assertions.assertTrue(player.hasPotionEffect(PotionEffectType.SATURATION)); + } + +}