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