Combine test scene to avoid huge copy paste

This commit is contained in:
Dean Herbert
2021-08-27 18:44:44 +09:00
parent 34d185d846
commit 23414b0c63
2 changed files with 101 additions and 218 deletions

View File

@ -12,6 +12,7 @@ using osu.Framework.Input;
using osu.Framework.Platform;
using osu.Framework.Screens;
using osu.Framework.Testing;
using osu.Framework.Utils;
using osu.Game.Beatmaps;
using osu.Game.Database;
using osu.Game.Graphics.UserInterface;
@ -94,6 +95,106 @@ namespace osu.Game.Tests.Visual.Multiplayer
AddStep("empty step", () => { });
}
[Test]
public void TestLobbyEvents()
{
createRoom(() => new Room
{
Name = { Value = "Test Room" },
Playlist =
{
new PlaylistItem
{
Beatmap = { Value = beatmaps.GetWorkingBeatmap(importedSet.Beatmaps.First(b => b.RulesetID == 0)).BeatmapInfo },
Ruleset = { Value = new OsuRuleset().RulesetInfo },
}
}
});
AddRepeatStep("random stuff happens", performRandomAction, 30);
// ensure we have a handful of players so the ready-up sounds good :9
AddRepeatStep("player joins", addRandomPlayer, 5);
// all ready
AddUntilStep("all players ready", () =>
{
var nextUnready = client.Room?.Users.FirstOrDefault(c => c.State == MultiplayerUserState.Idle);
if (nextUnready != null)
client.ChangeUserState(nextUnready.UserID, MultiplayerUserState.Ready);
return client.Room?.Users.All(u => u.State == MultiplayerUserState.Ready) == true;
});
}
private void addRandomPlayer()
{
int randomUser = RNG.Next(200000, 500000);
client.AddUser(new User { Id = randomUser, Username = $"user {randomUser}" });
}
private void removeLastUser()
{
User lastUser = client.Room?.Users.Last().User;
if (lastUser == null || lastUser == client.LocalUser?.User)
return;
client.RemoveUser(lastUser);
}
private void kickLastUser()
{
User lastUser = client.Room?.Users.Last().User;
if (lastUser == null || lastUser == client.LocalUser?.User)
return;
client.KickUser(lastUser.Id);
}
private void markNextPlayerReady()
{
var nextUnready = client.Room?.Users.FirstOrDefault(c => c.State == MultiplayerUserState.Idle);
if (nextUnready != null)
client.ChangeUserState(nextUnready.UserID, MultiplayerUserState.Ready);
}
private void markNextPlayerIdle()
{
var nextUnready = client.Room?.Users.FirstOrDefault(c => c.State == MultiplayerUserState.Ready);
if (nextUnready != null)
client.ChangeUserState(nextUnready.UserID, MultiplayerUserState.Idle);
}
private void performRandomAction()
{
int eventToPerform = RNG.Next(1, 6);
switch (eventToPerform)
{
case 1:
addRandomPlayer();
break;
case 2:
removeLastUser();
break;
case 3:
kickLastUser();
break;
case 4:
markNextPlayerReady();
break;
case 5:
markNextPlayerIdle();
break;
}
}
[Test]
public void TestCreateRoomViaKeyboard()
{