Also fix MessageFormatter tests

This commit is contained in:
Dan Balasescu 2022-01-11 17:53:15 +09:00
parent 3cb5f43f77
commit ef66ec4622
2 changed files with 31 additions and 13 deletions

View File

@ -9,6 +9,21 @@ namespace osu.Game.Tests.Chat
[TestFixture] [TestFixture]
public class MessageFormatterTests public class MessageFormatterTests
{ {
private string originalWebsiteRootUrl;
[OneTimeSetUp]
public void OneTimeSetUp()
{
originalWebsiteRootUrl = MessageFormatter.WebsiteRootUrl;
MessageFormatter.WebsiteRootUrl = "dev.ppy.sh";
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
MessageFormatter.WebsiteRootUrl = originalWebsiteRootUrl;
}
[Test] [Test]
public void TestBareLink() public void TestBareLink()
{ {
@ -32,8 +47,6 @@ public void TestBareLink()
[TestCase(LinkAction.External, "https://dev.ppy.sh/beatmapsets/discussions/123", "https://dev.ppy.sh/beatmapsets/discussions/123")] [TestCase(LinkAction.External, "https://dev.ppy.sh/beatmapsets/discussions/123", "https://dev.ppy.sh/beatmapsets/discussions/123")]
public void TestBeatmapLinks(LinkAction expectedAction, string expectedArg, string link) public void TestBeatmapLinks(LinkAction expectedAction, string expectedArg, string link)
{ {
MessageFormatter.WebsiteRootUrl = "dev.ppy.sh";
Message result = MessageFormatter.FormatMessage(new Message { Content = link }); Message result = MessageFormatter.FormatMessage(new Message { Content = link });
Assert.AreEqual(result.Content, result.DisplayContent); Assert.AreEqual(result.Content, result.DisplayContent);
@ -47,7 +60,10 @@ public void TestBeatmapLinks(LinkAction expectedAction, string expectedArg, stri
[Test] [Test]
public void TestMultipleComplexLinks() public void TestMultipleComplexLinks()
{ {
Message result = MessageFormatter.FormatMessage(new Message { Content = "This is a http://test.io/link#fragment. (see https://twitter.com). Also, This string should not be altered. http://example.com/" }); Message result = MessageFormatter.FormatMessage(new Message
{
Content = "This is a http://test.io/link#fragment. (see https://twitter.com). Also, This string should not be altered. http://example.com/"
});
Assert.AreEqual(result.Content, result.DisplayContent); Assert.AreEqual(result.Content, result.DisplayContent);
Assert.AreEqual(3, result.Links.Count); Assert.AreEqual(3, result.Links.Count);
@ -104,7 +120,7 @@ public void TestWikiLink()
Assert.AreEqual("This is a Wiki Link.", result.DisplayContent); Assert.AreEqual("This is a Wiki Link.", result.DisplayContent);
Assert.AreEqual(1, result.Links.Count); Assert.AreEqual(1, result.Links.Count);
Assert.AreEqual("https://osu.ppy.sh/wiki/Wiki Link", result.Links[0].Url); Assert.AreEqual("https://dev.ppy.sh/wiki/Wiki Link", result.Links[0].Url);
Assert.AreEqual(10, result.Links[0].Index); Assert.AreEqual(10, result.Links[0].Index);
Assert.AreEqual(9, result.Links[0].Length); Assert.AreEqual(9, result.Links[0].Length);
} }
@ -117,15 +133,15 @@ public void TestMultiWikiLink()
Assert.AreEqual("This is a Wiki Link Wiki:LinkWiki.Link.", result.DisplayContent); Assert.AreEqual("This is a Wiki Link Wiki:LinkWiki.Link.", result.DisplayContent);
Assert.AreEqual(3, result.Links.Count); Assert.AreEqual(3, result.Links.Count);
Assert.AreEqual("https://osu.ppy.sh/wiki/Wiki Link", result.Links[0].Url); Assert.AreEqual("https://dev.ppy.sh/wiki/Wiki Link", result.Links[0].Url);
Assert.AreEqual(10, result.Links[0].Index); Assert.AreEqual(10, result.Links[0].Index);
Assert.AreEqual(9, result.Links[0].Length); Assert.AreEqual(9, result.Links[0].Length);
Assert.AreEqual("https://osu.ppy.sh/wiki/Wiki:Link", result.Links[1].Url); Assert.AreEqual("https://dev.ppy.sh/wiki/Wiki:Link", result.Links[1].Url);
Assert.AreEqual(20, result.Links[1].Index); Assert.AreEqual(20, result.Links[1].Index);
Assert.AreEqual(9, result.Links[1].Length); Assert.AreEqual(9, result.Links[1].Length);
Assert.AreEqual("https://osu.ppy.sh/wiki/Wiki.Link", result.Links[2].Url); Assert.AreEqual("https://dev.ppy.sh/wiki/Wiki.Link", result.Links[2].Url);
Assert.AreEqual(29, result.Links[2].Index); Assert.AreEqual(29, result.Links[2].Index);
Assert.AreEqual(9, result.Links[2].Length); Assert.AreEqual(9, result.Links[2].Length);
} }
@ -445,12 +461,15 @@ public void TestRecursiveBreaking()
[Test] [Test]
public void TestLinkComplex() public void TestLinkComplex()
{ {
Message result = MessageFormatter.FormatMessage(new Message { Content = "This is a [http://www.simple-test.com simple test] with some [traps] and [[wiki links]]. Don't forget to visit https://osu.ppy.sh (now!)[http://google.com]\uD83D\uDE12" }); Message result = MessageFormatter.FormatMessage(new Message
{
Content = "This is a [http://www.simple-test.com simple test] with some [traps] and [[wiki links]]. Don't forget to visit https://osu.ppy.sh (now!)[http://google.com]\uD83D\uDE12"
});
Assert.AreEqual("This is a simple test with some [traps] and wiki links. Don't forget to visit https://osu.ppy.sh now!\0\0\0", result.DisplayContent); Assert.AreEqual("This is a simple test with some [traps] and wiki links. Don't forget to visit https://osu.ppy.sh now!\0\0\0", result.DisplayContent);
Assert.AreEqual(5, result.Links.Count); Assert.AreEqual(5, result.Links.Count);
Link f = result.Links.Find(l => l.Url == "https://osu.ppy.sh/wiki/wiki links"); Link f = result.Links.Find(l => l.Url == "https://dev.ppy.sh/wiki/wiki links");
Assert.That(f, Is.Not.Null); Assert.That(f, Is.Not.Null);
Assert.AreEqual(44, f.Index); Assert.AreEqual(44, f.Index);
Assert.AreEqual(10, f.Length); Assert.AreEqual(10, f.Length);
@ -514,8 +533,6 @@ public void TestRelativeExternalLinks()
[TestCase("https://dev.ppy.sh/home/changelog/lazer/2021.1012", "lazer/2021.1012")] [TestCase("https://dev.ppy.sh/home/changelog/lazer/2021.1012", "lazer/2021.1012")]
public void TestChangelogLinks(string link, string expectedArg) public void TestChangelogLinks(string link, string expectedArg)
{ {
MessageFormatter.WebsiteRootUrl = "dev.ppy.sh";
LinkDetails result = MessageFormatter.GetLinkDetails(link); LinkDetails result = MessageFormatter.GetLinkDetails(link);
Assert.AreEqual(LinkAction.OpenChangelog, result.Action); Assert.AreEqual(LinkAction.OpenChangelog, result.Action);

View File

@ -57,6 +57,7 @@ public static class MessageFormatter
/// </summary> /// </summary>
public static string WebsiteRootUrl public static string WebsiteRootUrl
{ {
get => websiteRootUrl;
set => websiteRootUrl = value set => websiteRootUrl = value
.Trim('/') // trim potential trailing slash/ .Trim('/') // trim potential trailing slash/
.Split('/').Last(); // only keep domain name, ignoring protocol. .Split('/').Last(); // only keep domain name, ignoring protocol.
@ -134,7 +135,7 @@ public static LinkDetails GetLinkDetails(string url)
case "http": case "http":
case "https": case "https":
// length > 3 since all these links need another argument to work // length > 3 since all these links need another argument to work
if (args.Length > 3 && args[1].EndsWith(websiteRootUrl, StringComparison.OrdinalIgnoreCase)) if (args.Length > 3 && args[1].EndsWith(WebsiteRootUrl, StringComparison.OrdinalIgnoreCase))
{ {
string mainArg = args[3]; string mainArg = args[3];
@ -262,7 +263,7 @@ private static MessageFormatterResult format(string toFormat, int startIndex = 0
handleMatches(old_link_regex, "{1}", "{2}", result, startIndex, escapeChars: new[] { '(', ')' }); handleMatches(old_link_regex, "{1}", "{2}", result, startIndex, escapeChars: new[] { '(', ')' });
// handle wiki links // handle wiki links
handleMatches(wiki_regex, "{1}", $"https://{websiteRootUrl}/wiki/{{1}}", result, startIndex); handleMatches(wiki_regex, "{1}", $"https://{WebsiteRootUrl}/wiki/{{1}}", result, startIndex);
// handle bare links // handle bare links
handleAdvanced(advanced_link_regex, result, startIndex); handleAdvanced(advanced_link_regex, result, startIndex);