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.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. public void ParseTagsAroundCode(string testData)
  40. {
  41. // don't care that I'm passing in null channels/guilds/users
  42. // as they shouldn't be required
  43. var result = MessageHelper.ParseTags(testData, null, null, null);
  44. Assert.NotEmpty(result);
  45. }
  46. // cannot test parsing a user, as it uses the ReadOnlyCollection<IUser> arg.
  47. // this could be done if mocked entities are merged in PR #1290
  48. /// <summary> Tests parsing a mention of a role. </summary>
  49. [Theory]
  50. [InlineData("<@&163184946742034432>")]
  51. [InlineData("**<@&163184946742034432>**")]
  52. [InlineData("__<@&163184946742034432>__")]
  53. [InlineData("<><@&163184946742034432>")]
  54. public void ParseRole(string roleTag)
  55. {
  56. var result = MessageHelper.ParseTags(roleTag, null, null, null);
  57. Assert.Contains(result, x => x.Type == TagType.RoleMention);
  58. }
  59. /// <summary> Tests parsing a channel. </summary>
  60. [Theory]
  61. [InlineData("<#429115823748284417>")]
  62. [InlineData("**<#429115823748284417>**")]
  63. [InlineData("<><#429115823748284417>")]
  64. public void ParseChannel(string channelTag)
  65. {
  66. var result = MessageHelper.ParseTags(channelTag, null, null, null);
  67. Assert.Contains(result, x => x.Type == TagType.ChannelMention);
  68. }
  69. /// <summary> Tests parsing an emoji. </summary>
  70. [Theory]
  71. [InlineData("<:test:537920404019216384>")]
  72. [InlineData("**<:test:537920404019216384>**")]
  73. [InlineData("<><:test:537920404019216384>")]
  74. public void ParseEmoji(string emoji)
  75. {
  76. var result = MessageHelper.ParseTags(emoji, null, null, null);
  77. Assert.Contains(result, x => x.Type == TagType.Emoji);
  78. }
  79. /// <summary> Tests parsing a mention of @everyone. </summary>
  80. [Theory]
  81. [InlineData("@everyone")]
  82. [InlineData("**@everyone**")]
  83. public void ParseEveryone(string everyone)
  84. {
  85. var result = MessageHelper.ParseTags(everyone, null, null, null);
  86. Assert.Contains(result, x => x.Type == TagType.EveryoneMention);
  87. }
  88. /// <summary> Tests parsing a mention of @here. </summary>
  89. [Theory]
  90. [InlineData("@here")]
  91. [InlineData("**@here**")]
  92. public void ParseHere(string here)
  93. {
  94. var result = MessageHelper.ParseTags(here, null, null, null);
  95. Assert.Contains(result, x => x.Type == TagType.HereMention);
  96. }
  97. }
  98. }