2017-12-07 17:29:33 +08:00
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 ;
2017-12-07 18:11:43 +08:00
private readonly TestChatLineContainer textContainer ;
2017-12-07 17:29:33 +08:00
private ChatLine [ ] testSprites ;
protected override IReadOnlyDependencyContainer CreateLocalDependencies ( IReadOnlyDependencyContainer parent ) = > dependencies = new DependencyContainer ( parent ) ;
public TestCaseChatLink ( )
{
chat = new ChatOverlay ( ) ;
2017-12-07 18:11:43 +08:00
Add ( beatmapSetOverlay = new BeatmapSetOverlay { Depth = float . MinValue } ) ;
2017-12-07 17:29:33 +08:00
2017-12-07 18:11:43 +08:00
Add ( textContainer = new TestChatLineContainer
2017-12-07 17:29:33 +08:00
{
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!" ) ) ,
2017-12-07 18:11:43 +08:00
new ChatLine ( new DummyMessage ( "http://lookatmy.horse/" ) ) ,
2017-12-07 17:29:33 +08:00
new ChatLine ( new DummyMessage ( "https://osu.ppy.sh!" ) ) ,
new ChatLine ( new DummyMessage ( "00:12:345 (1,2) - Test?" ) ) ,
2017-12-07 18:11:43 +08:00
// TODO: Remove prefix and add tooltips with links
2017-12-07 17:29:33 +08:00
new ChatLine ( new DummyMessage ( "Wiki link for tasty [[Performance Points]]" ) ) ,
2017-12-07 18:11:43 +08:00
new ChatLine ( new DummyMessage ( "(osu forums)[https://osu.ppy.sh/forum] (old link format)" ) ) ,
new ChatLine ( new DummyMessage ( "[https://osu.ppy.sh/home New site] (new link format)" ) ) ,
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 ( "is now listening to [https://osu.ppy.sh/s/93523 IMAGE -MATERIAL- <Version 0>]" , true ) ) ,
2017-12-07 17:29:33 +08:00
new ChatLine ( new DummyMessage ( "is now playing [https://osu.ppy.sh/b/252238 IMAGE -MATERIAL- <Version 0>]" , 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.89 m
} ,
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 DateTimeOffset Timestamp = DateTimeOffset . Now ;
public DummyMessage ( string text , bool isAction = false )
: base ( messageCounter + + )
{
Content = text ;
IsAction = isAction ;
Sender = sender ;
}
}
2017-12-07 18:11:43 +08:00
private class TestChatLineContainer : FillFlowContainer < ChatLine >
2017-12-07 17:29:33 +08:00
{
protected override int Compare ( Drawable x , Drawable y )
{
var xC = ( ChatLine ) x ;
var yC = ( ChatLine ) y ;
return xC . Message . CompareTo ( yC . Message ) ;
}
}
}
}