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

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