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

70 lines
2.3 KiB
Java

package fr.luc.bettermcguis;
import fr.luc.bettermcguis.api.GuiItem;
import fr.luc.bettermcguis.api.GuiType;
import fr.luc.bettermcguis.api.slot.SlotRange;
import fr.luc.bettermcguis.type.PaginatedGui;
import org.bukkit.Material;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.jupiter.api.Assertions.*;
public class PaginatedGuiTest {
@Test
@DisplayName("PaginatedGui doit calculer correctement le nombre total de pages")
void testPaginationMath() {
PaginatedGui gui = new PaginatedGui("Paginated Test", GuiType.CHEST_3_ROWS);
gui.setItemSlots(SlotRange.of(10, 16)); // 7 slots par page
assertEquals(7, gui.getPageSize());
assertEquals(1, gui.getTotalPages()); // 0 items -> 1 page vide
for (int i = 0; i < 20; i++) {
gui.addPageItem(GuiItem.of(Material.GOLD_INGOT));
}
// 20 items / 7 par page -> 3 pages (7 + 7 + 6)
assertEquals(3, gui.getTotalPages());
assertEquals(1, gui.getCurrentPage());
assertTrue(gui.hasNextPage());
assertFalse(gui.hasPreviousPage());
}
@Test
@DisplayName("PaginatedGui doit naviguer entre les pages et déclencher l'événement")
void testPageNavigationAndEvents() {
PaginatedGui gui = new PaginatedGui("Paginated Test", GuiType.CHEST_3_ROWS);
gui.setItemSlots(SlotRange.of(10, 16));
for (int i = 0; i < 20; i++) {
gui.addPageItem(GuiItem.of(Material.EMERALD));
}
AtomicInteger eventFired = new AtomicInteger(0);
gui.onPageChange(evt -> {
eventFired.incrementAndGet();
assertEquals(1, evt.getOldPage());
assertEquals(2, evt.getNewPage());
});
assertTrue(gui.nextPage());
assertEquals(2, gui.getCurrentPage());
assertEquals(1, eventFired.get());
assertTrue(gui.hasPreviousPage());
assertTrue(gui.hasNextPage());
assertTrue(gui.nextPage());
assertEquals(3, gui.getCurrentPage());
assertFalse(gui.hasNextPage()); // Fin du catalogue
// Impossible d'avancer plus loin
assertFalse(gui.nextPage());
assertEquals(3, gui.getCurrentPage());
}
}