mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 14:32:55 +08:00
Add automated testing of mod preservation/removal
This commit is contained in:
parent
7b8bd7f21c
commit
4cb7063801
@ -2,7 +2,6 @@
|
|||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.ComponentModel;
|
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Game.Overlays.Mods;
|
using osu.Game.Overlays.Mods;
|
||||||
@ -13,12 +12,11 @@ using osu.Game.Rulesets.Mods;
|
|||||||
using osu.Game.Rulesets.Osu.Mods;
|
using osu.Game.Rulesets.Osu.Mods;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using NUnit.Framework;
|
||||||
using osu.Framework.Configuration;
|
using osu.Framework.Configuration;
|
||||||
using osu.Game.Rulesets.Osu;
|
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Overlays.Mods.Sections;
|
using osu.Game.Overlays.Mods.Sections;
|
||||||
using osu.Game.Rulesets.Mania;
|
|
||||||
using osu.Game.Rulesets.Mania.Mods;
|
using osu.Game.Rulesets.Mania.Mods;
|
||||||
using osu.Game.Rulesets.UI;
|
using osu.Game.Rulesets.UI;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
@ -51,11 +49,6 @@ namespace osu.Game.Tests.Visual
|
|||||||
private void load(RulesetStore rulesets)
|
private void load(RulesetStore rulesets)
|
||||||
{
|
{
|
||||||
this.rulesets = rulesets;
|
this.rulesets = rulesets;
|
||||||
}
|
|
||||||
|
|
||||||
protected override void LoadComplete()
|
|
||||||
{
|
|
||||||
base.LoadComplete();
|
|
||||||
|
|
||||||
Add(modSelect = new TestModSelectOverlay
|
Add(modSelect = new TestModSelectOverlay
|
||||||
{
|
{
|
||||||
@ -72,34 +65,25 @@ namespace osu.Game.Tests.Visual
|
|||||||
Position = new Vector2(0, 25),
|
Position = new Vector2(0, 25),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modDisplay.Current.UnbindBindings();
|
||||||
modDisplay.Current.BindTo(modSelect.SelectedMods);
|
modDisplay.Current.BindTo(modSelect.SelectedMods);
|
||||||
|
|
||||||
AddStep("Toggle", modSelect.ToggleVisibility);
|
|
||||||
AddStep("Hide", modSelect.Hide);
|
|
||||||
AddStep("Show", modSelect.Show);
|
AddStep("Show", modSelect.Show);
|
||||||
|
AddStep("Toggle", modSelect.ToggleVisibility);
|
||||||
foreach (var rulesetInfo in rulesets.AvailableRulesets)
|
AddStep("Toggle", modSelect.ToggleVisibility);
|
||||||
{
|
|
||||||
Ruleset ruleset = rulesetInfo.CreateInstance();
|
|
||||||
AddStep($"switch to {ruleset.Description}", () => Ruleset.Value = rulesetInfo);
|
|
||||||
|
|
||||||
switch (ruleset)
|
|
||||||
{
|
|
||||||
case OsuRuleset or:
|
|
||||||
testOsuMods(or);
|
|
||||||
break;
|
|
||||||
case ManiaRuleset mr:
|
|
||||||
testManiaMods(mr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testOsuMods(OsuRuleset ruleset)
|
[Test]
|
||||||
|
public void TestOsuMods()
|
||||||
{
|
{
|
||||||
var easierMods = ruleset.GetModsFor(ModType.DifficultyReduction);
|
var ruleset = rulesets.AvailableRulesets.First(r => r.ID == 0);
|
||||||
var harderMods = ruleset.GetModsFor(ModType.DifficultyIncrease);
|
AddStep("change ruleset", () => { Ruleset.Value = ruleset; });
|
||||||
var assistMods = ruleset.GetModsFor(ModType.Automation);
|
|
||||||
|
var instance = ruleset.CreateInstance();
|
||||||
|
|
||||||
|
var easierMods = instance.GetModsFor(ModType.DifficultyReduction);
|
||||||
|
var harderMods = instance.GetModsFor(ModType.DifficultyIncrease);
|
||||||
|
var assistMods = instance.GetModsFor(ModType.Automation);
|
||||||
|
|
||||||
var noFailMod = easierMods.FirstOrDefault(m => m is OsuModNoFail);
|
var noFailMod = easierMods.FirstOrDefault(m => m is OsuModNoFail);
|
||||||
var hiddenMod = harderMods.FirstOrDefault(m => m is OsuModHidden);
|
var hiddenMod = harderMods.FirstOrDefault(m => m is OsuModHidden);
|
||||||
@ -121,9 +105,40 @@ namespace osu.Game.Tests.Visual
|
|||||||
testUnimplementedMod(autoPilotMod);
|
testUnimplementedMod(autoPilotMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testManiaMods(ManiaRuleset ruleset)
|
[Test]
|
||||||
|
public void TestManiaMods()
|
||||||
{
|
{
|
||||||
testRankedText(ruleset.GetModsFor(ModType.Conversion).First(m => m is ManiaModRandom));
|
var ruleset = rulesets.AvailableRulesets.First(r => r.ID == 3);
|
||||||
|
AddStep("change ruleset", () => { Ruleset.Value = ruleset; });
|
||||||
|
|
||||||
|
testRankedText(ruleset.CreateInstance().GetModsFor(ModType.Conversion).First(m => m is ManiaModRandom));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestRulesetChanges()
|
||||||
|
{
|
||||||
|
var rulesetOsu = rulesets.AvailableRulesets.First(r => r.ID == 0);
|
||||||
|
var rulesetMania = rulesets.AvailableRulesets.First(r => r.ID == 3);
|
||||||
|
|
||||||
|
AddStep("change ruleset to null", () => { Ruleset.Value = null; });
|
||||||
|
|
||||||
|
var instance = rulesetOsu.CreateInstance();
|
||||||
|
var easierMods = instance.GetModsFor(ModType.DifficultyReduction);
|
||||||
|
var noFailMod = easierMods.FirstOrDefault(m => m is OsuModNoFail);
|
||||||
|
|
||||||
|
AddStep("set mods externally", () => { modDisplay.Current.Value = new[] { noFailMod }; });
|
||||||
|
|
||||||
|
AddStep("change ruleset to osu", () => { Ruleset.Value = rulesetOsu; });
|
||||||
|
|
||||||
|
AddAssert("ensure mods still selected", () => modDisplay.Current.Value.Single(m => m is OsuModNoFail) != null);
|
||||||
|
|
||||||
|
AddStep("change ruleset to mania", () => { Ruleset.Value = rulesetMania; });
|
||||||
|
|
||||||
|
AddAssert("ensure mods not selected", () => !modDisplay.Current.Value.Any(m => m is OsuModNoFail));
|
||||||
|
|
||||||
|
AddStep("change ruleset to osu", () => { Ruleset.Value = rulesetOsu; });
|
||||||
|
|
||||||
|
AddAssert("ensure mods not selected", () => !modDisplay.Current.Value.Any());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testSingleMod(Mod mod)
|
private void testSingleMod(Mod mod)
|
||||||
|
@ -99,7 +99,7 @@ namespace osu.Game
|
|||||||
private readonly List<OverlayContainer> overlays = new List<OverlayContainer>();
|
private readonly List<OverlayContainer> overlays = new List<OverlayContainer>();
|
||||||
|
|
||||||
// todo: move this to SongSelect once Screen has the ability to unsuspend.
|
// todo: move this to SongSelect once Screen has the ability to unsuspend.
|
||||||
private readonly Bindable<IEnumerable<Mod>> selectedMods = new Bindable<IEnumerable<Mod>>(new List<Mod>());
|
private readonly Bindable<IEnumerable<Mod>> selectedMods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
|
||||||
|
|
||||||
public OsuGame(string[] args = null)
|
public OsuGame(string[] args = null)
|
||||||
{
|
{
|
||||||
|
@ -39,11 +39,11 @@ namespace osu.Game.Overlays.Mods
|
|||||||
|
|
||||||
protected readonly FillFlowContainer<ModSection> ModSectionsContainer;
|
protected readonly FillFlowContainer<ModSection> ModSectionsContainer;
|
||||||
|
|
||||||
protected readonly Bindable<IEnumerable<Mod>> SelectedMods = new Bindable<IEnumerable<Mod>>();
|
protected readonly Bindable<IEnumerable<Mod>> SelectedMods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
|
||||||
|
|
||||||
protected readonly IBindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
protected readonly IBindable<RulesetInfo> Ruleset = new Bindable<RulesetInfo>();
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(OsuColour colours, IBindable<RulesetInfo> ruleset, AudioManager audio, Bindable<IEnumerable<Mod>> selectedMods)
|
private void load(OsuColour colours, IBindable<RulesetInfo> ruleset, AudioManager audio, Bindable<IEnumerable<Mod>> selectedMods)
|
||||||
{
|
{
|
||||||
LowMultiplierColour = colours.Red;
|
LowMultiplierColour = colours.Red;
|
||||||
@ -51,7 +51,7 @@ namespace osu.Game.Overlays.Mods
|
|||||||
UnrankedLabel.Colour = colours.Blue;
|
UnrankedLabel.Colour = colours.Blue;
|
||||||
|
|
||||||
Ruleset.BindTo(ruleset);
|
Ruleset.BindTo(ruleset);
|
||||||
SelectedMods.BindTo(selectedMods);
|
if (selectedMods != null) SelectedMods.BindTo(selectedMods);
|
||||||
|
|
||||||
sampleOn = audio.Sample.Get(@"UI/check-on");
|
sampleOn = audio.Sample.Get(@"UI/check-on");
|
||||||
sampleOff = audio.Sample.Get(@"UI/check-off");
|
sampleOff = audio.Sample.Get(@"UI/check-off");
|
||||||
|
@ -50,7 +50,7 @@ namespace osu.Game.Screens.Select
|
|||||||
|
|
||||||
private SampleChannel sampleConfirm;
|
private SampleChannel sampleConfirm;
|
||||||
|
|
||||||
private readonly Bindable<IEnumerable<Mod>> selectedMods = new Bindable<IEnumerable<Mod>>(new List<Mod>());
|
private readonly Bindable<IEnumerable<Mod>> selectedMods = new Bindable<IEnumerable<Mod>>(new Mod[] { });
|
||||||
|
|
||||||
[BackgroundDependencyLoader(true)]
|
[BackgroundDependencyLoader(true)]
|
||||||
private void load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, Bindable<IEnumerable<Mod>> selectedMods)
|
private void load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, Bindable<IEnumerable<Mod>> selectedMods)
|
||||||
|
Loading…
Reference in New Issue
Block a user