80 lines
2.7 KiB
Java
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));
|
|
}
|
|
}
|