package com.jcwhatever.nucleus.views.menu;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.jcwhatever.v1_8_R3.BukkitTester;
import com.jcwhatever.nucleus.views.AbstractViewTest;
import com.jcwhatever.nucleus.views.View;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.plugin.Plugin;
import org.junit.Test;
import javax.annotation.Nullable;
/**
* Test for {@link MenuView} using mock implementation {@link MockMenuView}.
*
* <p>More tests are performed by the super class {@link AbstractViewTest}.</p>
*/
public class MenuViewTest extends AbstractViewTest {
/**
* Constructor.
*/
public MenuViewTest() {
super(new IViewGenerator() {
@Override
public View generate(Plugin plugin) {
return new MockMenuView(plugin, null);
}
});
}
/**
* Make sure {@link #onItemSelect} is invoked when a menu item is clicked
* and that the correct {@link MenuItem} is passed into the invoked method.
*/
@Test
public void testOnItemSelected() {
MockMenuView view = new MockMenuView(plugin, null);
_session.next(view);
BukkitTester.pause(2);
MenuItem menuItem = new MenuItemBuilder(Material.WOOD).build(0);
menuItem.setVisible(view, true);
// select/click the menu item
BukkitTester.viewClick(player,
SlotType.CONTAINER, 0, ClickType.LEFT, InventoryAction.PICKUP_ALL);
BukkitTester.pause(2);
// check "onItemSelected" is invoked with correct menu item
assertEquals(menuItem, view.selected);
}
/**
* Make sure the "onShow" method is invoked when the
* menu view is shown.
*/
@Test
public void testOnShow() {
MockMenuView view = new MockMenuView(plugin, null);
_session.next(view);
BukkitTester.pause(2);
// check "onShow" is invoked
assertTrue(view.openReason != null);
}
@Nullable
@Override
protected Block getSourceBlock() {
return null;
}
}