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);
        }
示例#3
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 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();
        }
示例#8
0
        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()));
        }
示例#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);
        }