示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#6
0
        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();
        }
示例#10
0
        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);
        }
示例#11
0
        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);
        }