2019-01-24 16:43:03 +08:00
// 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.
2018-04-14 19:32:48 +08:00
using System ;
using System.Collections.Generic ;
2018-06-01 04:56:12 +08:00
using System.Linq ;
2018-04-14 19:32:48 +08:00
using osu.Framework.Extensions.Color4Extensions ;
using osu.Framework.Graphics ;
using osu.Framework.Graphics.Containers ;
using osu.Framework.Graphics.Shapes ;
using osu.Framework.Graphics.Sprites ;
using osu.Framework.MathUtils ;
using osu.Game.Online.Chat ;
2018-07-10 04:09:27 +08:00
using osu.Game.Overlays.Chat.Tabs ;
2018-04-14 19:32:48 +08:00
using osu.Game.Users ;
2018-11-20 15:51:59 +08:00
using osuTK.Graphics ;
2018-04-14 19:32:48 +08:00
namespace osu.Game.Tests.Visual
{
2018-07-30 03:18:37 +08:00
public class TestCaseChannelTabControl : OsuTestCase
2018-04-14 19:32:48 +08:00
{
public override IReadOnlyList < Type > RequiredTypes = > new [ ]
{
2018-07-30 03:18:37 +08:00
typeof ( ChannelTabControl ) ,
2018-04-14 19:32:48 +08:00
} ;
2018-07-30 03:18:37 +08:00
private readonly ChannelTabControl channelTabControl ;
2018-04-14 19:32:48 +08:00
2018-07-30 03:18:37 +08:00
public TestCaseChannelTabControl ( )
2018-04-14 19:32:48 +08:00
{
SpriteText currentText ;
Add ( new Container
{
RelativeSizeAxes = Axes . X ,
Origin = Anchor . Centre ,
Anchor = Anchor . Centre ,
Children = new Drawable [ ]
{
2018-07-30 03:18:37 +08:00
channelTabControl = new ChannelTabControl
2018-04-14 19:32:48 +08:00
{
RelativeSizeAxes = Axes . X ,
Origin = Anchor . Centre ,
Anchor = Anchor . Centre ,
Height = 50
} ,
new Box
{
Colour = Color4 . Black . Opacity ( 0.1f ) ,
RelativeSizeAxes = Axes . X ,
Height = 50 ,
Depth = - 1 ,
Origin = Anchor . Centre ,
Anchor = Anchor . Centre ,
}
}
} ) ;
Add ( new Container
{
Origin = Anchor . TopLeft ,
Anchor = Anchor . TopLeft ,
Children = new Drawable [ ]
{
currentText = new SpriteText
{
2018-07-30 03:18:37 +08:00
Text = "Currently selected channel:"
2018-04-14 19:32:48 +08:00
}
}
} ) ;
2018-07-30 03:18:37 +08:00
channelTabControl . OnRequestLeave + = channel = > channelTabControl . RemoveChannel ( channel ) ;
2019-02-22 16:51:39 +08:00
channelTabControl . Current . ValueChanged + = channel = > currentText . Text = "Currently selected channel: " + channel . NewValue . ToString ( ) ;
2018-04-14 19:32:48 +08:00
2018-12-07 13:00:16 +08:00
AddStep ( "Add random private channel" , addRandomPrivateChannel ) ;
2018-07-30 06:13:32 +08:00
AddAssert ( "There is only one channels" , ( ) = > channelTabControl . Items . Count ( ) = = 2 ) ;
2018-12-07 13:00:16 +08:00
AddRepeatStep ( "Add 3 random private channels" , addRandomPrivateChannel , 3 ) ;
2018-07-30 06:13:32 +08:00
AddAssert ( "There are four channels" , ( ) = > channelTabControl . Items . Count ( ) = = 5 ) ;
AddStep ( "Add random public channel" , ( ) = > addChannel ( RNG . Next ( ) . ToString ( ) ) ) ;
2018-12-07 13:00:16 +08:00
AddRepeatStep ( "Select a random channel" , ( ) = > channelTabControl . Current . Value = channelTabControl . Items . ElementAt ( RNG . Next ( channelTabControl . Items . Count ( ) - 1 ) ) , 20 ) ;
2018-04-14 19:32:48 +08:00
2018-12-07 13:00:16 +08:00
Channel channelBefore = channelTabControl . Items . First ( ) ;
AddStep ( "set first channel" , ( ) = > channelTabControl . Current . Value = channelBefore ) ;
2018-06-01 04:56:12 +08:00
2018-12-07 13:00:16 +08:00
AddStep ( "select selector tab" , ( ) = > channelTabControl . Current . Value = channelTabControl . Items . Last ( ) ) ;
AddAssert ( "selector tab is active" , ( ) = > channelTabControl . ChannelSelectorActive . Value ) ;
AddAssert ( "check channel unchanged" , ( ) = > channelBefore = = channelTabControl . Current . Value ) ;
AddStep ( "set second channel" , ( ) = > channelTabControl . Current . Value = channelTabControl . Items . Skip ( 1 ) . First ( ) ) ;
AddAssert ( "selector tab is inactive" , ( ) = > ! channelTabControl . ChannelSelectorActive . Value ) ;
AddUntilStep ( ( ) = >
2018-08-04 07:00:46 +08:00
{
2018-12-07 13:00:16 +08:00
var first = channelTabControl . Items . First ( ) ;
if ( first . Name = = "+" )
return true ;
channelTabControl . RemoveChannel ( first ) ;
return false ;
} , "remove all channels" ) ;
AddAssert ( "selector tab is active" , ( ) = > channelTabControl . ChannelSelectorActive . Value ) ;
2018-04-14 19:32:48 +08:00
}
2018-12-07 13:00:16 +08:00
private void addRandomPrivateChannel ( ) = >
channelTabControl . AddChannel ( new Channel ( new User
{
Id = RNG . Next ( 1000 , 10000000 ) ,
Username = "Test User " + RNG . Next ( 1000 )
} ) ) ;
private void addChannel ( string name ) = >
2018-07-30 03:18:37 +08:00
channelTabControl . AddChannel ( new Channel
2018-04-14 19:32:48 +08:00
{
2018-11-13 14:36:36 +08:00
Type = ChannelType . Public ,
2018-04-14 19:32:48 +08:00
Name = name
} ) ;
}
}