2019-06-27 02:40:22 +00:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
2019-01-24 08:43:03 +00:00
// See the LICENCE file in the repository root for full licence text.
2018-04-13 09:19:50 +00:00
using NUnit.Framework ;
using osu.Framework.Allocation ;
using osu.Game.Beatmaps ;
using osu.Game.Overlays ;
2018-04-18 07:04:02 +00:00
using osu.Game.Overlays.BeatmapSet ;
using osu.Game.Overlays.BeatmapSet.Buttons ;
using osu.Game.Overlays.BeatmapSet.Scores ;
2018-04-13 09:19:50 +00:00
using osu.Game.Rulesets ;
using osu.Game.Users ;
2019-02-05 16:32:33 +00:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
2018-04-13 09:19:50 +00:00
2019-03-24 16:02:36 +00:00
namespace osu.Game.Tests.Visual.Online
2018-04-13 09:19:50 +00:00
{
[TestFixture]
2019-05-14 19:37:25 +00:00
public class TestSceneBeatmapSetOverlay : OsuTestScene
2018-04-13 09:19:50 +00:00
{
2019-06-26 19:42:34 +00:00
private readonly TestBeatmapSetOverlay overlay ;
2018-04-13 09:19:50 +00:00
2018-04-18 07:04:02 +00:00
public override IReadOnlyList < Type > RequiredTypes = > new [ ]
{
typeof ( Header ) ,
2019-03-26 08:38:56 +00:00
typeof ( ScoreTable ) ,
typeof ( ScoreTableRowBackground ) ,
2018-04-18 07:04:02 +00:00
typeof ( DrawableTopScore ) ,
typeof ( ScoresContainer ) ,
typeof ( AuthorInfo ) ,
typeof ( BasicStats ) ,
typeof ( BeatmapPicker ) ,
typeof ( Details ) ,
2019-07-03 03:02:35 +00:00
typeof ( HeaderDownloadButton ) ,
2018-04-18 07:04:02 +00:00
typeof ( FavouriteButton ) ,
typeof ( Header ) ,
typeof ( HeaderButton ) ,
typeof ( Info ) ,
typeof ( PreviewButton ) ,
typeof ( SuccessRate ) ,
2019-06-27 02:40:22 +00:00
typeof ( BeatmapAvailability ) ,
2019-10-04 14:57:39 +00:00
typeof ( BeatmapRulesetSelector ) ,
typeof ( BeatmapRulesetTabItem ) ,
2019-11-22 18:55:21 +00:00
typeof ( NotSupporterPlaceholder )
2018-04-18 07:04:02 +00:00
} ;
2019-09-13 08:15:33 +00:00
protected override bool UseOnlineAPI = > true ;
2019-07-31 19:44:44 +00:00
2019-05-14 19:37:25 +00:00
public TestSceneBeatmapSetOverlay ( )
2018-04-13 09:19:50 +00:00
{
2019-06-26 19:42:34 +00:00
Add ( overlay = new TestBeatmapSetOverlay ( ) ) ;
2018-04-13 09:19:50 +00:00
}
2019-10-04 14:57:39 +00:00
[Resolved]
private RulesetStore rulesets { get ; set ; }
2018-04-13 09:19:50 +00:00
2019-06-13 09:14:57 +00:00
[Test]
public void TestLoading ( )
{
2018-04-18 07:04:02 +00:00
AddStep ( @"show loading" , ( ) = > overlay . ShowBeatmapSet ( null ) ) ;
2019-06-13 09:14:57 +00:00
}
2018-04-18 07:04:02 +00:00
2019-06-13 09:14:57 +00:00
[Test]
public void TestOnline ( )
{
2018-04-18 07:04:02 +00:00
AddStep ( @"show online" , ( ) = > overlay . FetchAndShowBeatmapSet ( 55 ) ) ;
2019-06-13 09:14:57 +00:00
}
2018-04-18 07:04:02 +00:00
2019-06-13 09:14:57 +00:00
[Test]
public void TestLocalBeatmaps ( )
{
2018-04-13 09:19:50 +00:00
AddStep ( @"show first" , ( ) = >
{
overlay . ShowBeatmapSet ( new BeatmapSetInfo
{
2019-06-27 03:00:31 +00:00
OnlineBeatmapSetID = 1235 ,
2018-04-13 09:19:50 +00:00
Metadata = new BeatmapMetadata
{
2019-06-27 03:00:31 +00:00
Title = @"an awesome beatmap" ,
Artist = @"naru narusegawa" ,
Source = @"hinata sou" ,
Tags = @"test tag tag more tag" ,
2018-04-13 09:19:50 +00:00
Author = new User
{
2019-06-27 03:00:31 +00:00
Username = @"BanchoBot" ,
Id = 3 ,
2018-04-13 09:19:50 +00:00
} ,
} ,
OnlineInfo = new BeatmapSetOnlineInfo
{
2019-06-27 03:00:31 +00:00
Preview = @"https://b.ppy.sh/preview/12345.mp3" ,
2019-06-27 04:48:57 +00:00
PlayCount = 123 ,
FavouriteCount = 456 ,
Submitted = DateTime . Now ,
Ranked = DateTime . Now ,
2019-07-08 06:10:41 +00:00
BPM = 111 ,
2018-04-13 09:19:50 +00:00
HasVideo = true ,
2019-06-27 04:48:57 +00:00
HasStoryboard = true ,
Covers = new BeatmapSetOnlineCovers ( ) ,
2018-04-13 09:19:50 +00:00
} ,
2019-06-13 07:52:49 +00:00
Metrics = new BeatmapSetMetrics { Ratings = Enumerable . Range ( 0 , 11 ) . ToArray ( ) } ,
2018-04-13 09:19:50 +00:00
Beatmaps = new List < BeatmapInfo >
{
new BeatmapInfo
{
2019-06-27 04:48:57 +00:00
StarDifficulty = 9.99 ,
Version = @"TEST" ,
2019-07-07 17:25:36 +00:00
Length = 456000 ,
2019-10-04 14:57:39 +00:00
Ruleset = rulesets . GetRuleset ( 3 ) ,
2018-04-13 09:19:50 +00:00
BaseDifficulty = new BeatmapDifficulty
{
2019-06-27 04:48:57 +00:00
CircleSize = 1 ,
DrainRate = 2.3f ,
OverallDifficulty = 4.5f ,
ApproachRate = 6 ,
2018-04-13 09:19:50 +00:00
} ,
OnlineInfo = new BeatmapOnlineInfo
{
2019-06-27 04:48:57 +00:00
CircleCount = 111 ,
SliderCount = 12 ,
PlayCount = 222 ,
PassCount = 21 ,
2018-04-13 09:19:50 +00:00
} ,
Metrics = new BeatmapMetrics
{
2019-06-13 07:30:38 +00:00
Fails = Enumerable . Range ( 1 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
2018-04-13 09:19:50 +00:00
} ,
} ,
} ,
2019-06-27 03:00:31 +00:00
} ) ;
2018-04-13 09:19:50 +00:00
} ) ;
2019-06-26 02:17:28 +00:00
2019-06-19 00:37:08 +00:00
downloadAssert ( true ) ;
2019-08-23 15:31:53 +00:00
AddStep ( "show many difficulties" , ( ) = > overlay . ShowBeatmapSet ( createManyDifficultiesBeatmapSet ( ) ) ) ;
downloadAssert ( true ) ;
2019-06-26 02:01:29 +00:00
}
2019-06-19 00:37:08 +00:00
2019-06-26 02:01:29 +00:00
[Test]
2019-06-27 04:48:57 +00:00
public void TestAvailability ( )
2019-06-26 02:01:29 +00:00
{
AddStep ( @"show undownloadable" , ( ) = >
2018-04-13 09:19:50 +00:00
{
overlay . ShowBeatmapSet ( new BeatmapSetInfo
{
2019-06-27 03:00:31 +00:00
OnlineBeatmapSetID = 1234 ,
2018-04-13 09:19:50 +00:00
Metadata = new BeatmapMetadata
{
2019-06-27 04:48:57 +00:00
Title = @"undownloadable beatmap" ,
Artist = @"no one" ,
Source = @"some source" ,
Tags = @"another test tag tag more test tags" ,
2018-04-13 09:19:50 +00:00
Author = new User
{
2019-06-27 04:48:57 +00:00
Username = @"BanchoBot" ,
Id = 3 ,
2018-04-13 09:19:50 +00:00
} ,
} ,
OnlineInfo = new BeatmapSetOnlineInfo
{
2019-06-26 02:01:29 +00:00
Availability = new BeatmapSetOnlineAvailability
{
DownloadDisabled = true ,
ExternalLink = "https://osu.ppy.sh" ,
} ,
2019-06-27 04:48:57 +00:00
Preview = @"https://b.ppy.sh/preview/1234.mp3" ,
PlayCount = 123 ,
FavouriteCount = 456 ,
Submitted = DateTime . Now ,
Ranked = DateTime . Now ,
2019-07-08 06:10:41 +00:00
BPM = 111 ,
2019-06-27 04:48:57 +00:00
HasVideo = true ,
HasStoryboard = true ,
Covers = new BeatmapSetOnlineCovers ( ) ,
2019-08-29 09:29:31 +00:00
Language = new BeatmapSetOnlineLanguage { Id = 3 , Name = "English" } ,
Genre = new BeatmapSetOnlineGenre { Id = 4 , Name = "Rock" } ,
2018-04-13 09:19:50 +00:00
} ,
2019-06-13 07:52:49 +00:00
Metrics = new BeatmapSetMetrics { Ratings = Enumerable . Range ( 0 , 11 ) . ToArray ( ) } ,
2018-04-13 09:19:50 +00:00
Beatmaps = new List < BeatmapInfo >
{
new BeatmapInfo
{
2019-06-27 04:48:57 +00:00
StarDifficulty = 5.67 ,
Version = @"ANOTHER TEST" ,
2019-07-07 17:25:36 +00:00
Length = 123000 ,
2019-10-04 14:57:39 +00:00
Ruleset = rulesets . GetRuleset ( 1 ) ,
2018-04-13 09:19:50 +00:00
BaseDifficulty = new BeatmapDifficulty
{
2019-06-27 04:48:57 +00:00
CircleSize = 9 ,
DrainRate = 8 ,
OverallDifficulty = 7 ,
ApproachRate = 6 ,
2018-04-13 09:19:50 +00:00
} ,
OnlineInfo = new BeatmapOnlineInfo
{
2019-06-27 04:48:57 +00:00
CircleCount = 123 ,
SliderCount = 45 ,
PlayCount = 567 ,
PassCount = 89 ,
2018-04-13 09:19:50 +00:00
} ,
Metrics = new BeatmapMetrics
{
2019-06-13 07:30:38 +00:00
Fails = Enumerable . Range ( 1 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
2018-04-13 09:19:50 +00:00
} ,
} ,
} ,
2019-06-27 03:00:31 +00:00
} ) ;
2018-04-13 09:19:50 +00:00
} ) ;
2019-06-26 02:17:28 +00:00
2019-06-25 00:21:55 +00:00
downloadAssert ( false ) ;
2019-06-13 09:14:57 +00:00
}
2019-06-12 17:42:52 +00:00
2019-10-04 14:57:39 +00:00
[Test]
public void TestMultipleRulesets ( )
{
AddStep ( "show multiple rulesets beatmap" , ( ) = >
{
var beatmaps = new List < BeatmapInfo > ( ) ;
foreach ( var ruleset in rulesets . AvailableRulesets . Skip ( 1 ) )
{
beatmaps . Add ( new BeatmapInfo
{
Version = ruleset . Name ,
Ruleset = ruleset ,
BaseDifficulty = new BeatmapDifficulty ( ) ,
OnlineInfo = new BeatmapOnlineInfo ( ) ,
Metrics = new BeatmapMetrics
{
Fails = Enumerable . Range ( 1 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
} ,
} ) ;
}
overlay . ShowBeatmapSet ( new BeatmapSetInfo
{
Metadata = new BeatmapMetadata
{
Title = @"multiple rulesets beatmap" ,
Artist = @"none" ,
Author = new User
{
Username = "BanchoBot" ,
Id = 3 ,
}
} ,
OnlineInfo = new BeatmapSetOnlineInfo
{
Covers = new BeatmapSetOnlineCovers ( ) ,
} ,
Metrics = new BeatmapSetMetrics { Ratings = Enumerable . Range ( 0 , 11 ) . ToArray ( ) } ,
Beatmaps = beatmaps
} ) ;
} ) ;
AddAssert ( "shown beatmaps of current ruleset" , ( ) = > overlay . Header . Picker . Difficulties . All ( b = > b . Beatmap . Ruleset . Equals ( overlay . Header . RulesetSelector . Current . Value ) ) ) ;
AddAssert ( "left-most beatmap selected" , ( ) = > overlay . Header . Picker . Difficulties . First ( ) . State = = BeatmapPicker . DifficultySelectorState . Selected ) ;
}
2019-06-13 09:14:57 +00:00
[Test]
public void TestHide ( )
{
2018-04-13 09:19:50 +00:00
AddStep ( @"hide" , overlay . Hide ) ;
2019-06-13 09:14:57 +00:00
}
[Test]
public void TestShowWithNoReload ( )
{
2018-04-13 09:19:50 +00:00
AddStep ( @"show without reload" , overlay . Show ) ;
}
2019-06-25 00:21:55 +00:00
2019-08-23 15:31:53 +00:00
private BeatmapSetInfo createManyDifficultiesBeatmapSet ( )
{
var beatmaps = new List < BeatmapInfo > ( ) ;
for ( int i = 1 ; i < 41 ; i + + )
{
beatmaps . Add ( new BeatmapInfo
{
OnlineBeatmapID = i * 10 ,
Version = $"Test #{i}" ,
Ruleset = Ruleset . Value ,
StarDifficulty = 2 + i * 0.1 ,
BaseDifficulty = new BeatmapDifficulty
{
OverallDifficulty = 3.5f ,
} ,
OnlineInfo = new BeatmapOnlineInfo ( ) ,
Metrics = new BeatmapMetrics
{
Fails = Enumerable . Range ( 1 , 100 ) . Select ( j = > j % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( j = > j % 12 - 6 ) . ToArray ( ) ,
} ,
} ) ;
}
return new BeatmapSetInfo
{
OnlineBeatmapSetID = 123 ,
Metadata = new BeatmapMetadata
{
Title = @"many difficulties beatmap" ,
Artist = @"none" ,
Author = new User
{
Username = @"BanchoBot" ,
Id = 3 ,
} ,
} ,
OnlineInfo = new BeatmapSetOnlineInfo
{
Preview = @"https://b.ppy.sh/preview/123.mp3" ,
HasVideo = true ,
HasStoryboard = true ,
Covers = new BeatmapSetOnlineCovers ( ) ,
} ,
Metrics = new BeatmapSetMetrics { Ratings = Enumerable . Range ( 0 , 11 ) . ToArray ( ) } ,
Beatmaps = beatmaps ,
} ;
}
2019-06-25 00:21:55 +00:00
private void downloadAssert ( bool shown )
{
2019-10-04 14:57:39 +00:00
AddAssert ( $"is download button {(shown ? " shown " : " hidden ")}" , ( ) = > overlay . Header . DownloadButtonsVisible = = shown ) ;
2019-06-26 19:42:34 +00:00
}
private class TestBeatmapSetOverlay : BeatmapSetOverlay
{
2019-10-04 14:57:39 +00:00
public new Header Header = > base . Header ;
2019-06-25 00:21:55 +00:00
}
2018-04-13 09:19:50 +00:00
}
}