// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. #nullable disable using System; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Online.API.Requests.Responses; using osu.Game.Online.Chat; using osu.Game.Overlays.Chat; namespace osu.Game.Tests.Visual.Online { [TestFixture] public partial class TestSceneChatLineTruncation : OsuTestScene { private readonly TestChatLineContainer textContainer; public TestSceneChatLineTruncation() { Add(textContainer = new TestChatLineContainer { Padding = new MarginPadding { Left = 20, Right = 20 }, RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Direction = FillDirection.Vertical, }); } [BackgroundDependencyLoader] private void load() { testFormatting(); } private void clear() => AddStep("clear messages", textContainer.Clear); private void addMessageWithChecks(string text, bool isAction = false, bool isImportant = false, string username = null, Colour4? color = null) { int index = textContainer.Count + 1; var newLine = color != null ? new ChatLine(new DummyMessage(text, isAction, isImportant, index, username)) { UsernameColour = color.Value } : new ChatLine(new DummyMessage(text, isAction, isImportant, index, username)); textContainer.Add(newLine); } private void testFormatting() { for (int a = 0; a < 25; a++) addMessageWithChecks($"Wide {a} character username.", username: new string('w', a)); addMessageWithChecks("Short name with spaces.", username: "sho rt name"); addMessageWithChecks("Long name with spaces.", username: "long name with s p a c e s"); addMessageWithChecks("message with custom color", username: "I have custom color", color: Colour4.Green); } private class DummyMessage : Message { private static long messageCounter; internal static readonly APIUser TEST_SENDER_BACKGROUND = new APIUser { Username = @"i-am-important", Id = 42, Colour = "#250cc9", }; internal static readonly APIUser TEST_SENDER = new APIUser { Username = @"Somebody", Id = 1, }; public new DateTimeOffset Timestamp = DateTimeOffset.Now; public DummyMessage(string text, bool isAction = false, bool isImportant = false, int number = 0, string username = null) : base(messageCounter++) { Content = text; IsAction = isAction; Sender = new APIUser { Username = username ?? $"user {number}", Id = number, Colour = isImportant ? "#250cc9" : null, }; } } private partial class TestChatLineContainer : FillFlowContainer<ChatLine> { protected override int Compare(Drawable x, Drawable y) { var xC = (ChatLine)x; var yC = (ChatLine)y; return xC.Message.CompareTo(yC.Message); } } } }