Improve robustness of test code

This commit is contained in:
Bartłomiej Dach
2022-04-03 20:24:32 +02:00
parent a172b194f0
commit 90e44b67ea

View File

@ -3,18 +3,16 @@
using System.Linq; using System.Linq;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Framework.Utils; using osu.Framework.Utils;
using osu.Game.Graphics.UserInterface; using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays.Mods; using osu.Game.Overlays.Mods;
using osu.Game.Rulesets.Catch; using osu.Game.Rulesets;
using osu.Game.Rulesets.Mania;
using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Osu.Mods; using osu.Game.Rulesets.Osu.Mods;
using osu.Game.Rulesets.Taiko;
using osuTK.Input; using osuTK.Input;
namespace osu.Game.Tests.Visual.UserInterface namespace osu.Game.Tests.Visual.UserInterface
@ -22,20 +20,29 @@ namespace osu.Game.Tests.Visual.UserInterface
[TestFixture] [TestFixture]
public class TestSceneModSelectScreen : OsuManualInputManagerTestScene public class TestSceneModSelectScreen : OsuManualInputManagerTestScene
{ {
[Resolved]
private RulesetStore rulesetStore { get; set; }
private ModSelectScreen modSelectScreen; private ModSelectScreen modSelectScreen;
[SetUpSteps] [SetUpSteps]
public void SetUpSteps() public void SetUpSteps()
{ {
AddStep("clear contents", Clear);
AddStep("reset ruleset", () => Ruleset.Value = rulesetStore.GetRuleset(0));
AddStep("reset mods", () => SelectedMods.SetDefault()); AddStep("reset mods", () => SelectedMods.SetDefault());
} }
private void createScreen() => AddStep("create screen", () => Child = modSelectScreen = new ModSelectScreen private void createScreen()
{
AddStep("create screen", () => Child = modSelectScreen = new ModSelectScreen
{ {
RelativeSizeAxes = Axes.Both, RelativeSizeAxes = Axes.Both,
State = { Value = Visibility.Visible }, State = { Value = Visibility.Visible },
SelectedMods = { BindTarget = SelectedMods } SelectedMods = { BindTarget = SelectedMods }
}); });
waitForColumnLoad();
}
[Test] [Test]
public void TestStateChange() public void TestStateChange()
@ -76,10 +83,10 @@ namespace osu.Game.Tests.Visual.UserInterface
public void TestRulesetChange() public void TestRulesetChange()
{ {
createScreen(); createScreen();
AddStep("change to osu!", () => Ruleset.Value = new OsuRuleset().RulesetInfo); changeRuleset(0);
AddStep("change to osu!taiko", () => Ruleset.Value = new TaikoRuleset().RulesetInfo); changeRuleset(1);
AddStep("change to osu!catch", () => Ruleset.Value = new CatchRuleset().RulesetInfo); changeRuleset(2);
AddStep("change to osu!mania", () => Ruleset.Value = new ManiaRuleset().RulesetInfo); changeRuleset(3);
} }
[Test] [Test]
@ -113,6 +120,15 @@ namespace osu.Game.Tests.Visual.UserInterface
assertCustomisationToggleState(disabled: true, active: false); // config was dismissed without explicit user action. assertCustomisationToggleState(disabled: true, active: false); // config was dismissed without explicit user action.
} }
private void waitForColumnLoad() => AddUntilStep("all column content loaded",
() => modSelectScreen.ChildrenOfType<ModColumn>().Any() && modSelectScreen.ChildrenOfType<ModColumn>().All(column => column.IsLoaded && column.ItemsLoaded));
private void changeRuleset(int id)
{
AddStep($"set ruleset to {id}", () => Ruleset.Value = rulesetStore.GetRuleset(id));
waitForColumnLoad();
}
private void assertCustomisationToggleState(bool disabled, bool active) private void assertCustomisationToggleState(bool disabled, bool active)
{ {
ShearedToggleButton getToggle() => modSelectScreen.ChildrenOfType<ShearedToggleButton>().Single(); ShearedToggleButton getToggle() => modSelectScreen.ChildrenOfType<ShearedToggleButton>().Single();