public void TestManyUsers() { AddStep("add many users", () => { for (int i = 0; i < 20; i++) { MultiplayerClient.AddUser(new APIUser { Id = i, Username = $"User {i}", RulesetsStatistics = new Dictionary <string, UserStatistics> { { Ruleset.Value.ShortName, new UserStatistics { GlobalRank = RNG.Next(1, 100000), } } }, CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c3.jpg", }); MultiplayerClient.ChangeUserState(i, (MultiplayerUserState)RNG.Next(0, (int)MultiplayerUserState.Results + 1)); if (RNG.NextBool()) { var beatmapState = (DownloadState)RNG.Next(0, (int)DownloadState.LocallyAvailable + 1); switch (beatmapState) { case DownloadState.NotDownloaded: MultiplayerClient.ChangeUserBeatmapAvailability(i, BeatmapAvailability.NotDownloaded()); break; case DownloadState.Downloading: MultiplayerClient.ChangeUserBeatmapAvailability(i, BeatmapAvailability.Downloading(RNG.NextSingle())); break; case DownloadState.Importing: MultiplayerClient.ChangeUserBeatmapAvailability(i, BeatmapAvailability.Importing()); break; } } } }); }
public void TestCrownChangesStateWhenHostTransferred() { AddStep("add user", () => MultiplayerClient.AddUser(new APIUser { Id = 3, Username = "******", CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c3.jpg", })); AddUntilStep("first user crown visible", () => this.ChildrenOfType <ParticipantPanel>().ElementAt(0).ChildrenOfType <SpriteIcon>().First().Alpha == 1); AddUntilStep("second user crown hidden", () => this.ChildrenOfType <ParticipantPanel>().ElementAt(1).ChildrenOfType <SpriteIcon>().First().Alpha == 0); AddStep("make second user host", () => MultiplayerClient.TransferHost(3)); AddUntilStep("first user crown hidden", () => this.ChildrenOfType <ParticipantPanel>().ElementAt(0).ChildrenOfType <SpriteIcon>().First().Alpha == 0); AddUntilStep("second user crown visible", () => this.ChildrenOfType <ParticipantPanel>().ElementAt(1).ChildrenOfType <SpriteIcon>().First().Alpha == 1); }
public void TestHostGetsPinnedToTop() { AddStep("add user", () => MultiplayerClient.AddUser(new APIUser { Id = 3, Username = "******", CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c3.jpg", })); AddStep("make second user host", () => MultiplayerClient.TransferHost(3)); AddAssert("second user above first", () => { var first = this.ChildrenOfType <ParticipantPanel>().ElementAt(0); var second = this.ChildrenOfType <ParticipantPanel>().ElementAt(1); return(second.Y < first.Y); }); }
public void TestRemoveUser() { APIUser secondUser = null; AddStep("add a user", () => { MultiplayerClient.AddUser(secondUser = new APIUser { Id = 3, Username = "******", CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c3.jpg", }); }); AddStep("remove host", () => MultiplayerClient.RemoveUser(API.LocalUser.Value)); AddAssert("single panel is for second user", () => this.ChildrenOfType <ParticipantPanel>().Single().User.User == secondUser); }
public void TestKickButtonOnlyPresentWhenHost() { AddStep("add user", () => MultiplayerClient.AddUser(new APIUser { Id = 3, Username = "******", CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c3.jpg", })); AddUntilStep("kick buttons visible", () => this.ChildrenOfType <ParticipantPanel.KickButton>().Count(d => d.IsPresent) == 1); AddStep("make second user host", () => MultiplayerClient.TransferHost(3)); AddUntilStep("kick buttons not visible", () => this.ChildrenOfType <ParticipantPanel.KickButton>().Count(d => d.IsPresent) == 0); AddStep("make local user host again", () => MultiplayerClient.TransferHost(API.LocalUser.Value.Id)); AddUntilStep("kick buttons visible", () => this.ChildrenOfType <ParticipantPanel.KickButton>().Count(d => d.IsPresent) == 1); }
public void TestLoseHostWhileReady() { AddStep("setup", () => { MultiplayerClient.TransferHost(MultiplayerClient.Room?.Users[0].UserID ?? 0); MultiplayerClient.AddUser(new APIUser { Id = 2, Username = "******" }); }); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddUntilStep("user is ready", () => MultiplayerClient.Room?.Users[0].State == MultiplayerUserState.Ready); AddStep("transfer host", () => MultiplayerClient.TransferHost(MultiplayerClient.Room?.Users[1].UserID ?? 0)); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddUntilStep("user is idle (match not started)", () => MultiplayerClient.Room?.Users[0].State == MultiplayerUserState.Idle); AddAssert("ready button enabled", () => button.ChildrenOfType <OsuButton>().Single().Enabled.Value); }
public void TestToggleStateWhenHost(bool allReady) { AddStep("setup", () => { MultiplayerClient.TransferHost(MultiplayerClient.Room?.Users[0].UserID ?? 0); if (!allReady) { MultiplayerClient.AddUser(new APIUser { Id = 2, Username = "******" }); } }); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddUntilStep("user is ready", () => MultiplayerClient.Room?.Users[0].State == MultiplayerUserState.Ready); verifyGameplayStartFlow(); }
public void TestRange(int min, int max) { AddStep("add users", () => { MultiplayerClient.AddUser(new APIUser { Id = 2, Statistics = { GlobalRank = min } }); MultiplayerClient.AddUser(new APIUser { Id = 3, Statistics = { GlobalRank = max } }); // Remove the local user so only the ones above are displayed. MultiplayerClient.RemoveUser(API.LocalUser.Value); }); }
public void TestReadyAndUnReadyDuringCountdown() { AddStep("add second user as host", () => { MultiplayerClient.AddUser(new APIUser { Id = 2, Username = "******" }); MultiplayerClient.TransferHost(2); }); AddStep("start with countdown", () => MultiplayerClient.SendMatchRequest(new StartMatchCountdownRequest { Duration = TimeSpan.FromMinutes(2) }).WaitSafely()); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddUntilStep("user is ready", () => MultiplayerClient.Room?.Users[0].State == MultiplayerUserState.Ready); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddUntilStep("user is idle", () => MultiplayerClient.Room?.Users[0].State == MultiplayerUserState.Idle); }
public void TestUserWithMods() { AddStep("add user", () => { MultiplayerClient.AddUser(new APIUser { Id = 0, Username = "******", RulesetsStatistics = new Dictionary <string, UserStatistics> { { Ruleset.Value.ShortName, new UserStatistics { GlobalRank = RNG.Next(1, 100000), } } }, CoverUrl = @"https://osu.ppy.sh/images/headers/profile-covers/c3.jpg", }); MultiplayerClient.ChangeUserMods(0, new Mod[] { new OsuModHardRock(), new OsuModDifficultyAdjust { ApproachRate = { Value = 1 } } }); }); for (var i = MultiplayerUserState.Idle; i < MultiplayerUserState.Results; i++) { var state = i; AddStep($"set state: {state}", () => MultiplayerClient.ChangeUserState(0, state)); } AddStep("set state: downloading", () => MultiplayerClient.ChangeUserBeatmapAvailability(0, BeatmapAvailability.Downloading(0))); AddStep("set state: locally available", () => MultiplayerClient.ChangeUserBeatmapAvailability(0, BeatmapAvailability.LocallyAvailable())); }
public void TestBecomeHostDuringCountdownAndReady() { AddStep("add second user as host", () => { MultiplayerClient.AddUser(new APIUser { Id = 2, Username = "******" }); MultiplayerClient.TransferHost(2); }); AddStep("start countdown", () => MultiplayerClient.SendMatchRequest(new StartMatchCountdownRequest { Duration = TimeSpan.FromMinutes(1) }).WaitSafely()); AddUntilStep("countdown started", () => MultiplayerClient.Room?.Countdown != null); AddStep("transfer host to local user", () => MultiplayerClient.TransferHost(API.LocalUser.Value.OnlineID)); AddUntilStep("local user is host", () => MultiplayerClient.Room?.Host?.Equals(MultiplayerClient.LocalUser) == true); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddUntilStep("local user became ready", () => MultiplayerClient.LocalUser?.State == MultiplayerUserState.Ready); AddAssert("countdown still active", () => MultiplayerClient.Room?.Countdown != null); }
public void TestManyUsersChangingState(bool isHost) { const int users = 10; AddStep("setup", () => { MultiplayerClient.TransferHost(MultiplayerClient.Room?.Users[0].UserID ?? 0); for (int i = 0; i < users; i++) { MultiplayerClient.AddUser(new APIUser { Id = i, Username = "******" }); } }); if (!isHost) { AddStep("transfer host", () => MultiplayerClient.TransferHost(2)); } ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddRepeatStep("change user ready state", () => { MultiplayerClient.ChangeUserState(RNG.Next(0, users), RNG.NextBool() ? MultiplayerUserState.Ready : MultiplayerUserState.Idle); }, 20); AddRepeatStep("ready all users", () => { var nextUnready = MultiplayerClient.Room?.Users.FirstOrDefault(c => c.State == MultiplayerUserState.Idle); if (nextUnready != null) { MultiplayerClient.ChangeUserState(nextUnready.UserID, MultiplayerUserState.Ready); } }, users); }