From 2021b4c1ff3eaad3eaf48e1d825ce1a27e8fba7c Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 31 Aug 2020 10:56:14 -0400 Subject: [PATCH] grounditems: add test for notify on highlight --- .../runelite/client/input/MouseManager.java | 7 +- .../grounditems/GroundItemsPlugin.java | 2 +- .../grounditems/GroundItemsPluginTest.java | 154 ++++++++++++++++++ 3 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 runelite-client/src/test/java/net/runelite/client/plugins/grounditems/GroundItemsPluginTest.java diff --git a/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java b/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java index d5b876c7d7..07b3abb0d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java +++ b/runelite-client/src/main/java/net/runelite/client/input/MouseManager.java @@ -41,8 +41,13 @@ public class MouseManager private final List mouseListeners = new CopyOnWriteArrayList<>(); private final List mouseWheelListeners = new CopyOnWriteArrayList<>(); + private final RuneLiteConfig runeLiteConfig; + @Inject - private RuneLiteConfig runeLiteConfig; + private MouseManager(RuneLiteConfig runeLiteConfig) + { + this.runeLiteConfig = runeLiteConfig; + } public void registerMouseListener(MouseListener mouseListener) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 962cbe432f..5c1b8553cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -197,7 +197,7 @@ public class GroundItemsPlugin extends Plugin } @Override - protected void shutDown() throws Exception + protected void shutDown() { overlayManager.remove(overlay); mouseManager.unregisterMouseListener(inputListener); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/grounditems/GroundItemsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/grounditems/GroundItemsPluginTest.java new file mode 100644 index 0000000000..bc9c2536a1 --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/plugins/grounditems/GroundItemsPluginTest.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2020, Adam + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.grounditems; + +import com.google.inject.Guice; +import com.google.inject.testing.fieldbinder.Bind; +import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.util.concurrent.ScheduledExecutorService; +import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.ItemComposition; +import net.runelite.api.ItemID; +import net.runelite.api.ItemLayer; +import net.runelite.api.Player; +import net.runelite.api.Tile; +import net.runelite.api.TileItem; +import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.ItemSpawned; +import net.runelite.client.Notifier; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.game.ItemManager; +import net.runelite.client.input.KeyManager; +import net.runelite.client.input.MouseManager; +import net.runelite.client.plugins.grounditems.config.HighlightTier; +import net.runelite.client.ui.overlay.OverlayManager; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import static org.mockito.ArgumentMatchers.any; +import org.mockito.Mock; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class GroundItemsPluginTest +{ + @Inject + private GroundItemsPlugin groundItemsPlugin; + + @Mock + @Bind + private MouseManager mouseManager; + + @Mock + @Bind + private KeyManager keyManager; + + @Mock + @Bind + private Client client; + + @Mock + @Bind + private ItemManager itemManager; + + @Mock + @Bind + private OverlayManager overlayManager; + + @Mock + @Bind + private GroundItemsConfig config; + + @Mock + @Bind + private GroundItemsOverlay overlay; + + @Mock + @Bind + private Notifier notifier; + + @Mock + @Bind + private ScheduledExecutorService executor; + + @Before + public void setUp() + { + Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); + + doAnswer(a -> + { + a.getArgument(0).run(); + return null; + }).when(executor).execute(any(Runnable.class)); + + when(client.getLocalPlayer()).then(a -> + { + Player player = mock(Player.class); + when(player.getName()).thenReturn("Adam"); + return player; + }); + + when(config.getHiddenItems()).thenReturn(""); + } + + @Test + public void testNotifyHighlightedItem() + { + when(config.getHighlightItems()).thenReturn("abyssal whip"); + when(config.notifyTier()).thenReturn(HighlightTier.OFF); + when(config.notifyHighlightedDrops()).thenReturn(true); + + when(itemManager.getItemComposition(ItemID.ABYSSAL_WHIP)).thenAnswer(a -> + { + ItemComposition itemComposition = mock(ItemComposition.class); + when(itemComposition.getName()).thenReturn("Abyssal whip"); + return itemComposition; + }); + + // trigger reload of highlighted items list + ConfigChanged configChanged = new ConfigChanged(); + configChanged.setGroup("grounditems"); + groundItemsPlugin.onConfigChanged(configChanged); + + // spawn whip + Tile tile = mock(Tile.class); + when(tile.getItemLayer()).thenReturn(mock(ItemLayer.class)); + when(tile.getWorldLocation()).thenReturn(new WorldPoint(0, 0, 0)); + + TileItem tileItem = mock(TileItem.class); + when(tileItem.getId()).thenReturn(ItemID.ABYSSAL_WHIP); + when(tileItem.getQuantity()).thenReturn(1); + + groundItemsPlugin.onItemSpawned(new ItemSpawned(tile, tileItem)); + + verify(notifier).notify("[Adam] received a highlighted drop: Abyssal whip"); + } +} \ No newline at end of file