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); + } + } }