feat: initialisation complète de la bibliothèque betterMcGuis (Fluent DSL, ItemBuilder, PaginatedGui, TabbedGui, AnimatedGui, Patterns ASCII, Moteur d'événements, Sécurité anti-glitch et documentation)
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user