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.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Moq;
|
using Moq;
|
||||||
@ -10,13 +11,15 @@ using osu.Framework.Allocation;
|
|||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Cursor;
|
using osu.Framework.Graphics.Cursor;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Online.Rooms;
|
using osu.Game.Online.Rooms;
|
||||||
using osu.Game.Overlays;
|
using osu.Game.Overlays;
|
||||||
using osu.Game.Screens.OnlinePlay.Lounge;
|
using osu.Game.Screens.OnlinePlay.Lounge;
|
||||||
|
using osuTK.Input;
|
||||||
|
|
||||||
namespace osu.Game.Tests.Visual.Multiplayer
|
namespace osu.Game.Tests.Visual.Multiplayer
|
||||||
{
|
{
|
||||||
public class TestSceneDrawableLoungeRoom : OsuTestScene
|
public class TestSceneDrawableLoungeRoom : OsuManualInputManagerTestScene
|
||||||
{
|
{
|
||||||
private readonly Room room = new Room
|
private readonly Room room = new Room
|
||||||
{
|
{
|
||||||
@ -26,6 +29,11 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
[Cached]
|
[Cached]
|
||||||
protected readonly OverlayColourProvider ColourProvider = new OverlayColourProvider(OverlayColourScheme.Pink);
|
protected readonly OverlayColourProvider ColourProvider = new OverlayColourProvider(OverlayColourScheme.Pink);
|
||||||
|
|
||||||
|
private DrawableLoungeRoom drawableRoom;
|
||||||
|
private SearchTextBox searchTextBox;
|
||||||
|
|
||||||
|
private readonly ManualResetEventSlim allowResponseCallback = new ManualResetEventSlim();
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
@ -36,7 +44,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
{
|
{
|
||||||
Task.Run(() =>
|
Task.Run(() =>
|
||||||
{
|
{
|
||||||
Thread.Sleep(500);
|
allowResponseCallback.Wait();
|
||||||
|
allowResponseCallback.Reset();
|
||||||
Schedule(() => d?.Invoke("Incorrect password"));
|
Schedule(() => d?.Invoke("Incorrect password"));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -54,7 +63,16 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Children = new Drawable[]
|
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,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
@ -65,8 +83,85 @@ namespace osu.Game.Tests.Visual.Multiplayer
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[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