chat message manager: don't apply color changes to message nodes
Apply the color changes at chat build time directly to the message being set on the component, instead of prepending the color change onto the message itself. This is a bit more robust since it doesn't break things which depend on the chat message not starting with a color, which they would not otherwise, such as the chat filter.
This commit is contained in:
@@ -31,14 +31,16 @@ import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||
import java.awt.Color;
|
||||
import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.IterableHashTable;
|
||||
import net.runelite.api.MessageNode;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.events.ChatMessage;
|
||||
import net.runelite.client.config.ChatColorConfig;
|
||||
import net.runelite.client.events.ConfigChanged;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import org.mockito.Mock;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -59,12 +61,39 @@ public class ChatMessageManagerTest
|
||||
@Inject
|
||||
private ChatMessageManager chatMessageManager;
|
||||
|
||||
private String[] sstack;
|
||||
private int[] istack;
|
||||
|
||||
@Before
|
||||
public void before()
|
||||
{
|
||||
Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this);
|
||||
}
|
||||
|
||||
private void setupVm(ChatMessageType type, String name, String message)
|
||||
{
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
when(messageNode.getType()).thenReturn(type);
|
||||
|
||||
IterableHashTable<MessageNode> tbl = mock(IterableHashTable.class);
|
||||
when(tbl.get(anyLong())).thenReturn(messageNode);
|
||||
when(client.getMessages()).thenReturn(tbl);
|
||||
|
||||
sstack = new String[]{
|
||||
"",
|
||||
name,
|
||||
message,
|
||||
""
|
||||
};
|
||||
istack = new int[]{
|
||||
1
|
||||
};
|
||||
when(client.getStringStack()).thenReturn(sstack);
|
||||
when(client.getStringStackSize()).thenReturn(sstack.length);
|
||||
when(client.getIntStack()).thenReturn(istack);
|
||||
when(client.getIntStackSize()).thenReturn(istack.length);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMessageRecoloring()
|
||||
{
|
||||
@@ -75,16 +104,10 @@ public class ChatMessageManagerTest
|
||||
configChanged.setGroup("textrecolor");
|
||||
chatMessageManager.onConfigChanged(configChanged);
|
||||
|
||||
ChatMessage chatMessage = new ChatMessage();
|
||||
chatMessage.setType(ChatMessageType.GAMEMESSAGE);
|
||||
setupVm(ChatMessageType.GAMEMESSAGE, "", "Your dodgy necklace protects you. It has <col=ff0000>1</col> charge left.");
|
||||
chatMessageManager.colorChatMessage();
|
||||
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
chatMessage.setMessageNode(messageNode);
|
||||
|
||||
when(messageNode.getValue()).thenReturn("Your dodgy necklace protects you. It has <col=ff0000>1</col> charge left.");
|
||||
chatMessageManager.onChatMessage(chatMessage);
|
||||
|
||||
verify(messageNode).setValue("<col=b20000>Your dodgy necklace protects you. It has <col=ff0000>1<col=b20000> charge left.</col>");
|
||||
assertEquals("<col=b20000>Your dodgy necklace protects you. It has <col=ff0000>1<col=b20000> charge left.</col>", sstack[2]);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -95,14 +118,7 @@ public class ChatMessageManagerTest
|
||||
|
||||
when(chatColorConfig.opaquePublicFriendUsernames()).thenReturn(Color.decode("#b20000"));
|
||||
|
||||
// Setup message
|
||||
ChatMessage chatMessage = new ChatMessage();
|
||||
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||
chatMessage.setName(friendName);
|
||||
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
chatMessage.setMessageNode(messageNode);
|
||||
when(messageNode.getName()).thenReturn(friendName);
|
||||
setupVm(ChatMessageType.PUBLICCHAT, friendName, "");
|
||||
|
||||
// Setup friend checking
|
||||
Player localPlayer = mock(Player.class);
|
||||
@@ -111,9 +127,9 @@ public class ChatMessageManagerTest
|
||||
when(client.getLocalPlayer()).thenReturn(localPlayer);
|
||||
when(localPlayer.getName()).thenReturn(localPlayerName);
|
||||
|
||||
chatMessageManager.onChatMessage(chatMessage);
|
||||
chatMessageManager.colorChatMessage();
|
||||
|
||||
verify(messageNode).setName("<col=b20000>" + friendName + "</col>");
|
||||
assertEquals("<col=b20000>" + friendName + "</col>", sstack[1]);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -125,14 +141,7 @@ public class ChatMessageManagerTest
|
||||
|
||||
when(chatColorConfig.opaquePublicFriendUsernames()).thenReturn(Color.decode("#b20000"));
|
||||
|
||||
// Setup message
|
||||
ChatMessage chatMessage = new ChatMessage();
|
||||
chatMessage.setType(ChatMessageType.PUBLICCHAT);
|
||||
chatMessage.setName(friendName);
|
||||
|
||||
MessageNode messageNode = mock(MessageNode.class);
|
||||
chatMessage.setMessageNode(messageNode);
|
||||
when(messageNode.getName()).thenReturn(friendName);
|
||||
setupVm(ChatMessageType.PUBLICCHAT, friendName, "");
|
||||
|
||||
// Setup friend checking
|
||||
Player localPlayer = mock(Player.class);
|
||||
@@ -141,9 +150,9 @@ public class ChatMessageManagerTest
|
||||
when(client.getLocalPlayer()).thenReturn(localPlayer);
|
||||
when(localPlayer.getName()).thenReturn(localPlayerName);
|
||||
|
||||
chatMessageManager.onChatMessage(chatMessage);
|
||||
chatMessageManager.colorChatMessage();
|
||||
|
||||
verify(messageNode).setName("<col=b20000>" + friendName + "</col>");
|
||||
assertEquals("<col=b20000>" + friendName + "</col>", sstack[1]);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user