1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Added more Unit Tests

This commit is contained in:
TheBusyBiscuit 2020-05-24 01:48:42 +02:00
parent 0af8c41eeb
commit 6a4e23853c
7 changed files with 224 additions and 25 deletions

View File

@ -4,11 +4,11 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
@ -30,13 +30,11 @@ public class DeathpointListener implements Listener {
}
@EventHandler
public void onDeath(EntityDeathEvent e) {
if (e.getEntity().getType() == EntityType.PLAYER) {
Player p = (Player) e.getEntity();
public void onDeath(PlayerDeathEvent e) {
Player p = e.getEntity();
if (SlimefunUtils.containsSimilarItem(p.getInventory(), SlimefunItems.GPS_EMERGENCY_TRANSMITTER, true)) {
SlimefunPlugin.getGPSNetwork().addWaypoint(p, "player:death " + SlimefunPlugin.getLocal().getMessage(p, "gps.deathpoint").replace("%date%", format.format(LocalDateTime.now())), p.getLocation().getBlock().getLocation());
}
if (SlimefunUtils.containsSimilarItem(p.getInventory(), SlimefunItems.GPS_EMERGENCY_TRANSMITTER, true)) {
SlimefunPlugin.getGPSNetwork().addWaypoint(p, "player:death " + SlimefunPlugin.getLocal().getMessage(p, "gps.deathpoint").replace("%date%", format.format(LocalDateTime.now())), p.getLocation().getBlock().getLocation());
}
}
}

View File

@ -8,7 +8,7 @@ import java.util.UUID;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.inventory.ItemStack;
@ -24,29 +24,26 @@ public class SoulboundListener implements Listener {
}
@EventHandler
public void onDamage(EntityDeathEvent e) {
if (e.getEntity() instanceof Player) {
Player p = (Player) e.getEntity();
public void onDamage(PlayerDeathEvent e) {
Player p = e.getEntity();
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
ItemStack item = p.getInventory().getItem(slot);
for (int slot = 0; slot < p.getInventory().getSize(); slot++) {
ItemStack item = p.getInventory().getItem(slot);
// Store soulbound items for later retrieval
if (SlimefunUtils.isSoulbound(item)) {
storeItem(p.getUniqueId(), slot, item);
}
// Store soulbound items for later retrieval
if (SlimefunUtils.isSoulbound(item)) {
storeItem(p.getUniqueId(), slot, item);
}
}
// Remove soulbound items from our drops
Iterator<ItemStack> drops = e.getDrops().iterator();
while (drops.hasNext()) {
ItemStack item = drops.next();
// Remove soulbound items from our drops
Iterator<ItemStack> drops = e.getDrops().iterator();
while (drops.hasNext()) {
ItemStack item = drops.next();
if (SlimefunUtils.isSoulbound(item)) {
drops.remove();
}
if (SlimefunUtils.isSoulbound(item)) {
drops.remove();
}
}
}

View File

@ -180,6 +180,11 @@ public class SlimefunItemStack extends CustomItem {
return new SlimefunItemStack(id, this);
}
@Override
public String toString() {
return "SlimefunItemStack (" + id + ')';
}
public Optional<String> getSkullTexture() {
return Optional.ofNullable(texture);
}

View File

@ -0,0 +1,41 @@
package io.github.thebusybiscuit.slimefun4.annotations;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.stream.Stream;
import org.bukkit.inventory.ItemStack;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.support.AnnotationConsumer;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
public class SlimefunItemsProvider implements ArgumentsProvider, AnnotationConsumer<SlimefunItemsSource> {
private String[] items;
@Override
public void accept(SlimefunItemsSource source) {
items = source.items();
}
@Override
public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception {
return Arrays.stream(items).map(this::getAsItemStack).map(Arguments::of);
}
private ItemStack getAsItemStack(String fieldName) {
Class<SlimefunItems> clazz = SlimefunItems.class;
Field field;
try {
field = clazz.getField(fieldName);
return (ItemStack) field.get(null);
}
catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
throw new IllegalArgumentException("Could not find field SlimefunItems." + fieldName);
}
}
}

View File

@ -0,0 +1,19 @@
package io.github.thebusybiscuit.slimefun4.annotations;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.params.provider.ArgumentsSource;
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@ArgumentsSource(SlimefunItemsProvider.class)
public @interface SlimefunItemsSource {
String[] items();
}

View File

@ -0,0 +1,82 @@
package io.github.thebusybiscuit.slimefun4.tests.listeners;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.EquipmentSlot;
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 org.junit.jupiter.params.ParameterizedTest;
import be.seeseemelk.mockbukkit.MockBukkit;
import be.seeseemelk.mockbukkit.ServerMock;
import be.seeseemelk.mockbukkit.block.BlockStateMock;
import io.github.thebusybiscuit.slimefun4.annotations.SlimefunItemsSource;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.CargoNodeListener;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
public class TestCargoNodeListener {
private static SlimefunPlugin plugin;
private static CargoNodeListener listener;
private static ServerMock server;
@BeforeAll
public static void load() {
server = MockBukkit.mock();
plugin = MockBukkit.load(SlimefunPlugin.class);
listener = new CargoNodeListener(plugin);
}
@AfterAll
public static void unload() {
MockBukkit.unmock();
}
@ParameterizedTest
@SlimefunItemsSource(items = { "CARGO_INPUT", "CARGO_OUTPUT", "CARGO_OUTPUT_ADVANCED" })
public void testSidePlacement(ItemStack item) {
Player player = server.addPlayer();
Location l = new Location(player.getWorld(), 190, 50, 400);
Block b = l.getBlock();
Block against = b.getRelative(BlockFace.NORTH);
BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
listener.onCargoNodePlace(event);
Assertions.assertFalse(event.isCancelled());
}
@ParameterizedTest
@SlimefunItemsSource(items = { "CARGO_INPUT", "CARGO_OUTPUT", "CARGO_OUTPUT_ADVANCED" })
public void testInvalidPlacement(ItemStack item) {
Player player = server.addPlayer();
Location l = new Location(player.getWorld(), 190, 50, 400);
Block b = l.getBlock();
Block against = b.getRelative(BlockFace.DOWN);
BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
listener.onCargoNodePlace(event);
Assertions.assertTrue(event.isCancelled());
}
@Test
public void testNonCargoNode() {
Player player = server.addPlayer();
Location l = new Location(player.getWorld(), 190, 50, 400);
Block b = l.getBlock();
Block against = b.getRelative(BlockFace.DOWN);
ItemStack item = new ItemStack(Material.PLAYER_HEAD);
BlockPlaceEvent event = new BlockPlaceEvent(b, new BlockStateMock(), against, item, player, true, EquipmentSlot.HAND);
listener.onCargoNodePlace(event);
Assertions.assertFalse(event.isCancelled());
}
}

View File

@ -0,0 +1,57 @@
package io.github.thebusybiscuit.slimefun4.tests.listeners;
import org.bukkit.entity.Player;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import be.seeseemelk.mockbukkit.MockBukkit;
import be.seeseemelk.mockbukkit.ServerMock;
import io.github.thebusybiscuit.slimefun4.api.events.WaypointCreateEvent;
import io.github.thebusybiscuit.slimefun4.api.gps.GPSNetwork;
import io.github.thebusybiscuit.slimefun4.implementation.listeners.DeathpointListener;
import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
public class TestDeathpointListener {
private static SlimefunPlugin plugin;
private static DeathpointListener listener;
private static GPSNetwork network;
private static ServerMock server;
@BeforeAll
public static void load() {
server = MockBukkit.mock();
plugin = MockBukkit.load(SlimefunPlugin.class);
listener = new DeathpointListener(plugin);
network = new GPSNetwork();
}
@AfterAll
public static void unload() {
MockBukkit.unmock();
}
@Test
@Disabled("MockBukkit does not implement Inventory#getStorageContents()")
public void testNoTransmitter() {
Player player = server.addPlayer();
player.setHealth(0);
Assertions.assertThrows(AssertionError.class, () -> server.getPluginManager().assertEventFired(WaypointCreateEvent.class, event -> event.getPlayer() == player && event.isDeathpoint()));
}
@Test
@Disabled("MockBukkit does not implement Inventory#getStorageContents()")
public void testTransmitter() {
Player player = server.addPlayer();
player.getInventory().setItem(8, SlimefunItems.GPS_EMERGENCY_TRANSMITTER.clone());
player.setHealth(0);
server.getPluginManager().assertEventFired(WaypointCreateEvent.class, event -> event.getPlayer() == player && event.isDeathpoint());
}
}