diff --git a/test/Discord.Net.Tests/MessageHelperTests.cs b/test/Discord.Net.Tests/MessageHelperTests.cs
index 5caad4ce5..e80b778b2 100644
--- a/test/Discord.Net.Tests/MessageHelperTests.cs
+++ b/test/Discord.Net.Tests/MessageHelperTests.cs
@@ -1,44 +1,106 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
using Xunit;
+using Discord.Rest;
namespace Discord
{
///
- /// Tests for parsing.
+ /// Tests for parsing.
///
public class MessageHelperTests
{
///
- /// Tests that no tags work while they are in code blocks.
+ /// Tests that no tags are parsed while in code blocks
+ /// or inline code.
///
[Theory]
[InlineData("`@everyone`")]
- [InlineData("`<@&163184946742034432>`")]
+ [InlineData("`<@163184946742034432>`")]
[InlineData("```@everyone```")]
[InlineData("```cs \n @everyone```")]
- [InlineData("```cs <@&163184946742034432> ```")]
- [InlineData("``` test ``` ```cs <@&163184946742034432> ```")]
- public void NoTagsInCodeBlocks(string testData)
+ [InlineData("```cs <@163184946742034432> ```")]
+ [InlineData("``` test ``` ```cs <@163184946742034432> ```")]
+ [InlineData("`<:test:537920404019216384>`")]
+ [InlineData("``` @everyone `")] // discord client handles these weirdly
+ [InlineData("``` @everyone ``")]
+ public void ParseTagsInCode(string testData)
{
// don't care that I'm passing in null channels/guilds/users
// as they shouldn't be required
- var result = Rest.MessageHelper.ParseTags(testData, null, null, null);
+ var result = MessageHelper.ParseTags(testData, null, null, null);
Assert.Empty(result);
}
+ /// Tests parsing tags that surround inline code or a code block.
[Theory]
[InlineData("`` <@&163184946742034432>")]
- [InlineData("``` test ``` ``` test ``` <@&163184946742034432>")]
- public void TagsWork(string testData) // todo better names
+ [InlineData("``` code block 1 ``` ``` code block 2 ``` <@&163184946742034432>")]
+ [InlineData("` code block 1 ``` ` code block 2 ``` <@&163184946742034432>")]
+ [InlineData("<@&163184946742034432> ``` code block 1 ```")]
+ public void ParseTagsAroundCode(string testData)
{
// don't care that I'm passing in null channels/guilds/users
// as they shouldn't be required
- var result = Rest.MessageHelper.ParseTags(testData, null, null, null);
+ var result = MessageHelper.ParseTags(testData, null, null, null);
Assert.NotEmpty(result);
}
+ // cannot test parsing a user, as it uses the ReadOnlyCollection arg.
+ // this could be done if mocked entities are merged in PR #1290
+
+ /// Tests parsing a mention of a role.
+ [Theory]
+ [InlineData("<@&163184946742034432>")]
+ [InlineData("**<@&163184946742034432>**")]
+ [InlineData("__<@&163184946742034432>__")]
+ [InlineData("<><@&163184946742034432>")]
+ public void ParseRole(string roleTag)
+ {
+ var result = MessageHelper.ParseTags(roleTag, null, null, null);
+ Assert.Contains(result, x => x.Type == TagType.RoleMention);
+ }
+
+ /// Tests parsing a channel.
+ [Theory]
+ [InlineData("<#429115823748284417>")]
+ [InlineData("**<#429115823748284417>**")]
+ [InlineData("<><#429115823748284417>")]
+ public void ParseChannel(string channelTag)
+ {
+ var result = MessageHelper.ParseTags(channelTag, null, null, null);
+ Assert.Contains(result, x => x.Type == TagType.ChannelMention);
+ }
+
+ /// Tests parsing an emoji.
+ [Theory]
+ [InlineData("<:test:537920404019216384>")]
+ [InlineData("**<:test:537920404019216384>**")]
+ [InlineData("<><:test:537920404019216384>")]
+ public void ParseEmoji(string emoji)
+ {
+ var result = MessageHelper.ParseTags(emoji, null, null, null);
+ Assert.Contains(result, x => x.Type == TagType.Emoji);
+ }
+
+ /// Tests parsing a mention of @everyone.
+ [Theory]
+ [InlineData("@everyone")]
+ [InlineData("**@everyone**")]
+ public void ParseEveryone(string everyone)
+ {
+ var result = MessageHelper.ParseTags(everyone, null, null, null);
+ Assert.Contains(result, x => x.Type == TagType.EveryoneMention);
+ }
+
+ /// Tests parsing a mention of @here.
+ [Theory]
+ [InlineData("@here")]
+ [InlineData("**@here**")]
+ public void ParseHere(string here)
+ {
+ var result = MessageHelper.ParseTags(here, null, null, null);
+ Assert.Contains(result, x => x.Type == TagType.HereMention);
+ }
+
}
}