diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java index 39d022c3e7..7b72f1483d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/emojis/EmojiPlugin.java @@ -37,7 +37,6 @@ import net.runelite.api.IndexedSprite; import net.runelite.api.MessageNode; import net.runelite.api.Player; import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.OverheadTextChanged; import net.runelite.client.callback.ClientThread; import net.runelite.client.eventbus.Subscribe; @@ -67,27 +66,27 @@ public class EmojiPlugin extends Plugin @Override protected void startUp() { - clientThread.invoke(this::loadEmojiIcons); - } - - @Subscribe - public void onGameStateChanged(GameStateChanged gameStateChanged) - { - if (gameStateChanged.getGameState() == GameState.LOGGED_IN) + clientThread.invoke(() -> { + if (client.getModIcons() == null) + { + return false; + } loadEmojiIcons(); - } + return true; + }); } private void loadEmojiIcons() { - final IndexedSprite[] modIcons = client.getModIcons(); - if (modIconsStart != -1 || modIcons == null) + if (modIconsStart != -1) { return; } final Emoji[] emojis = Emoji.values(); + final IndexedSprite[] modIcons = client.getModIcons(); + assert modIcons != null; final IndexedSprite[] newModIcons = Arrays.copyOf(modIcons, modIcons.length + emojis.length); modIconsStart = modIcons.length; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java index 99fc2dc174..3157b15575 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/emojis/EmojiPluginTest.java @@ -28,24 +28,27 @@ import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.util.function.BooleanSupplier; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.IndexedSprite; import net.runelite.api.MessageNode; import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.GameStateChanged; +import net.runelite.client.callback.ClientThread; import net.runelite.client.chat.ChatMessageManager; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; 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; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; @RunWith(MockitoJUnitRunner.class) public class EmojiPluginTest @@ -58,6 +61,10 @@ public class EmojiPluginTest @Bind private ChatMessageManager chatMessageManager; + @Mock + @Bind + private ClientThread clientThread; + @Inject private EmojiPlugin emojiPlugin; @@ -65,19 +72,23 @@ public class EmojiPluginTest public void before() { Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); + + when(client.getModIcons()).thenReturn(new IndexedSprite[0]); + when(client.createIndexedSprite()).thenReturn(mock(IndexedSprite.class)); + + doAnswer(a -> + { + final BooleanSupplier b = a.getArgument(0); + return b.getAsBoolean(); + }).when(clientThread).invoke(any(BooleanSupplier.class)); + + emojiPlugin.startUp(); } @Test public void testOnChatMessage() { when(client.getGameState()).thenReturn(GameState.LOGGED_IN); - when(client.getModIcons()).thenReturn(new IndexedSprite[0]); - when(client.createIndexedSprite()).thenReturn(mock(IndexedSprite.class)); - - // Trip emoji loading - GameStateChanged gameStateChanged = new GameStateChanged(); - gameStateChanged.setGameState(GameState.LOGGED_IN); - emojiPlugin.onGameStateChanged(gameStateChanged); MessageNode messageNode = mock(MessageNode.class); // With chat recolor, message may be wrapped in col tags @@ -96,13 +107,6 @@ public class EmojiPluginTest public void testGtLt() { when(client.getGameState()).thenReturn(GameState.LOGGED_IN); - when(client.getModIcons()).thenReturn(new IndexedSprite[0]); - when(client.createIndexedSprite()).thenReturn(mock(IndexedSprite.class)); - - // Trip emoji loading - GameStateChanged gameStateChanged = new GameStateChanged(); - gameStateChanged.setGameState(GameState.LOGGED_IN); - emojiPlugin.onGameStateChanged(gameStateChanged); MessageNode messageNode = mock(MessageNode.class); when(messageNode.getValue()).thenReturn(":D"); @@ -119,8 +123,8 @@ public class EmojiPluginTest @Test public void testEmojiUpdateMessage() { - String PARTY_POPPER = "'; - String OPEN_MOUTH = "'; + String PARTY_POPPER = "'; + String OPEN_MOUTH = "'; assertNull(emojiPlugin.updateMessage("@@@@@")); assertEquals(PARTY_POPPER, emojiPlugin.updateMessage("@@@")); assertEquals(PARTY_POPPER + ' ' + PARTY_POPPER, emojiPlugin.updateMessage("@@@ @@@"));