mirror of
https://github.com/ppy/osu.git
synced 2024-12-15 08:22:56 +08:00
Add test coverage ensuring password popover keeps focus
This commit is contained in:
parent
8944b1dd78
commit
32cbf6e54b
@ -2,6 +2,7 @@
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Moq;
|
||||
@ -10,13 +11,15 @@ using osu.Framework.Allocation;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Cursor;
|
||||
using osu.Framework.Testing;
|
||||
using osu.Game.Graphics.UserInterface;
|
||||
using osu.Game.Online.Rooms;
|
||||
using osu.Game.Overlays;
|
||||
using osu.Game.Screens.OnlinePlay.Lounge;
|
||||
using osuTK.Input;
|
||||
|
||||
namespace osu.Game.Tests.Visual.Multiplayer
|
||||
{
|
||||
public class TestSceneDrawableLoungeRoom : OsuTestScene
|
||||
public class TestSceneDrawableLoungeRoom : OsuManualInputManagerTestScene
|
||||
{
|
||||
private readonly Room room = new Room
|
||||
{
|
||||
@ -26,6 +29,11 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
||||
[Cached]
|
||||
protected readonly OverlayColourProvider ColourProvider = new OverlayColourProvider(OverlayColourScheme.Pink);
|
||||
|
||||
private DrawableLoungeRoom drawableRoom;
|
||||
private SearchTextBox searchTextBox;
|
||||
|
||||
private readonly ManualResetEventSlim allowResponseCallback = new ManualResetEventSlim();
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
private void load()
|
||||
{
|
||||
@ -36,7 +44,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
allowResponseCallback.Wait();
|
||||
allowResponseCallback.Reset();
|
||||
Schedule(() => d?.Invoke("Incorrect password"));
|
||||
});
|
||||
});
|
||||
@ -54,7 +63,16 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
||||
RelativeSizeAxes = Axes.Both,
|
||||
Children = new Drawable[]
|
||||
{
|
||||
new DrawableLoungeRoom(room)
|
||||
searchTextBox = new SearchTextBox()
|
||||
{
|
||||
HoldFocus = true,
|
||||
Anchor = Anchor.TopCentre,
|
||||
Origin = Anchor.TopCentre,
|
||||
Margin = new MarginPadding(50),
|
||||
Width = 500,
|
||||
Depth = float.MaxValue
|
||||
},
|
||||
drawableRoom = new DrawableLoungeRoom(room)
|
||||
{
|
||||
Anchor = Anchor.Centre,
|
||||
Origin = Anchor.Centre,
|
||||
@ -65,8 +83,85 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestFocus()
|
||||
public void TestFocusViaKeyboardCommit()
|
||||
{
|
||||
DrawableLoungeRoom.PasswordEntryPopover popover = null;
|
||||
|
||||
AddAssert("search textbox has focus", () => checkFocus(searchTextBox));
|
||||
AddStep("click room twice", () =>
|
||||
{
|
||||
InputManager.MoveMouseTo(drawableRoom);
|
||||
InputManager.Click(MouseButton.Left);
|
||||
InputManager.Click(MouseButton.Left);
|
||||
});
|
||||
AddUntilStep("wait for popover", () => (popover = InputManager.ChildrenOfType<DrawableLoungeRoom.PasswordEntryPopover>().SingleOrDefault()) != null);
|
||||
|
||||
AddAssert("textbox has focus", () => checkFocus(popover.ChildrenOfType<OsuPasswordTextBox>().Single()));
|
||||
|
||||
AddStep("enter password", () => popover.ChildrenOfType<OsuPasswordTextBox>().Single().Text = "password");
|
||||
AddStep("commit via enter", () => InputManager.Key(Key.Enter));
|
||||
|
||||
AddAssert("popover has focus", () => checkFocus(popover));
|
||||
|
||||
AddStep("attempt another enter", () => InputManager.Key(Key.Enter));
|
||||
|
||||
AddAssert("popover still has focus", () => checkFocus(popover));
|
||||
|
||||
AddStep("unblock response", () => allowResponseCallback.Set());
|
||||
|
||||
AddUntilStep("wait for textbox refocus", () => checkFocus(popover.ChildrenOfType<OsuPasswordTextBox>().Single()));
|
||||
|
||||
AddStep("press escape", () => InputManager.Key(Key.Escape));
|
||||
AddStep("press escape", () => InputManager.Key(Key.Escape));
|
||||
|
||||
AddUntilStep("search textbox has focus", () => checkFocus(searchTextBox));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestFocusViaMouseCommit()
|
||||
{
|
||||
DrawableLoungeRoom.PasswordEntryPopover popover = null;
|
||||
|
||||
AddAssert("search textbox has focus", () => checkFocus(searchTextBox));
|
||||
AddStep("click room twice", () =>
|
||||
{
|
||||
InputManager.MoveMouseTo(drawableRoom);
|
||||
InputManager.Click(MouseButton.Left);
|
||||
InputManager.Click(MouseButton.Left);
|
||||
});
|
||||
AddUntilStep("wait for popover", () => (popover = InputManager.ChildrenOfType<DrawableLoungeRoom.PasswordEntryPopover>().SingleOrDefault()) != null);
|
||||
|
||||
AddAssert("textbox has focus", () => checkFocus(popover.ChildrenOfType<OsuPasswordTextBox>().Single()));
|
||||
|
||||
AddStep("enter password", () => popover.ChildrenOfType<OsuPasswordTextBox>().Single().Text = "password");
|
||||
|
||||
AddStep("commit via click button", () =>
|
||||
{
|
||||
var button = popover.ChildrenOfType<OsuButton>().Single();
|
||||
InputManager.MoveMouseTo(button);
|
||||
InputManager.Click(MouseButton.Left);
|
||||
});
|
||||
|
||||
AddAssert("popover has focus", () => checkFocus(popover));
|
||||
|
||||
AddStep("attempt another click", () => InputManager.Click(MouseButton.Left));
|
||||
|
||||
AddAssert("popover still has focus", () => checkFocus(popover));
|
||||
|
||||
AddStep("unblock response", () => allowResponseCallback.Set());
|
||||
|
||||
AddUntilStep("wait for textbox refocus", () => checkFocus(popover.ChildrenOfType<OsuPasswordTextBox>().Single()));
|
||||
|
||||
AddStep("click away", () =>
|
||||
{
|
||||
InputManager.MoveMouseTo(searchTextBox);
|
||||
InputManager.Click(MouseButton.Left);
|
||||
});
|
||||
|
||||
AddUntilStep("search textbox has focus", () => checkFocus(searchTextBox));
|
||||
}
|
||||
|
||||
private bool checkFocus(Drawable expected) =>
|
||||
InputManager.FocusedDrawable == expected;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user