mirror of https://github.com/ppy/osu
109 lines
3.6 KiB
C#
109 lines
3.6 KiB
C#
// 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);
|
|
}
|
|
}
|
|
}
|
|
}
|