public void TestManyUsers() { const int users_count = 20; AddStep("add many users", () => { for (int i = 0; i < users_count; 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; } } } }); AddRepeatStep("switch hosts", () => MultiplayerClient.TransferHost(RNG.Next(0, users_count)), 10); AddStep("give host back", () => MultiplayerClient.TransferHost(API.LocalUser.Value.Id)); }
public void TestReadyButtonDisabledWhenNotHostAndUsersReady() { AddStep("add user and transfer host", () => { MultiplayerClient.AddUser(new APIUser { Id = PLAYER_1_ID }); MultiplayerClient.TransferHost(PLAYER_1_ID); }); AddStep("set user ready", () => MultiplayerClient.ChangeUserState(PLAYER_1_ID, MultiplayerUserState.Ready)); ClickButtonWhenEnabled <MultiplayerSpectateButton>(); assertReadyButtonEnablement(false); }
public void TestBecomeHostWhileReady() { AddStep("add host", () => { MultiplayerClient.AddUser(new APIUser { Id = 2, Username = "******" }); MultiplayerClient.TransferHost(2); }); ClickButtonWhenEnabled <MultiplayerReadyButton>(); AddStep("make user host", () => MultiplayerClient.TransferHost(MultiplayerClient.Room?.Users[0].UserID ?? 0)); verifyGameplayStartFlow(); }
public void TestToggleStateWhenNotHost() { AddStep("add second user as host", () => { MultiplayerClient.AddUser(new APIUser { Id = 2, Username = "******" }); MultiplayerClient.TransferHost(2); }); 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 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 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 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 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); }