Files
betterMcGuis/src/test/java/fr/luc/bettermcguis/GuiLifecycleAndEventTest.java
T

80 lines
2.7 KiB
Java

package fr.luc.bettermcguis;
import fr.luc.bettermcguis.api.GuiClickContext;
import fr.luc.bettermcguis.api.GuiItem;
import fr.luc.bettermcguis.api.GuiType;
import fr.luc.bettermcguis.event.GuiClickEvent;
import fr.luc.bettermcguis.event.GuiEventManager;
import fr.luc.bettermcguis.event.annotation.GuiEventHandler;
import fr.luc.bettermcguis.type.SimpleGui;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryAction;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.junit.jupiter.api.Assertions.*;
public class GuiLifecycleAndEventTest {
@Test
@DisplayName("GuiItem doit exécuter son callback de clic et annuler l'action par défaut")
void testGuiItemClickHandling() {
AtomicBoolean itemActionRan = new AtomicBoolean(false);
GuiItem item = GuiItem.of(Material.COMPASS)
.onClick(ctx -> itemActionRan.set(true));
Player player = Mockito.mock(Player.class);
SimpleGui gui = new SimpleGui("Test", GuiType.CHEST_1_ROW);
GuiClickContext ctx = new GuiClickContext(
player, gui, item, 4, null,
ClickType.LEFT, InventoryAction.PICKUP_ALL,
null, null, null
);
item.handleClick(ctx);
assertTrue(itemActionRan.get());
assertTrue(ctx.isCancelled()); // Annulé par défaut
}
@Test
@DisplayName("GuiEventManager doit trier les écouteurs par priorité et distribuer les événements")
void testEventManagerPriorityAndDispatch() {
GuiEventManager eventManager = new GuiEventManager();
List<String> executionOrder = new ArrayList<>();
Object listener = new Object() {
@GuiEventHandler(priority = 5)
public void onLowPriorityClick(GuiClickEvent event) {
executionOrder.add("low");
}
@GuiEventHandler(priority = 100)
public void onHighPriorityClick(GuiClickEvent event) {
executionOrder.add("high");
}
};
eventManager.registerListeners(listener);
Player player = Mockito.mock(Player.class);
SimpleGui gui = new SimpleGui("Priority Test", GuiType.CHEST_1_ROW);
GuiClickContext ctx = new GuiClickContext(player, gui, null, 0, null, ClickType.LEFT, InventoryAction.NOTHING, null, null, null);
eventManager.dispatch(new GuiClickEvent(ctx));
assertEquals(2, executionOrder.size());
assertEquals("high", executionOrder.get(0));
assertEquals("low", executionOrder.get(1));
}
}