Browse Source

Add more test coverage of MessageHelper.ParseTags

pull/1318/head
Chris Johnston 6 years ago
parent
commit
1717d09309
1 changed files with 75 additions and 13 deletions
  1. +75
    -13
      test/Discord.Net.Tests/MessageHelperTests.cs

+ 75
- 13
test/Discord.Net.Tests/MessageHelperTests.cs View File

@@ -1,44 +1,106 @@
using System;
using System.Collections.Generic;
using System.Text;
using Xunit;
using Discord.Rest;

namespace Discord
{
/// <summary>
/// Tests for <see cref="Discord.Rest.MessageHelper"/> parsing.
/// Tests for <see cref="MessageHelper"/> parsing.
/// </summary>
public class MessageHelperTests
{
/// <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>
[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);
}

/// <summary> Tests parsing tags that surround inline code or a code block. </summary>
[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<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);
}

}
}


Loading…
Cancel
Save