public void TestModOverlap()
        {
            AddStep("add dummy mods", () =>
            {
                MultiplayerClient.ChangeUserMods(new Mod[]
                {
                    new OsuModNoFail(),
                    new OsuModDoubleTime()
                });
            });

            AddStep("add user with mods", () =>
            {
                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 OsuModDoubleTime()
                });
            });

            AddStep("set 0 ready", () => MultiplayerClient.ChangeState(MultiplayerUserState.Ready));

            AddStep("set 1 spectate", () => MultiplayerClient.ChangeUserState(0, MultiplayerUserState.Spectating));

            // Have to set back to idle due to status priority.
            AddStep("set 0 no map, 1 ready", () =>
            {
                MultiplayerClient.ChangeState(MultiplayerUserState.Idle);
                MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.NotDownloaded());
                MultiplayerClient.ChangeUserState(0, MultiplayerUserState.Ready);
            });

            AddStep("set 0 downloading", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.Downloading(0)));

            AddStep("set 0 spectate", () => MultiplayerClient.ChangeUserState(0, MultiplayerUserState.Spectating));

            AddStep("make both default", () =>
            {
                MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.LocallyAvailable());
                MultiplayerClient.ChangeUserState(0, MultiplayerUserState.Idle);
                MultiplayerClient.ChangeState(MultiplayerUserState.Idle);
            });
        }
        public void TestGameStateHasPriorityOverDownloadState()
        {
            AddStep("set to downloading map", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.Downloading(0)));
            checkProgressBarVisibility(true);

            AddStep("make user ready", () => MultiplayerClient.ChangeState(MultiplayerUserState.Results));
            checkProgressBarVisibility(false);
            AddUntilStep("ready mark visible", () => this.ChildrenOfType <StateDisplay>().Single().IsPresent);

            AddStep("make user ready", () => MultiplayerClient.ChangeState(MultiplayerUserState.Idle));
            checkProgressBarVisibility(true);
        }
        public void TestBeatmapDownloadingStates()
        {
            AddStep("set to no map", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.NotDownloaded()));
            AddStep("set to downloading map", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.Downloading(0)));

            checkProgressBarVisibility(true);

            AddRepeatStep("increment progress", () =>
            {
                float progress = this.ChildrenOfType <ParticipantPanel>().Single().User.BeatmapAvailability.DownloadProgress ?? 0;
                MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.Downloading(progress + RNG.NextSingle(0.1f)));
            }, 25);

            AddAssert("progress bar increased", () => this.ChildrenOfType <ProgressBar>().Single().Current.Value > 0);

            AddStep("set to importing map", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.Importing()));
            checkProgressBarVisibility(false);

            AddStep("set to available", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.LocallyAvailable()));
        }
 public void TestCorrectInitialState()
 {
     AddStep("set to downloading map", () => MultiplayerClient.ChangeBeatmapAvailability(BeatmapAvailability.Downloading(0)));
     createNewParticipantsList();
     checkProgressBarVisibility(true);
 }