| @@ -1,44 +1,106 @@ | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Text; | |||||
| using Xunit; | using Xunit; | ||||
| using Discord.Rest; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| /// <summary> | /// <summary> | ||||
| /// Tests for <see cref="Discord.Rest.MessageHelper"/> parsing. | |||||
| /// Tests for <see cref="MessageHelper"/> parsing. | |||||
| /// </summary> | /// </summary> | ||||
| public class MessageHelperTests | public class MessageHelperTests | ||||
| { | { | ||||
| /// <summary> | /// <summary> | ||||
| /// Tests that no tags work while they are in code blocks. | |||||
| /// Tests that no tags are parsed while in code blocks | |||||
| /// or inline code. | |||||
| /// </summary> | /// </summary> | ||||
| [Theory] | [Theory] | ||||
| [InlineData("`@everyone`")] | [InlineData("`@everyone`")] | ||||
| [InlineData("`<@&163184946742034432>`")] | |||||
| [InlineData("`<@163184946742034432>`")] | |||||
| [InlineData("```@everyone```")] | [InlineData("```@everyone```")] | ||||
| [InlineData("```cs \n @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 | // don't care that I'm passing in null channels/guilds/users | ||||
| // as they shouldn't be required | // 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); | Assert.Empty(result); | ||||
| } | } | ||||
| /// <summary> Tests parsing tags that surround inline code or a code block. </summary> | |||||
| [Theory] | [Theory] | ||||
| [InlineData("`` <@&163184946742034432>")] | [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 | // don't care that I'm passing in null channels/guilds/users | ||||
| // as they shouldn't be required | // 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); | Assert.NotEmpty(result); | ||||
| } | } | ||||
| // cannot test parsing a user, as it uses the ReadOnlyCollection<IUser> arg. | |||||
| // this could be done if mocked entities are merged in PR #1290 | |||||
| /// <summary> Tests parsing a mention of a role. </summary> | |||||
| [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); | |||||
| } | |||||
| /// <summary> Tests parsing a channel. </summary> | |||||
| [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); | |||||
| } | |||||
| /// <summary> Tests parsing an emoji. </summary> | |||||
| [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); | |||||
| } | |||||
| /// <summary> Tests parsing a mention of @everyone. </summary> | |||||
| [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); | |||||
| } | |||||
| /// <summary> Tests parsing a mention of @here. </summary> | |||||
| [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); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||