mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 13:22:55 +08:00
Add failure test case.
- Only show failure if request wasn't cancelled
This commit is contained in:
parent
ac1fb5118c
commit
e832f163e7
@ -9,6 +9,7 @@ using osu.Game.Users;
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
|
|
||||||
@ -19,11 +20,11 @@ namespace osu.Game.Tests.Visual
|
|||||||
{
|
{
|
||||||
private RulesetStore rulesets;
|
private RulesetStore rulesets;
|
||||||
|
|
||||||
private readonly Leaderboard leaderboard;
|
private readonly FailableLeaderboard leaderboard;
|
||||||
|
|
||||||
public TestCaseLeaderboard()
|
public TestCaseLeaderboard()
|
||||||
{
|
{
|
||||||
Add(leaderboard = new Leaderboard
|
Add(leaderboard = new FailableLeaderboard
|
||||||
{
|
{
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
@ -33,8 +34,8 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
AddStep(@"New Scores", newScores);
|
AddStep(@"New Scores", newScores);
|
||||||
AddStep(@"Empty Scores", () => leaderboard.Scores = Enumerable.Empty<Score>());
|
AddStep(@"Empty Scores", () => leaderboard.Scores = Enumerable.Empty<Score>());
|
||||||
|
AddStep(@"Network failure", networkFailure);
|
||||||
AddStep(@"Real beatmap", realBeatmap);
|
AddStep(@"Real beatmap", realBeatmap);
|
||||||
newScores();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -263,5 +264,21 @@ namespace osu.Game.Tests.Visual
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void networkFailure()
|
||||||
|
{
|
||||||
|
leaderboard.Beatmap = new BeatmapInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
private class FailableLeaderboard : Leaderboard
|
||||||
|
{
|
||||||
|
protected override void UpdateScores()
|
||||||
|
{
|
||||||
|
if (Beatmap?.OnlineBeatmapID == null)
|
||||||
|
OnUpdateFailed(new WebException());
|
||||||
|
else
|
||||||
|
base.UpdateScores();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ using System.Linq;
|
|||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Framework.Logging;
|
using osu.Framework.Logging;
|
||||||
using System.Net;
|
|
||||||
using osu.Game.Rulesets;
|
using osu.Game.Rulesets;
|
||||||
using osu.Framework.Input;
|
using osu.Framework.Input;
|
||||||
using osu.Game.Beatmaps.ControlPoints;
|
using osu.Game.Beatmaps.ControlPoints;
|
||||||
@ -51,7 +50,6 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
scores = value;
|
scores = value;
|
||||||
getScoresRequest = null;
|
|
||||||
|
|
||||||
placeholderContainer.FadeOut(fade_duration);
|
placeholderContainer.FadeOut(fade_duration);
|
||||||
scrollFlow?.FadeOut(fade_duration).Expire();
|
scrollFlow?.FadeOut(fade_duration).Expire();
|
||||||
@ -120,7 +118,7 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
if (value == scope) return;
|
if (value == scope) return;
|
||||||
|
|
||||||
scope = value;
|
scope = value;
|
||||||
updateScores();
|
UpdateScores();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +169,7 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
Scores = null;
|
Scores = null;
|
||||||
|
|
||||||
pendingBeatmapSwitch?.Cancel();
|
pendingBeatmapSwitch?.Cancel();
|
||||||
pendingBeatmapSwitch = Schedule(updateScores);
|
pendingBeatmapSwitch = Schedule(UpdateScores);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,13 +193,14 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
|
|
||||||
private GetScoresRequest getScoresRequest;
|
private GetScoresRequest getScoresRequest;
|
||||||
|
|
||||||
private void handleRulesetChange(RulesetInfo ruleset) => updateScores();
|
private void handleRulesetChange(RulesetInfo ruleset) => UpdateScores();
|
||||||
|
|
||||||
private void updateScores()
|
protected virtual void UpdateScores()
|
||||||
{
|
{
|
||||||
if (!IsLoaded) return;
|
if (!IsLoaded) return;
|
||||||
|
|
||||||
getScoresRequest?.Cancel();
|
getScoresRequest?.Cancel();
|
||||||
|
getScoresRequest = null;
|
||||||
|
|
||||||
Scores = null;
|
Scores = null;
|
||||||
|
|
||||||
@ -221,34 +220,34 @@ namespace osu.Game.Screens.Select.Leaderboards
|
|||||||
{
|
{
|
||||||
Scores = r.Scores;
|
Scores = r.Scores;
|
||||||
};
|
};
|
||||||
getScoresRequest.Failure += e =>
|
getScoresRequest.Failure += OnUpdateFailed;
|
||||||
{
|
|
||||||
// TODO: check why failure is repeatedly invoked even on successful requests
|
|
||||||
if (e is WebException)
|
|
||||||
{
|
|
||||||
Scores = null;
|
|
||||||
placeholderFlow.Children = new Drawable[]
|
|
||||||
{
|
|
||||||
new RetryButton
|
|
||||||
{
|
|
||||||
Action = updateScores,
|
|
||||||
Margin = new MarginPadding { Right = 10 },
|
|
||||||
},
|
|
||||||
new OsuSpriteText
|
|
||||||
{
|
|
||||||
Anchor = Anchor.TopLeft,
|
|
||||||
Text = @"Couldn't retrieve scores!",
|
|
||||||
TextSize = 22,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
placeholderContainer.FadeIn(fade_duration);
|
|
||||||
Logger.Error(e, @"Couldn't fetch beatmap scores!");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
api.Queue(getScoresRequest);
|
api.Queue(getScoresRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void OnUpdateFailed(Exception e)
|
||||||
|
{
|
||||||
|
if (e is OperationCanceledException) return;
|
||||||
|
|
||||||
|
Scores = null;
|
||||||
|
placeholderFlow.Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new RetryButton
|
||||||
|
{
|
||||||
|
Action = UpdateScores,
|
||||||
|
Margin = new MarginPadding { Right = 10 },
|
||||||
|
},
|
||||||
|
new OsuSpriteText
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopLeft,
|
||||||
|
Text = @"Couldn't retrieve scores!",
|
||||||
|
TextSize = 22,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
placeholderContainer.FadeIn(fade_duration);
|
||||||
|
Logger.Error(e, @"Couldn't fetch beatmap scores!");
|
||||||
|
}
|
||||||
|
|
||||||
protected override void Update()
|
protected override void Update()
|
||||||
{
|
{
|
||||||
base.Update();
|
base.Update();
|
||||||
|
Loading…
Reference in New Issue
Block a user