From 2927b235dec25bc6c27cac9786e1d0736ccea593 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 3 Dec 2021 17:18:02 +0900 Subject: [PATCH] Add test coverage of mouse wheel scroll adjusting volume --- .../TestSceneMouseWheelVolumeAdjust.cs | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 osu.Game.Tests/Visual/Navigation/TestSceneMouseWheelVolumeAdjust.cs diff --git a/osu.Game.Tests/Visual/Navigation/TestSceneMouseWheelVolumeAdjust.cs b/osu.Game.Tests/Visual/Navigation/TestSceneMouseWheelVolumeAdjust.cs new file mode 100644 index 0000000000..9e684e4f10 --- /dev/null +++ b/osu.Game.Tests/Visual/Navigation/TestSceneMouseWheelVolumeAdjust.cs @@ -0,0 +1,99 @@ +// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. +// See the LICENCE file in the repository root for full licence text. + +using NUnit.Framework; +using osu.Game.Configuration; +using osu.Game.Screens.Play; +using osu.Game.Tests.Beatmaps.IO; +using osuTK.Input; + +namespace osu.Game.Tests.Visual.Navigation +{ + public class TestSceneMouseWheelVolumeAdjust : OsuGameTestScene + { + public override void SetUpSteps() + { + base.SetUpSteps(); + + // Headless tests are always at minimum volume. This covers interactive tests, matching that initial value. + AddStep("Set volume to min", () => Game.Audio.Volume.Value = 0); + AddAssert("Volume is min", () => Game.Audio.AggregateVolume.Value == 0); + AddStep("Move mouse to centre", () => InputManager.MoveMouseTo(Game.ScreenSpaceDrawQuad.Centre)); + } + + [Test] + public void TestAdjustVolumeFromMainMenu() + { + // First scroll makes volume controls appear, second adjusts volume. + AddRepeatStep("Adjust volume using mouse wheel", () => InputManager.ScrollVerticalBy(5), 2); + AddUntilStep("Volume is above zero", () => Game.Audio.AggregateVolume.Value > 0); + } + + [Test] + public void TestAdjustVolumeFromPlayerWheelEnabled() + { + loadToPlayerNonBreakTime(); + + // First scroll makes volume controls appear, second adjusts volume. + AddRepeatStep("Adjust volume using mouse wheel", () => InputManager.ScrollVerticalBy(5), 2); + AddAssert("Volume is above zero", () => Game.Audio.Volume.Value > 0); + } + + [Test] + public void TestAdjustVolumeFromPlayerWheelDisabled() + { + AddStep("disable wheel volume adjust", () => Game.LocalConfig.SetValue(OsuSetting.MouseDisableWheel, true)); + + loadToPlayerNonBreakTime(); + + // First scroll makes volume controls appear, second adjusts volume. + AddRepeatStep("Adjust volume using mouse wheel", () => InputManager.ScrollVerticalBy(5), 2); + AddAssert("Volume is still zero", () => Game.Audio.Volume.Value == 0); + } + + [Test] + public void TestAdjustVolumeFromPlayerWheelDisabledHoldingAlt() + { + AddStep("disable wheel volume adjust", () => Game.LocalConfig.SetValue(OsuSetting.MouseDisableWheel, true)); + + loadToPlayerNonBreakTime(); + + // First scroll makes volume controls appear, second adjusts volume. + AddRepeatStep("Adjust volume using mouse wheel holding alt", () => + { + InputManager.PressKey(Key.AltLeft); + InputManager.ScrollVerticalBy(5); + InputManager.ReleaseKey(Key.AltLeft); + }, 2); + + AddAssert("Volume is above zero", () => Game.Audio.Volume.Value > 0); + } + + private void loadToPlayerNonBreakTime() + { + Player player = null; + Screens.Select.SongSelect songSelect = null; + PushAndConfirm(() => songSelect = new TestSceneScreenNavigation.TestPlaySongSelect()); + AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); + + AddStep("import beatmap", () => ImportBeatmapTest.LoadOszIntoOsu(Game, virtualTrack: true).Wait()); + AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); + AddStep("press enter", () => InputManager.Key(Key.Enter)); + + AddUntilStep("wait for player", () => + { + // dismiss any notifications that may appear (ie. muted notification). + clickMouseInCentre(); + return (player = Game.ScreenStack.CurrentScreen as Player) != null; + }); + + AddUntilStep("wait for play time active", () => !player.IsBreakTime.Value); + } + + private void clickMouseInCentre() + { + InputManager.MoveMouseTo(Game.ScreenSpaceDrawQuad.Centre); + InputManager.Click(MouseButton.Left); + } + } +}