From ed97d35ef7a8ff889bec0968e18a01d32446f114 Mon Sep 17 00:00:00 2001 From: DrabWeb Date: Wed, 6 Jun 2018 23:30:17 -0300 Subject: [PATCH] Test steps. --- osu.Game.Tests/Visual/TestCaseRoomSettings.cs | 101 ++++++++++++++++-- .../Match/Settings/RoomSettingsOverlay.cs | 36 ++++--- 2 files changed, 114 insertions(+), 23 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseRoomSettings.cs b/osu.Game.Tests/Visual/TestCaseRoomSettings.cs index edb8f0ff02..5c5b82e104 100644 --- a/osu.Game.Tests/Visual/TestCaseRoomSettings.cs +++ b/osu.Game.Tests/Visual/TestCaseRoomSettings.cs @@ -3,26 +3,115 @@ using NUnit.Framework; using osu.Framework.Graphics; +using osu.Game.Graphics.UserInterface; using osu.Game.Online.Multiplayer; -using osu.Game.Screens.Multi.Screens.Match; +using osu.Game.Screens.Multi.Screens.Match.Settings; +using OpenTK.Input; namespace osu.Game.Tests.Visual { [TestFixture] - public class TestCaseRoomSettings : OsuTestCase + public class TestCaseRoomSettings : ManualInputManagerTestCase { + private readonly Room room; + private readonly TestRoomSettingsOverlay overlay; + public TestCaseRoomSettings() { - Room room = new Room(); + room = new Room + { + Name = { Value = "One Testing Room" }, + Availability = { Value = RoomAvailability.Public }, + Type = { Value = new GameTypeTeamVersus() }, + MaxParticipants = { Value = 10 }, + }; - RoomSettingsOverlay overlay; - Add(overlay = new RoomSettingsOverlay(room) + Add(overlay = new TestRoomSettingsOverlay(room) { RelativeSizeAxes = Axes.Both, Height = 0.75f, }); - AddStep(@"toggle", overlay.ToggleVisibility); + AddStep(@"show", overlay.Show); + assertAll(); + AddStep(@"set name", () => overlay.CurrentName = @"Two Testing Room"); + AddStep(@"set max", () => overlay.CurrentMaxParticipants = null); + AddStep(@"set availability", () => overlay.CurrentAvailability = RoomAvailability.InviteOnly); + AddStep(@"set type", () => overlay.CurrentType = new GameTypeTagTeam()); + apply(); + assertAll(); + AddStep(@"show", overlay.Show); + AddStep(@"set room name", () => room.Name.Value = @"Room Changed Name!"); + AddStep(@"set room availability", () => room.Availability.Value = RoomAvailability.Public); + AddStep(@"set room type", () => room.Type.Value = new GameTypeTag()); + AddStep(@"set room max", () => room.MaxParticipants.Value = 100); + assertAll(); + AddStep(@"set name", () => overlay.CurrentName = @"Unsaved Testing Room"); + AddStep(@"set max", () => overlay.CurrentMaxParticipants = 20); + AddStep(@"set availability", () => overlay.CurrentAvailability = RoomAvailability.FriendsOnly); + AddStep(@"set type", () => overlay.CurrentType = new GameTypeVersus()); + AddStep(@"hide", overlay.Hide); + AddWaitStep(5); + AddStep(@"show", overlay.Show); + assertAll(); + AddStep(@"hide", overlay.Hide); + } + + private void apply() + { + AddStep(@"apply", () => + { + InputManager.MoveMouseTo(overlay.ApplyButton); + InputManager.Click(MouseButton.Left); + }); + } + + private void assertAll() + { + AddAssert(@"name == room name", () => overlay.CurrentName == room.Name.Value); + AddAssert(@"max == room max", () => overlay.CurrentMaxParticipants == room.MaxParticipants.Value); + AddAssert(@"availability == room availability", () => overlay.CurrentAvailability == room.Availability.Value); + AddAssert(@"type == room type", () => Equals(overlay.CurrentType, room.Type.Value)); + } + + private class TestRoomSettingsOverlay : RoomSettingsOverlay + { + public string CurrentName + { + get => Name.Text; + set => Name.Text = value; + } + + public int? CurrentMaxParticipants + { + get + { + int max; + if (int.TryParse(MaxParticipants.Text, out max)) + return max; + + return null; + } + set => MaxParticipants.Text = value?.ToString(); + } + + public RoomAvailability CurrentAvailability + { + get => Availability.Current.Value; + set => Availability.Current.Value = value; + } + + public GameType CurrentType + { + get => Type.Current.Value; + set => Type.Current.Value = value; + } + + public TriangleButton ApplyButton => Apply; + + public TestRoomSettingsOverlay(Room room) : base(room) + { + } } } } diff --git a/osu.Game/Screens/Multi/Screens/Match/Settings/RoomSettingsOverlay.cs b/osu.Game/Screens/Multi/Screens/Match/Settings/RoomSettingsOverlay.cs index 1e46faa1cb..0e1eaa55da 100644 --- a/osu.Game/Screens/Multi/Screens/Match/Settings/RoomSettingsOverlay.cs +++ b/osu.Game/Screens/Multi/Screens/Match/Settings/RoomSettingsOverlay.cs @@ -16,7 +16,7 @@ using OpenTK.Graphics; namespace osu.Game.Screens.Multi.Screens.Match.Settings { - public class RoomSettingsOverlay : OverlayContainer + public class RoomSettingsOverlay : FocusedOverlayContainer { private const float transition_duration = 500; private const float field_padding = 45; @@ -28,13 +28,15 @@ namespace osu.Game.Screens.Multi.Screens.Match.Settings private readonly Container content; + protected readonly OsuTextBox Name, MaxParticipants; + protected readonly RoomAvailabilityPicker Availability; + protected readonly GameTypePicker Type; + protected readonly TriangleButton Apply; + public RoomSettingsOverlay(Room room) { Masking = true; - SettingsTextBox name, maxParticipants; - RoomAvailabilityPicker availability; - GameTypePicker type; Child = content = new Container { RelativeSizeAxes = Axes.Both, @@ -59,15 +61,15 @@ namespace osu.Game.Screens.Multi.Screens.Match.Settings { new Section("ROOM NAME") { - Child = name = new SettingsTextBox(), + Child = Name = new SettingsTextBox(), }, new Section("ROOM VISIBILITY") { - Child = availability = new RoomAvailabilityPicker(), + Child = Availability = new RoomAvailabilityPicker(), }, new Section("GAME TYPE") { - Child = type = new GameTypePicker(), + Child = Type = new GameTypePicker(), }, }, }, @@ -80,7 +82,7 @@ namespace osu.Game.Screens.Multi.Screens.Match.Settings { new Section("MAX PARTICIPANTS") { - Child = maxParticipants = new SettingsTextBox(), + Child = MaxParticipants = new SettingsTextBox(), }, new Section("PASSWORD (OPTIONAL)") { @@ -90,7 +92,7 @@ namespace osu.Game.Screens.Multi.Screens.Match.Settings }, }, }, - new ApplyButton + Apply = new ApplyButton { Anchor = Anchor.BottomCentre, Origin = Anchor.BottomCentre, @@ -100,12 +102,12 @@ namespace osu.Game.Screens.Multi.Screens.Match.Settings { if (room != null) { - room.Name.Value = name.Text; - room.Availability.Value = availability.Current.Value; - room.Type.Value = type.Current.Value; + room.Name.Value = Name.Text; + room.Availability.Value = Availability.Current.Value; + room.Type.Value = Type.Current.Value; int max; - if (int.TryParse(maxParticipants.Text, out max)) + if (int.TryParse(MaxParticipants.Text, out max)) room.MaxParticipants.Value = max; else room.MaxParticipants.Value = null; @@ -117,10 +119,10 @@ namespace osu.Game.Screens.Multi.Screens.Match.Settings }, }; - nameBind.ValueChanged += n => name.Text = n; - availabilityBind.ValueChanged += a => availability.Current.Value = a; - typeBind.ValueChanged += t => type.Current.Value = t; - maxParticipantsBind.ValueChanged += m => maxParticipants.Text = m?.ToString(); + nameBind.ValueChanged += n => Name.Text = n; + availabilityBind.ValueChanged += a => Availability.Current.Value = a; + typeBind.ValueChanged += t => Type.Current.Value = t; + maxParticipantsBind.ValueChanged += m => MaxParticipants.Text = m?.ToString(); nameBind.BindTo(room.Name); availabilityBind.BindTo(room.Availability);