mirror of
https://github.com/ppy/osu.git
synced 2025-03-24 19:17:20 +08:00
Add test and null protections
This commit is contained in:
parent
92e07b4f99
commit
f7364de01a
@ -13,9 +13,12 @@ using osu.Framework.Testing;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Database;
|
||||
using osu.Game.Extensions;
|
||||
using osu.Game.Graphics.Sprites;
|
||||
using osu.Game.Online.API;
|
||||
using osu.Game.Online.API.Requests;
|
||||
using osu.Game.Online.API.Requests.Responses;
|
||||
using osu.Game.Overlays;
|
||||
using osu.Game.Overlays.BeatmapListing;
|
||||
using osu.Game.Rulesets;
|
||||
using osu.Game.Rulesets.Catch;
|
||||
using osu.Game.Rulesets.Mania;
|
||||
@ -23,6 +26,8 @@ using osu.Game.Rulesets.Osu;
|
||||
using osu.Game.Rulesets.Taiko;
|
||||
using osu.Game.Tests.Resources;
|
||||
using osu.Game.Users;
|
||||
using osu.Game.Utils;
|
||||
using osuTK.Input;
|
||||
|
||||
namespace osu.Game.Tests.Visual.SongSelect
|
||||
{
|
||||
@ -170,6 +175,45 @@ namespace osu.Game.Tests.Visual.SongSelect
|
||||
presentAndConfirm(() => maniaSet, 5);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestBeatmapListingFilter()
|
||||
{
|
||||
AddStep("set playmode to taiko", () => ((DummyAPIAccess)API).LocalUser.Value.PlayMode = "taiko");
|
||||
|
||||
AddStep("open beatmap listing", () =>
|
||||
{
|
||||
InputManager.PressKey(Key.ControlLeft);
|
||||
InputManager.PressKey(Key.B);
|
||||
InputManager.ReleaseKey(Key.B);
|
||||
InputManager.ReleaseKey(Key.ControlLeft);
|
||||
});
|
||||
|
||||
AddUntilStep("wait for load", () => Game.ChildrenOfType<BeatmapListingOverlay>().SingleOrDefault()?.IsLoaded, () => Is.True);
|
||||
|
||||
checkRecommendedDifficulty(3);
|
||||
|
||||
AddStep("change mode filter to osu!", () => Game.ChildrenOfType<BeatmapSearchRulesetFilterRow>().Single().ChildrenOfType<FilterTabItem<RulesetInfo>>().ElementAt(1).TriggerClick());
|
||||
|
||||
checkRecommendedDifficulty(2);
|
||||
|
||||
AddStep("change mode filter to osu!taiko", () => Game.ChildrenOfType<BeatmapSearchRulesetFilterRow>().Single().ChildrenOfType<FilterTabItem<RulesetInfo>>().ElementAt(2).TriggerClick());
|
||||
|
||||
checkRecommendedDifficulty(3);
|
||||
|
||||
AddStep("change mode filter to osu!catch", () => Game.ChildrenOfType<BeatmapSearchRulesetFilterRow>().Single().ChildrenOfType<FilterTabItem<RulesetInfo>>().ElementAt(3).TriggerClick());
|
||||
|
||||
checkRecommendedDifficulty(4);
|
||||
|
||||
AddStep("change mode filter to osu!mania", () => Game.ChildrenOfType<BeatmapSearchRulesetFilterRow>().Single().ChildrenOfType<FilterTabItem<RulesetInfo>>().ElementAt(4).TriggerClick());
|
||||
|
||||
checkRecommendedDifficulty(5);
|
||||
|
||||
void checkRecommendedDifficulty(double starRating)
|
||||
=> AddAssert($"recommended difficulty is {starRating}",
|
||||
() => Game.ChildrenOfType<BeatmapSearchGeneralFilterRow>().Single().ChildrenOfType<OsuSpriteText>().ElementAt(1).Text.ToString(),
|
||||
() => Is.EqualTo($"Recommended difficulty ({starRating.FormatStarRating()})"));
|
||||
}
|
||||
|
||||
private BeatmapSetInfo importBeatmapSet(IEnumerable<RulesetInfo> difficultyRulesets)
|
||||
{
|
||||
var rulesets = difficultyRulesets.ToArray();
|
||||
|
@ -83,7 +83,8 @@ namespace osu.Game.Beatmaps
|
||||
StarRatingUpdated?.Invoke();
|
||||
}
|
||||
|
||||
public double GetRecommendedStarRatingFor(RulesetInfo ruleset) => recommendedDifficultyMapping[ruleset.ShortName];
|
||||
public double? GetRecommendedStarRatingFor(RulesetInfo ruleset)
|
||||
=> recommendedDifficultyMapping.TryGetValue(ruleset.ShortName, out double starRating) ? starRating : null;
|
||||
|
||||
/// <summary>
|
||||
/// Find the recommended difficulty from a selection of available difficulties for the current local user.
|
||||
|
@ -91,8 +91,16 @@ namespace osu.Game.Overlays.BeatmapListing
|
||||
{
|
||||
// fallback to profile default game mode if beatmap listing mode filter is set to Any
|
||||
// TODO: find a way to update `PlayMode` when the profile default game mode has changed
|
||||
var ruleset = Ruleset.Value.IsLegacyRuleset() ? Ruleset.Value : rulesets.GetRuleset(api.LocalUser.Value.PlayMode)!;
|
||||
Text.Text = LocalisableString.Interpolate($"{Value.GetLocalisableDescription()} ({recommender?.GetRecommendedStarRatingFor(ruleset).FormatStarRating()})");
|
||||
RulesetInfo? ruleset = Ruleset.Value.IsLegacyRuleset() ? Ruleset.Value : rulesets.GetRuleset(api.LocalUser.Value.PlayMode);
|
||||
|
||||
if (ruleset == null) return;
|
||||
|
||||
double? starRating = recommender?.GetRecommendedStarRatingFor(ruleset);
|
||||
|
||||
if (starRating != null)
|
||||
Text.Text = LocalisableString.Interpolate($"{Value.GetLocalisableDescription()} ({starRating.Value.FormatStarRating()})");
|
||||
else
|
||||
Text.Text = Value.GetLocalisableDescription();
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user