You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

MessageHelperTests.cs 4.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using Xunit;
  2. using Discord.Rest;
  3. namespace Discord
  4. {
  5. /// <summary>
  6. /// Tests for <see cref="MessageHelper"/> parsing.
  7. /// </summary>
  8. public class MessageHelperTests
  9. {
  10. /// <summary>
  11. /// Tests that no tags are parsed while in code blocks
  12. /// or inline code.
  13. /// </summary>
  14. [Theory]
  15. [InlineData("`@everyone`")]
  16. [InlineData("`<@163184946742034432>`")]
  17. [InlineData("```@everyone```")]
  18. [InlineData("```cs \n @everyone```")]
  19. [InlineData("```cs <@163184946742034432> ```")]
  20. [InlineData("``` test ``` ```cs <@163184946742034432> ```")]
  21. [InlineData("`<:test:537920404019216384>`")]
  22. [InlineData("``` @everyone `")] // discord client handles these weirdly
  23. [InlineData("``` @everyone ``")]
  24. [InlineData("` @here `")]
  25. [InlineData("` @everyone @here <@163184946742034432> <@&163184946742034432> <#163184946742034432> <:test:537920404019216384> `")]
  26. public void ParseTagsInCode(string testData)
  27. {
  28. // don't care that I'm passing in null channels/guilds/users
  29. // as they shouldn't be required
  30. var result = MessageHelper.ParseTags(testData, null, null, null);
  31. Assert.Empty(result);
  32. }
  33. /// <summary> Tests parsing tags that surround inline code or a code block. </summary>
  34. [Theory]
  35. [InlineData("`` <@&163184946742034432>")]
  36. [InlineData("``` code block 1 ``` ``` code block 2 ``` <@&163184946742034432>")]
  37. [InlineData("` code block 1 ``` ` code block 2 ``` <@&163184946742034432>")]
  38. [InlineData("<@&163184946742034432> ``` code block 1 ```")]
  39. [InlineData("``` code ``` ``` code ``` @here ``` code ``` ``` more ```")]
  40. [InlineData("``` code ``` @here ``` more ```")]
  41. public void ParseTagsAroundCode(string testData)
  42. {
  43. // don't care that I'm passing in null channels/guilds/users
  44. // as they shouldn't be required
  45. var result = MessageHelper.ParseTags(testData, null, null, null);
  46. Assert.NotEmpty(result);
  47. }
  48. [Theory]
  49. [InlineData(@"\` @everyone \`")]
  50. [InlineData(@"\`\`\` @everyone \`\`\`")]
  51. [InlineData(@"hey\`\`\`@everyone\`\`\`!!")]
  52. public void IgnoreEscapedCodeBlocks(string testData)
  53. {
  54. var result = MessageHelper.ParseTags(testData, null, null, null);
  55. Assert.NotEmpty(result);
  56. }
  57. // cannot test parsing a user, as it uses the ReadOnlyCollection<IUser> arg.
  58. // this could be done if mocked entities are merged in PR #1290
  59. /// <summary> Tests parsing a mention of a role. </summary>
  60. [Theory]
  61. [InlineData("<@&163184946742034432>")]
  62. [InlineData("**<@&163184946742034432>**")]
  63. [InlineData("__<@&163184946742034432>__")]
  64. [InlineData("<><@&163184946742034432>")]
  65. public void ParseRole(string roleTag)
  66. {
  67. var result = MessageHelper.ParseTags(roleTag, null, null, null);
  68. Assert.Contains(result, x => x.Type == TagType.RoleMention);
  69. }
  70. /// <summary> Tests parsing a channel. </summary>
  71. [Theory]
  72. [InlineData("<#429115823748284417>")]
  73. [InlineData("**<#429115823748284417>**")]
  74. [InlineData("<><#429115823748284417>")]
  75. public void ParseChannel(string channelTag)
  76. {
  77. var result = MessageHelper.ParseTags(channelTag, null, null, null);
  78. Assert.Contains(result, x => x.Type == TagType.ChannelMention);
  79. }
  80. /// <summary> Tests parsing an emoji. </summary>
  81. [Theory]
  82. [InlineData("<:test:537920404019216384>")]
  83. [InlineData("**<:test:537920404019216384>**")]
  84. [InlineData("<><:test:537920404019216384>")]
  85. public void ParseEmoji(string emoji)
  86. {
  87. var result = MessageHelper.ParseTags(emoji, null, null, null);
  88. Assert.Contains(result, x => x.Type == TagType.Emoji);
  89. }
  90. /// <summary> Tests parsing a mention of @everyone. </summary>
  91. [Theory]
  92. [InlineData("@everyone")]
  93. [InlineData("**@everyone**")]
  94. public void ParseEveryone(string everyone)
  95. {
  96. var result = MessageHelper.ParseTags(everyone, null, null, null);
  97. Assert.Contains(result, x => x.Type == TagType.EveryoneMention);
  98. }
  99. /// <summary> Tests parsing a mention of @here. </summary>
  100. [Theory]
  101. [InlineData("@here")]
  102. [InlineData("**@here**")]
  103. public void ParseHere(string here)
  104. {
  105. var result = MessageHelper.ParseTags(here, null, null, null);
  106. Assert.Contains(result, x => x.Type == TagType.HereMention);
  107. }
  108. }
  109. }