From 5360e4d085b23af76db7ef131afd75bb0ef00de9 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Fri, 8 May 2020 22:09:08 +0200 Subject: [PATCH] MOOORE Unit Tests --- .../api/events/MultiBlockInteractEvent.java | 6 +- .../slimefun4/core/MultiBlock.java | 22 ++-- .../slimefun4/core/guide/GuideHistory.java | 6 ++ .../slimefun4/utils/SlimefunUtils.java | 13 +++ .../tests/multiblocks/TestMultiBlocks.java | 101 ++++++++++++++++++ 5 files changed, 138 insertions(+), 10 deletions(-) create mode 100644 src/test/java/io/github/thebusybiscuit/slimefun4/tests/multiblocks/TestMultiBlocks.java diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/MultiBlockInteractEvent.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/MultiBlockInteractEvent.java index 8068ee924..ce7d0c02f 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/MultiBlockInteractEvent.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/events/MultiBlockInteractEvent.java @@ -18,9 +18,9 @@ public class MultiBlockInteractEvent extends Event implements Cancellable { private static final HandlerList handlers = new HandlerList(); - private Player player; - private MultiBlock multiBlock; - private Block clickedBlock; + private final Player player; + private final MultiBlock multiBlock; + private final Block clickedBlock; private boolean cancelled; public HandlerList getHandlers() { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/MultiBlock.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/MultiBlock.java index 27d518f43..a374bbaf6 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/MultiBlock.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/MultiBlock.java @@ -5,6 +5,7 @@ import java.util.HashSet; import java.util.Objects; import java.util.Set; +import org.apache.commons.lang.Validate; import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.World; @@ -35,12 +36,14 @@ public class MultiBlock { private static final Set> SUPPORTED_TAGS = new HashSet<>(); static { - SUPPORTED_TAGS.add(Tag.LOGS); - SUPPORTED_TAGS.add(Tag.WOODEN_TRAPDOORS); - SUPPORTED_TAGS.add(Tag.WOODEN_SLABS); + if (SlimefunPlugin.getMinecraftVersion() != MinecraftVersion.UNIT_TEST) { + SUPPORTED_TAGS.add(Tag.LOGS); + SUPPORTED_TAGS.add(Tag.WOODEN_TRAPDOORS); + SUPPORTED_TAGS.add(Tag.WOODEN_SLABS); - if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14)) { - SUPPORTED_TAGS.add(Tag.WOODEN_FENCES); + if (SlimefunPlugin.getMinecraftVersion().isAtLeast(MinecraftVersion.MINECRAFT_1_14)) { + SUPPORTED_TAGS.add(Tag.WOODEN_FENCES); + } } } @@ -54,12 +57,17 @@ public class MultiBlock { private final boolean isSymmetric; public MultiBlock(SlimefunItem item, Material[] build, BlockFace trigger) { - this.item = item; + Validate.notNull(item, "A MultiBlock reuquires a SlimefunItem!"); + + if (build == null || build.length != 9) { + throw new IllegalArgumentException("MultiBlocks must have a length of 9!"); + } if (trigger != BlockFace.SELF && trigger != BlockFace.UP && trigger != BlockFace.DOWN) { throw new IllegalArgumentException("Multiblock Blockface must be either UP, DOWN or SELF"); } + this.item = item; this.blocks = build; this.trigger = trigger; this.isSymmetric = isSymmetric(build); @@ -89,7 +97,7 @@ public class MultiBlock { MultiBlock mb = (MultiBlock) obj; - if (trigger == mb.getTriggerBlock()) { + if (trigger == mb.getTriggerBlock() && isSymmetric == mb.isSymmetric) { for (int i = 0; i < mb.getStructure().length; i++) { if (!compareBlocks(blocks[i], mb.getStructure()[i])) { return false; diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideHistory.java b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideHistory.java index dcb1d3732..30d22b48c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideHistory.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/core/guide/GuideHistory.java @@ -3,6 +3,7 @@ package io.github.thebusybiscuit.slimefun4.core.guide; import java.util.Deque; import java.util.LinkedList; +import org.apache.commons.lang.Validate; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -32,6 +33,7 @@ public class GuideHistory { * The {@link PlayerProfile} this {@link GuideHistory} was made for */ public GuideHistory(PlayerProfile profile) { + Validate.notNull(profile, "Cannot create a GuideHistory without a PlayerProfile!"); this.profile = profile; } @@ -77,6 +79,7 @@ public class GuideHistory { * The {@link SlimefunItem} that should be added to this {@link GuideHistory} */ public void add(SlimefunItem item) { + Validate.notNull(item, "Cannot add a nonexisting SlimefunItem to the GuideHistory!"); queue.add(new GuideEntry<>(item, 0)); } @@ -87,10 +90,13 @@ public class GuideHistory { * The term that the {@link Player} searched for */ public void add(String searchTerm) { + Validate.notNull(searchTerm, "Cannot add an empty Search Term to the GuideHistory!"); queue.add(new GuideEntry<>(searchTerm, 0)); } private void refresh(T object, int page) { + Validate.notNull(object, "Cannot add a null Entry to the GuideHistory!"); + GuideEntry lastEntry = getLastEntry(false); if (lastEntry != null && lastEntry.getIndexedObject() == object) { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index 4a6f39798..3c4ae8535 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -12,6 +12,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.metadata.FixedMetadataValue; import io.github.thebusybiscuit.cscorelib2.item.ImmutableItemMeta; +import io.github.thebusybiscuit.slimefun4.core.attributes.Radioactive; import io.github.thebusybiscuit.slimefun4.core.attributes.Soulbound; import io.github.thebusybiscuit.slimefun4.implementation.items.altar.AncientPedestal; import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants; @@ -104,6 +105,18 @@ public final class SlimefunUtils { } } + /** + * This method checks whether the given {@link ItemStack} is radioactive. + * + * @param item + * The {@link ItemStack} to check + * + * @return Whether this {@link ItemStack} is radioactive or not + */ + public static boolean isRadioactive(ItemStack item) { + return SlimefunItem.getByItem(item) instanceof Radioactive; + } + public static boolean containsSimilarItem(Inventory inventory, ItemStack itemStack, boolean checkLore) { if (inventory == null || itemStack == null) return false; diff --git a/src/test/java/io/github/thebusybiscuit/slimefun4/tests/multiblocks/TestMultiBlocks.java b/src/test/java/io/github/thebusybiscuit/slimefun4/tests/multiblocks/TestMultiBlocks.java new file mode 100644 index 000000000..963570925 --- /dev/null +++ b/src/test/java/io/github/thebusybiscuit/slimefun4/tests/multiblocks/TestMultiBlocks.java @@ -0,0 +1,101 @@ +package io.github.thebusybiscuit.slimefun4.tests.multiblocks; + +import org.bukkit.Material; +import org.bukkit.block.BlockFace; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import io.github.thebusybiscuit.cscorelib2.item.CustomItem; +import io.github.thebusybiscuit.slimefun4.core.MultiBlock; +import io.github.thebusybiscuit.slimefun4.mocks.SlimefunMocks; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; + +public class TestMultiBlocks { + + @Test + public void testInvalidConstructors() { + SlimefunItem item = SlimefunMocks.mockSlimefunItem("MULTIBLOCK_TEST", new CustomItem(Material.BRICK, "&5Multiblock Test")); + + Assertions.assertThrows(IllegalArgumentException.class, () -> new MultiBlock(null, null, null)); + + Assertions.assertThrows(IllegalArgumentException.class, () -> new MultiBlock(item, null, null)); + Assertions.assertThrows(IllegalArgumentException.class, () -> new MultiBlock(item, new Material[4], null)); + + Assertions.assertThrows(IllegalArgumentException.class, () -> new MultiBlock(item, new Material[9], BlockFace.EAST_NORTH_EAST)); + } + + @Test + public void testValidConstructor() { + SlimefunItem item = SlimefunMocks.mockSlimefunItem("MULTIBLOCK_TEST", new CustomItem(Material.BRICK, "&5Multiblock Test")); + MultiBlock multiblock = new MultiBlock(item, new Material[9], BlockFace.DOWN); + + Assertions.assertEquals(item, multiblock.getSlimefunItem()); + Assertions.assertArrayEquals(new Material[9], multiblock.getStructure()); + Assertions.assertEquals(BlockFace.DOWN, multiblock.getTriggerBlock()); + } + + @Test + public void testSymmetry() { + SlimefunItem item = SlimefunMocks.mockSlimefunItem("MULTIBLOCK_TEST", new CustomItem(Material.BRICK, "&5Multiblock Test")); + + MultiBlock multiblock = new MultiBlock(item, new Material[] { + null, null, null, + Material.DIAMOND_BLOCK, null, Material.DIAMOND_BLOCK, + null, Material.DISPENSER, null + }, BlockFace.DOWN); + + Assertions.assertTrue(multiblock.isSymmetric()); + + MultiBlock multiblock2 = new MultiBlock(item, new Material[] { + Material.EMERALD_BLOCK, null, null, + Material.EMERALD_BLOCK, null, Material.DIAMOND_BLOCK, + Material.EMERALD_BLOCK, Material.DISPENSER, null + }, BlockFace.DOWN); + + Assertions.assertFalse(multiblock2.isSymmetric()); + } + + @Test + public void testEquality() { + SlimefunItem item = SlimefunMocks.mockSlimefunItem("MULTIBLOCK_TEST", new CustomItem(Material.BRICK, "&5Multiblock Test")); + + MultiBlock multiblock = new MultiBlock(item, new Material[] { + Material.BIRCH_WOOD, Material.BIRCH_WOOD, Material.BIRCH_WOOD, + null, Material.CRAFTING_TABLE, null, + Material.BIRCH_WOOD, Material.DISPENSER, Material.BIRCH_WOOD + }, BlockFace.DOWN); + + MultiBlock multiblock2 = new MultiBlock(item, new Material[] { + Material.BIRCH_WOOD, Material.BIRCH_WOOD, Material.BIRCH_WOOD, + null, Material.CRAFTING_TABLE, null, + Material.BIRCH_WOOD, Material.DISPENSER, Material.BIRCH_WOOD + }, BlockFace.DOWN); + + MultiBlock multiblock3 = new MultiBlock(item, new Material[] { + Material.BIRCH_WOOD, Material.BIRCH_WOOD, Material.BIRCH_WOOD, + null, Material.EMERALD_BLOCK, null, + Material.BIRCH_WOOD, Material.DISPENSER, Material.BIRCH_WOOD + }, BlockFace.DOWN); + + MultiBlock multiblock4 = new MultiBlock(item, new Material[] { + Material.DROPPER, Material.BIRCH_WOOD, Material.BIRCH_WOOD, + null, Material.DIAMOND_BLOCK, null, + Material.BIRCH_WOOD, Material.DISPENSER, Material.TNT + }, BlockFace.DOWN); + + MultiBlock multiblock5 = new MultiBlock(item, new Material[] { + Material.BIRCH_WOOD, Material.BIRCH_WOOD, Material.BIRCH_WOOD, + null, Material.CRAFTING_TABLE, null, + Material.BIRCH_WOOD, Material.DISPENSER, Material.BIRCH_WOOD + }, BlockFace.SELF); + + Assertions.assertTrue(multiblock.isSymmetric()); + + Assertions.assertTrue(multiblock.equals(multiblock2)); + Assertions.assertFalse(multiblock.equals(null)); + Assertions.assertFalse(multiblock.equals(multiblock3)); + Assertions.assertFalse(multiblock.equals(multiblock4)); + Assertions.assertFalse(multiblock.equals(multiblock5)); + } + +}