1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 11:27:24 +08:00
osu-lazer/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs

343 lines
13 KiB
C#
Raw Normal View History

2019-06-27 10:40:22 +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-13 17:19:50 +08:00
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Game.Beatmaps;
using osu.Game.Overlays;
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]
public class TestSceneBeatmapSetOverlay : OsuTestScene
2018-04-13 17:19:50 +08:00
{
private readonly TestBeatmapSetOverlay overlay;
2018-04-13 17:19:50 +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;
public TestSceneBeatmapSetOverlay()
2018-04-13 17:19:50 +08:00
{
Add(overlay = new TestBeatmapSetOverlay());
2018-04-13 17:19:50 +08:00
}
[Resolved]
private RulesetStore rulesets { get; set; }
2018-04-13 17:19:50 +08:00
[Test]
public void TestLoading()
{
AddStep(@"show loading", () => overlay.ShowBeatmapSet(null));
}
[Test]
public void TestOnline()
{
AddStep(@"show online", () => overlay.FetchAndShowBeatmapSet(55));
}
[Test]
public void TestLocalBeatmaps()
{
2018-04-13 17:19:50 +08:00
AddStep(@"show first", () =>
{
overlay.ShowBeatmapSet(new BeatmapSetInfo
{
OnlineBeatmapSetID = 1235,
2018-04-13 17:19:50 +08:00
Metadata = new BeatmapMetadata
{
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
{
Username = @"BanchoBot",
Id = 3,
2018-04-13 17:19:50 +08:00
},
},
OnlineInfo = new BeatmapSetOnlineInfo
{
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,
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,
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
},
},
},
});
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);
AddStep("show many difficulties", () => overlay.ShowBeatmapSet(createManyDifficultiesBeatmapSet()));
downloadAssert(true);
}
2019-06-19 08:37:08 +08:00
[Test]
2019-06-27 12:48:57 +08:00
public void TestAvailability()
{
AddStep(@"show undownloadable", () =>
2018-04-13 17:19:50 +08:00
{
overlay.ShowBeatmapSet(new BeatmapSetInfo
{
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
{
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,
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,
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
},
},
},
});
2018-04-13 17:19:50 +08:00
});
2019-06-26 10:17:28 +08:00
downloadAssert(false);
}
[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-10-02 23:55:29 +08:00
AddAssert("shown beatmaps of current ruleset", () => overlay.Header.HeaderContent.Picker.Difficulties.All(b => b.BeatmapInfo.Ruleset.Equals(overlay.Header.RulesetSelector.Current.Value)));
AddAssert("left-most beatmap selected", () => overlay.Header.HeaderContent.Picker.Difficulties.First().State == BeatmapPicker.DifficultySelectorState.Selected);
}
[Test]
public void TestExplicitBeatmap()
{
AddStep("show explicit map", () =>
{
var beatmapSet = getBeatmapSet();
beatmapSet.OnlineInfo.HasExplicitContent = true;
overlay.ShowBeatmapSet(beatmapSet);
});
}
[Test]
public void TestFeaturedBeatmap()
{
AddStep("show featured map", () =>
{
var beatmapSet = getBeatmapSet();
beatmapSet.OnlineInfo.TrackId = 1;
overlay.ShowBeatmapSet(beatmapSet);
});
}
[Test]
public void TestHide()
{
2018-04-13 17:19:50 +08:00
AddStep(@"hide", overlay.Hide);
}
[Test]
public void TestShowWithNoReload()
{
2018-04-13 17:19:50 +08:00
AddStep(@"show without reload", overlay.Show);
}
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,
};
}
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++;
return beatmapSet;
}
private void downloadAssert(bool shown)
{
AddAssert($"is download button {(shown ? "shown" : "hidden")}", () => overlay.Header.HeaderContent.DownloadButtonsVisible == shown);
}
private class TestBeatmapSetOverlay : BeatmapSetOverlay
{
public new BeatmapSetHeader Header => base.Header;
}
2018-04-13 17:19:50 +08:00
}
}