diff --git a/osu.Game.Tests/Visual/UserInterface/TestSceneModIcon.cs b/osu.Game.Tests/Visual/UserInterface/TestSceneModIcon.cs index c8283d0956..c18f00677d 100644 --- a/osu.Game.Tests/Visual/UserInterface/TestSceneModIcon.cs +++ b/osu.Game.Tests/Visual/UserInterface/TestSceneModIcon.cs @@ -6,6 +6,7 @@ using System.Linq; using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; using osu.Framework.Testing; using osu.Framework.Utils; using osu.Game.Rulesets.Mods; @@ -16,7 +17,7 @@ using osu.Game.Screens.Play.HUD; namespace osu.Game.Tests.Visual.UserInterface { - public partial class TestSceneModIcon : OsuTestScene + public partial class TestSceneModIcon : OsuManualInputManagerTestScene { private FillFlowContainer spreadOutFlow = null!; private ModDisplay modDisplay = null!; @@ -181,5 +182,40 @@ namespace osu.Game.Tests.Visual.UserInterface ]); }); } + + [Test] + public void TestTooltip() + { + OsuModDoubleTime mod = null!; + + AddStep("create icon", () => addRange([mod = new OsuModDoubleTime()])); + AddStep("hover", () => InputManager.MoveMouseTo(this.ChildrenOfType().First())); + AddUntilStep("tooltip displayed", () => getTooltip()?.IsPresent, () => Is.True); + AddAssert("tooltip text = \"Double Time\"", getTooltipText, () => Is.EqualTo("Double Time")); + AddAssert("tooltip settings empty", () => getTooltipSettingsLabels().Concat(getTooltipSettingsValues()), () => Is.Empty); + + AddStep("change settings", () => mod.SpeedChange.Value = 1.75f); + AddAssert("tooltip text = \"Double Time\"", getTooltipText, () => Is.EqualTo("Double Time")); + AddAssert("tooltip settings updated", + () => getTooltipSettingsLabels().Concat(getTooltipSettingsValues()), + () => Is.EquivalentTo(new[] { "Speed ", "change", "1.75x" })); + + AddStep("change settings", () => mod.SpeedChange.Value = 1.25f); + AddAssert("tooltip text = \"Double Time\"", getTooltipText, () => Is.EqualTo("Double Time")); + AddAssert("tooltip settings updated", + () => getTooltipSettingsLabels().Concat(getTooltipSettingsValues()), + () => Is.EquivalentTo(new[] { "Speed ", "change", "1.25x" })); + + AddStep("rest settings", () => mod.SpeedChange.SetDefault()); + AddAssert("tooltip text = \"Double Time\"", getTooltipText, () => Is.EqualTo("Double Time")); + AddAssert("tooltip settings empty", () => getTooltipSettingsLabels().Concat(getTooltipSettingsValues()), () => Is.Empty); + + ModTooltip? getTooltip() => this.ChildrenOfType().SingleOrDefault(); + + // we could also just expose those directly from ModTooltip, but this works. + string getTooltipText() => getTooltip().ChildrenOfType().First().Text.ToString(); + IEnumerable getTooltipSettingsLabels() => getTooltip().ChildrenOfType().First().ChildrenOfType().Select(t => t.Text.ToString()); + IEnumerable getTooltipSettingsValues() => getTooltip().ChildrenOfType().Last().ChildrenOfType().Select(t => t.Text.ToString()); + } } }