package com.jcwhatever.nucleus.utils.signs; import static org.junit.Assert.assertEquals; import com.jcwhatever.v1_8_R3.BukkitTester; import com.jcwhatever.v1_8_R3.MockWorld; import com.jcwhatever.nucleus.Nucleus; import com.jcwhatever.nucleus.NucleusTest; import com.jcwhatever.nucleus.managed.signs.ISignManager; import com.jcwhatever.nucleus.managed.signs.SignHandler; import org.bukkit.GameMode; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.plugin.Plugin; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * Tests {@link SignHandler}. */ public class SignHandlerTest { static Plugin _plugin; static MockSignHandler _signHandler; static ISignManager _signManager; MockWorld _world = BukkitTester.world("signHandlerWorld"); Player _player = BukkitTester.login("dummy"); /** * Make sure Nucleus and Bukkit are initialized. */ @BeforeClass public static void init() { NucleusTest.init(); BukkitTester.pause(10); _plugin = BukkitTester.mockPlugin("Plugin"); _signHandler = new MockSignHandler(_plugin); _signManager = Nucleus.getSignManager(); _signManager.registerHandler(_signHandler); } @AfterClass public static void deInit() { _signManager.unregisterHandler(_signHandler.getName()); } /** * Make sure {@link #getTitle} returns the correct value. */ @Test public void testGetDisplayName() throws Exception { assertEquals("Sign Name", _signHandler.getDisplayName()); } /** * Make sure sign change event is received by the handler. */ @Test public void testOnSignChange() throws Exception { // test sign change not handled for unmanaged sign. _world.placeWallSign(_player, 2, 2, 2, "line1", "line2", "line3", "line4"); assertEquals(0, _signHandler.signChangeCount); // test sign change handled for managed sign. _world.placeWallSign(_player, 0, 0, 0, _signHandler.getName(), "line2", "line3", "line4"); assertEquals(1, _signHandler.signChangeCount); assertEquals(_player, _signHandler.lastChangePlayer); assertEquals(_signHandler.getDisplayName(), _signHandler.lastChangeContainer.getLine(0)); assertEquals("line2", _signHandler.lastChangeContainer.getLine(1)); assertEquals("line3", _signHandler.lastChangeContainer.getLine(2)); assertEquals("line4", _signHandler.lastChangeContainer.getLine(3)); } /** * Make sure sign click event is received by the handler. */ @Test public void testOnSignClick() throws Exception { // test sign click not handled for unmanaged sign. _world.placeWallSign(_player, 2, 2, 2, "line1", "line2", "line3", "line4"); BukkitTester.blockClick(_player, Action.RIGHT_CLICK_BLOCK, _world.getBlockAt(2, 2, 2), BlockFace.SOUTH); assertEquals(0, _signHandler.signClickCount); // test sign click handled for managed sign. _world.placeWallSign(_player, 0, 0, 0, _signHandler.getName(), "line2", "line3", "line4"); BukkitTester.blockClick(_player, Action.RIGHT_CLICK_BLOCK, _world.getBlockAt(0, 0, 0), BlockFace.SOUTH); assertEquals(1, _signHandler.signClickCount); assertEquals(_player, _signHandler.lastClickPlayer); assertEquals(_signHandler.getDisplayName(), _signHandler.lastClickContainer.getLine(0)); assertEquals("line2", _signHandler.lastClickContainer.getLine(1)); assertEquals("line3", _signHandler.lastClickContainer.getLine(2)); assertEquals("line4", _signHandler.lastClickContainer.getLine(3)); } /** * Make sure the sign break event is received by the handler. */ @Test public void testOnSignBreak() throws Exception { _player.setGameMode(GameMode.CREATIVE); // test sign break not handled for unmanaged sign. _world.placeWallSign(_player, 2, 2, 2, "line1", "line2", "line3", "line4"); _world.breakBlock(_player, 2, 2, 2); assertEquals(0, _signHandler.signBreakCount); // test sign change handled for managed sign. _world.placeWallSign(_player, 0, 0, 0, _signHandler.getName(), "line2", "line3", "line4"); _world.breakBlock(_player, 0, 0, 0); assertEquals(1, _signHandler.signBreakCount); assertEquals(_player, _signHandler.lastBreakPlayer); assertEquals(_signHandler.getDisplayName(), _signHandler.lastBreakContainer.getLine(0)); assertEquals("line2", _signHandler.lastBreakContainer.getLine(1)); assertEquals("line3", _signHandler.lastBreakContainer.getLine(2)); assertEquals("line4", _signHandler.lastBreakContainer.getLine(3)); } }