osu/osu.Game.Tests/Visual/Beatmaps/TestSceneBeatmapCard.cs

202 lines
6.9 KiB
C#
Raw Normal View History

2021-10-17 15:00:54 +00: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.
using System;
using System.Collections.Generic;
using System.Linq;
2021-10-17 16:24:17 +00:00
using NUnit.Framework;
2021-10-17 15:00:54 +00:00
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Game.Beatmaps;
2021-10-17 16:24:17 +00:00
using osu.Game.Beatmaps.Drawables.Cards;
2021-10-17 15:00:54 +00:00
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Overlays;
using osu.Game.Users;
using osuTK;
namespace osu.Game.Tests.Visual.Beatmaps
{
public class TestSceneBeatmapCard : OsuTestScene
{
2021-10-17 16:24:17 +00:00
private APIBeatmapSet[] testCases;
2021-10-17 15:00:54 +00:00
#region Test case generation
[BackgroundDependencyLoader]
private void load()
{
var normal = CreateAPIBeatmapSet(Ruleset.Value);
normal.HasVideo = true;
normal.HasStoryboard = true;
2021-10-17 18:50:44 +00:00
var withStatistics = CreateAPIBeatmapSet(Ruleset.Value);
withStatistics.Status = BeatmapSetOnlineStatus.Approved;
withStatistics.FavouriteCount = 284_239;
withStatistics.PlayCount = 999_001;
withStatistics.Ranked = DateTimeOffset.Now.AddDays(-45);
withStatistics.HypeStatus = new BeatmapSetHypeStatus
{
Current = 34,
Required = 5
};
withStatistics.NominationStatus = new BeatmapSetNominationStatus
{
Current = 1,
Required = 2
};
2021-10-17 18:50:44 +00:00
2021-10-17 15:00:54 +00:00
var undownloadable = getUndownloadableBeatmapSet();
2021-10-17 18:50:44 +00:00
undownloadable.LastUpdated = DateTimeOffset.Now.AddYears(-1);
2021-10-17 16:24:17 +00:00
var someDifficulties = getManyDifficultiesBeatmapSet(11);
someDifficulties.Title = someDifficulties.TitleUnicode = "some difficulties";
someDifficulties.Status = BeatmapSetOnlineStatus.Qualified;
2021-10-17 18:50:44 +00:00
someDifficulties.HasFavourited = true;
someDifficulties.FavouriteCount = 1;
2021-10-17 16:24:17 +00:00
var manyDifficulties = getManyDifficultiesBeatmapSet(100);
manyDifficulties.Status = BeatmapSetOnlineStatus.Pending;
2021-10-17 15:00:54 +00:00
var explicitMap = CreateAPIBeatmapSet(Ruleset.Value);
explicitMap.HasExplicitContent = true;
var featuredMap = CreateAPIBeatmapSet(Ruleset.Value);
featuredMap.TrackId = 1;
var explicitFeaturedMap = CreateAPIBeatmapSet(Ruleset.Value);
explicitFeaturedMap.HasExplicitContent = true;
explicitFeaturedMap.TrackId = 2;
2021-10-17 16:24:17 +00:00
var longName = CreateAPIBeatmapSet(Ruleset.Value);
longName.Title = longName.TitleUnicode = "this track has an incredibly and implausibly long title";
longName.Artist = longName.ArtistUnicode = "and this artist! who would have thunk it. it's really such a long name.";
longName.HasExplicitContent = true;
longName.TrackId = 444;
testCases = new[]
2021-10-17 15:00:54 +00:00
{
normal,
2021-10-17 18:50:44 +00:00
withStatistics,
2021-10-17 15:00:54 +00:00
undownloadable,
2021-10-17 16:24:17 +00:00
someDifficulties,
2021-10-17 15:00:54 +00:00
manyDifficulties,
explicitMap,
featuredMap,
2021-10-17 16:24:17 +00:00
explicitFeaturedMap,
longName
2021-10-17 15:00:54 +00:00
};
}
private APIBeatmapSet getUndownloadableBeatmapSet() => new APIBeatmapSet
{
OnlineID = 123,
Title = "undownloadable beatmap",
Artist = "test",
Source = "more tests",
Author = new User
{
Username = "BanchoBot",
Id = 3,
},
Availability = new BeatmapSetOnlineAvailability
{
DownloadDisabled = true,
},
Preview = @"https://b.ppy.sh/preview/12345.mp3",
PlayCount = 123,
FavouriteCount = 456,
BPM = 111,
HasVideo = true,
HasStoryboard = true,
Covers = new BeatmapSetOnlineCovers(),
Beatmaps = new[]
2021-10-17 15:00:54 +00:00
{
new APIBeatmap
{
RulesetID = Ruleset.Value.OnlineID,
DifficultyName = "Test",
StarRating = 6.42,
}
}
};
2021-10-17 16:24:17 +00:00
private static APIBeatmapSet getManyDifficultiesBeatmapSet(int count)
2021-10-17 15:00:54 +00:00
{
var beatmaps = new List<APIBeatmap>();
2021-10-17 16:24:17 +00:00
for (int i = 0; i < count; i++)
2021-10-17 15:00:54 +00:00
{
beatmaps.Add(new APIBeatmap
{
RulesetID = i % 4,
StarRating = 2 + i % 4 * 2,
});
}
return new APIBeatmapSet
{
OnlineID = 1,
Title = "many difficulties beatmap",
Artist = "test",
Author = new User
{
Username = "BanchoBot",
Id = 3,
},
HasVideo = true,
HasStoryboard = true,
Covers = new BeatmapSetOnlineCovers(),
Beatmaps = beatmaps.ToArray(),
2021-10-17 15:00:54 +00:00
};
}
#endregion
2021-10-17 16:24:17 +00:00
private Drawable createContent(OverlayColourScheme colourScheme, Func<APIBeatmapSet, Drawable> creationFunc)
2021-10-17 15:00:54 +00:00
{
var colourProvider = new OverlayColourProvider(colourScheme);
return new DependencyProvidingContainer
{
RelativeSizeAxes = Axes.Both,
CachedDependencies = new (Type, object)[]
{
(typeof(OverlayColourProvider), colourProvider)
},
Children = new Drawable[]
{
new Box
{
RelativeSizeAxes = Axes.Both,
Colour = colourProvider.Background5
},
new BasicScrollContainer
{
RelativeSizeAxes = Axes.Both,
Child = new FillFlowContainer
{
RelativeSizeAxes = Axes.X,
AutoSizeAxes = Axes.Y,
Direction = FillDirection.Full,
Padding = new MarginPadding(10),
Spacing = new Vector2(10),
ChildrenEnumerable = testCases.Select(creationFunc)
}
}
}
};
}
2021-10-17 16:24:17 +00:00
private void createTestCase(Func<APIBeatmapSet, Drawable> creationFunc)
2021-10-17 15:00:54 +00:00
{
foreach (var scheme in Enum.GetValues(typeof(OverlayColourScheme)).Cast<OverlayColourScheme>())
AddStep($"set {scheme} scheme", () => Child = createContent(scheme, creationFunc));
}
2021-10-17 16:24:17 +00:00
[Test]
public void TestNormal() => createTestCase(beatmapSetInfo => new BeatmapCard(beatmapSetInfo));
2021-10-17 15:00:54 +00:00
}
}