diff --git a/osu.Game.Tests/Visual/TestCaseChatLink.cs b/osu.Game.Tests/Visual/TestCaseChatLink.cs new file mode 100644 index 0000000000..a2e73a56fb --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseChatLink.cs @@ -0,0 +1,112 @@ +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Online.Chat; +using osu.Game.Overlays; +using osu.Game.Overlays.Chat; +using osu.Game.Users; +using System; +using System.Linq; + +namespace osu.Game.Tests.Visual +{ + class TestCaseChatLink : OsuTestCase + { + private readonly BeatmapSetOverlay beatmapSetOverlay; + private readonly ChatOverlay chat; + + private DependencyContainer dependencies; + + private readonly ChatLineContainer textContainer; + private ChatLine[] testSprites; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) => dependencies = new DependencyContainer(parent); + + public TestCaseChatLink() + { + chat = new ChatOverlay(); + Add(beatmapSetOverlay = new BeatmapSetOverlay { Depth = float.MaxValue }); + + Add(textContainer = new ChatLineContainer + { + Padding = new MarginPadding { Left = 20, Right = 20 }, + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + }); + + testSprites = new[] + { + new ChatLine(new DummyMessage("Test!")), + new ChatLine(new DummyMessage("osu.ppy.sh!")), + new ChatLine(new DummyMessage("long message to test word wrap: use https://encrypted.google.com instead of https://google.com or even worse, [http://google.com Unencrypted google]")), + new ChatLine(new DummyMessage("https://osu.ppy.sh!")), + new ChatLine(new DummyMessage("00:12:345 (1,2) - Test?")), + new ChatLine(new DummyMessage("Wiki link for tasty [[Performance Points]]")), + new ChatLine(new DummyMessage("is now playing [https://osu.ppy.sh/s/93523 IMAGE -MATERIAL- ]", true)), + new ChatLine(new DummyMessage("is now playing [https://osu.ppy.sh/b/252238 IMAGE -MATERIAL- ]", true)), + }; + } + + [BackgroundDependencyLoader] + private void load() + { + dependencies.Cache(chat); + dependencies.Cache(beatmapSetOverlay); + + textContainer.AddRange(testSprites); + } + + private class DummyMessage : Message + { + private static long messageCounter = 0; + private static User sender = new User + { + Username = @"Somebody", + Id = 1, + Country = new Country { FullName = @"Alien" }, + CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c1.jpg", + JoinDate = DateTimeOffset.Now.AddDays(-1), + LastVisit = DateTimeOffset.Now, + Age = 1, + ProfileOrder = new[] { "me" }, + CountryRank = 1, + Statistics = new UserStatistics + { + Rank = 2148, + PP = 4567.89m + }, + RankHistory = new User.RankHistoryData + { + Mode = @"osu", + Data = Enumerable.Range(2345, 45).Concat(Enumerable.Range(2109, 40)).ToArray() + } + }; + + public new long Id = 42; + public new TargetType TargetType = TargetType.Channel; + public new int TargetId = 1; + public new bool IsAction; + public new DateTimeOffset Timestamp = DateTimeOffset.Now; + + public DummyMessage(string text, bool isAction = false) + : base(messageCounter++) + { + Content = text; + IsAction = isAction; + Sender = sender; + } + } + + private class ChatLineContainer : FillFlowContainer + { + protected override int Compare(Drawable x, Drawable y) + { + var xC = (ChatLine)x; + var yC = (ChatLine)y; + + return xC.Message.CompareTo(yC.Message); + } + } + } +} diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index b4242052d5..1fc58593ed 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -121,6 +121,7 @@ +