Пример #1
0
        public void TestSelectMultipleScores()
        {
            var firstScore  = new TestScoreInfo(new OsuRuleset().RulesetInfo);
            var secondScore = new TestScoreInfo(new OsuRuleset().RulesetInfo);

            createListStep(() => new ScorePanelList());

            AddStep("add scores and select first", () =>
            {
                list.AddScore(firstScore);
                list.AddScore(secondScore);
                list.SelectedScore.Value = firstScore;
            });

            assertScoreState(firstScore, true);
            assertScoreState(secondScore, false);

            AddStep("select second score", () =>
            {
                InputManager.MoveMouseTo(list.ChildrenOfType <ScorePanel>().Single(p => p.Score == secondScore));
                InputManager.Click(MouseButton.Left);
            });

            assertScoreState(firstScore, false);
            assertScoreState(secondScore, true);
            assertExpandedPanelCentred();
        }
Пример #2
0
        public void TestAddManyScoresAfterExpandedPanel()
        {
            var initialScore = new TestScoreInfo(new OsuRuleset().RulesetInfo);

            createListStep(() => new ScorePanelList());

            AddStep("add initial panel and select", () =>
            {
                list.AddScore(initialScore);
                list.SelectedScore.Value = initialScore;
            });

            AddStep("add many scores", () =>
            {
                for (int i = 0; i < 20; i++)
                {
                    list.AddScore(new TestScoreInfo(new OsuRuleset().RulesetInfo)
                    {
                        TotalScore = initialScore.TotalScore - i - 1
                    });
                }
            });

            assertScoreState(initialScore, true);
            assertExpandedPanelCentred();
        }
Пример #3
0
        public void TestFetchWhenScrolledToTheLeft()
        {
            ScoreInfo userScore = null;

            AddStep("bind user score info handler", () =>
            {
                userScore = new TestScoreInfo(new OsuRuleset().RulesetInfo)
                {
                    OnlineScoreID = currentScoreId++
                };
                bindHandler(userScore: userScore);
            });

            createResults(() => userScore);
            waitForDisplay();

            AddStep("bind delayed handler", () => bindHandler(3000));

            for (int i = 0; i < 2; i++)
            {
                int beforePanelCount = 0;

                AddStep("get panel count", () => beforePanelCount = this.ChildrenOfType <ScorePanel>().Count());
                AddStep("scroll to left", () => resultsScreen.ScorePanelList.ChildrenOfType <OsuScrollContainer>().Single().ScrollToStart(false));

                AddAssert("left loading spinner shown", () => resultsScreen.LeftSpinner.State.Value == Visibility.Visible);
                waitForDisplay();

                AddAssert($"count increased by {scores_per_result}", () => this.ChildrenOfType <ScorePanel>().Count() == beforePanelCount + scores_per_result);
                AddAssert("left loading spinner hidden", () => resultsScreen.LeftSpinner.State.Value == Visibility.Hidden);
            }
        }
Пример #4
0
        public void TestContractedPanel()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                Accuracy = 0.925, Rank = ScoreRank.A
            };

            addPanelStep(score, PanelState.Contracted);
        }
Пример #5
0
        public void TestSSRank()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                Accuracy = 1, Rank = ScoreRank.X
            };

            addPanelStep(score);
        }
Пример #6
0
        public void TestAllHitResults()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                Statistics = { [HitResult.Perfect] = 350, [HitResult.Ok] = 200 }
            };

            addPanelStep(score);
        }
Пример #7
0
        public void TestScoreWithPositionStatistics()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                HitEvents = createPositionDistributedHitEvents()
            };

            loadPanel(score);
        }
        public void TestScoreWithStatistics()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                HitEvents = TestSceneHitEventTimingDistributionGraph.CreateDistributedHitEvents()
            };

            loadPanel(score);
        }
Пример #9
0
        public void TestAddPanelAfterSelectingScore()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo);

            createListStep(() => new ScorePanelList
            {
                SelectedScore = { Value = score }
            });

            AddStep("add panel", () => list.AddScore(score));

            assertScoreState(score, true);
            assertExpandedPanelCentred();
        }
Пример #10
0
        public void TestResultsWithPlayer(double accuracy, ScoreRank rank)
        {
            TestResultsScreen screen = null;

            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                Accuracy = accuracy,
                Rank     = rank
            };

            AddStep("load results", () => Child = new TestResultsContainer(screen = createResultsScreen(score)));
            AddUntilStep("wait for loaded", () => screen.IsLoaded);
            AddAssert("retry overlay present", () => screen.RetryOverlay != null);
        }
Пример #11
0
            protected override APIRequest FetchScores(Action <IEnumerable <ScoreInfo> > scoresCallback)
            {
                var scores = new List <ScoreInfo>();

                for (int i = 0; i < 20; i++)
                {
                    var score = new TestScoreInfo(new OsuRuleset().RulesetInfo);
                    score.TotalScore += 10 - i;
                    scores.Add(score);
                }

                scoresCallback?.Invoke(scores);

                return(null);
            }
Пример #12
0
        public void TestAddScoreImmediately()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo);

            createListStep(() =>
            {
                var newList = new ScorePanelList {
                    SelectedScore = { Value = score }
                };
                newList.AddScore(score);
                return(newList);
            });

            assertScoreState(score, true);
            assertExpandedPanelCentred();
        }
Пример #13
0
        public void TestAddPanelBeforeSelectingScore()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo);

            createListStep(() => new ScorePanelList());

            AddStep("add panel", () => list.AddScore(score));

            assertScoreState(score, false);
            assertFirstPanelCentred();

            AddStep("select score", () => list.SelectedScore.Value = score);

            assertScoreState(score, true);
            assertExpandedPanelCentred();
        }
Пример #14
0
        public void TestExpandAndContract()
        {
            var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                Accuracy = 0.925, Rank = ScoreRank.A
            };

            addPanelStep(score, PanelState.Contracted);
            AddWaitStep("wait for transition", 10);

            AddStep("expand panel", () => panel.State = PanelState.Expanded);
            AddWaitStep("wait for transition", 10);

            AddStep("contract panel", () => panel.State = PanelState.Contracted);
            AddWaitStep("wait for transition", 10);
        }
Пример #15
0
        public void TestCultureInvariance()
        {
            var ruleset   = new OsuRuleset().RulesetInfo;
            var scoreInfo = new TestScoreInfo(ruleset);
            var beatmap   = new TestBeatmap(ruleset);
            var score     = new Score
            {
                ScoreInfo = scoreInfo,
                Replay    = new Replay
                {
                    Frames = new List <ReplayFrame>
                    {
                        new OsuReplayFrame(2000, OsuPlayfield.BASE_SIZE / 2, OsuAction.LeftButton)
                    }
                }
            };

            // the "se" culture is used here, as it encodes the negative number sign as U+2212 MINUS SIGN,
            // rather than the classic ASCII U+002D HYPHEN-MINUS.
            CultureInfo.CurrentCulture = new CultureInfo("se");

            var encodeStream = new MemoryStream();

            var encoder = new LegacyScoreEncoder(score, beatmap);

            encoder.Encode(encodeStream);

            var decodeStream = new MemoryStream(encodeStream.GetBuffer());

            var decoder            = new TestLegacyScoreDecoder();
            var decodedAfterEncode = decoder.Parse(decodeStream);

            Assert.Multiple(() =>
            {
                Assert.That(decodedAfterEncode, Is.Not.Null);

                Assert.That(decodedAfterEncode.ScoreInfo.User.Username, Is.EqualTo(scoreInfo.User.Username));
                Assert.That(decodedAfterEncode.ScoreInfo.BeatmapInfoID, Is.EqualTo(scoreInfo.BeatmapInfoID));
                Assert.That(decodedAfterEncode.ScoreInfo.Ruleset, Is.EqualTo(scoreInfo.Ruleset));
                Assert.That(decodedAfterEncode.ScoreInfo.TotalScore, Is.EqualTo(scoreInfo.TotalScore));
                Assert.That(decodedAfterEncode.ScoreInfo.MaxCombo, Is.EqualTo(scoreInfo.MaxCombo));
                Assert.That(decodedAfterEncode.ScoreInfo.Date, Is.EqualTo(scoreInfo.Date));

                Assert.That(decodedAfterEncode.Replay.Frames.Count, Is.EqualTo(1));
            });
        }
Пример #16
0
        public void TestShowWithUserScore()
        {
            ScoreInfo userScore = null;

            AddStep("bind user score info handler", () =>
            {
                userScore = new TestScoreInfo(new OsuRuleset().RulesetInfo)
                {
                    OnlineScoreID = currentScoreId++
                };
                bindHandler(userScore: userScore);
            });

            createResults(() => userScore);

            AddAssert("user score selected", () => this.ChildrenOfType <ScorePanel>().Single(p => p.Score.OnlineScoreID == userScore.OnlineScoreID).State == PanelState.Expanded);
        }
Пример #17
0
        public void TestShowUserScoreWithDelay()
        {
            ScoreInfo userScore = null;

            AddStep("bind user score info handler", () =>
            {
                userScore = new TestScoreInfo(new OsuRuleset().RulesetInfo)
                {
                    OnlineScoreID = currentScoreId++
                };
                bindHandler(3000, userScore);
            });

            createResults(() => userScore);
            waitForDisplay();

            AddAssert("more than 1 panel displayed", () => this.ChildrenOfType <ScorePanel>().Count() > 1);
            AddAssert("user score selected", () => this.ChildrenOfType <ScorePanel>().Single(p => p.Score.OnlineScoreID == userScore.OnlineScoreID).State == PanelState.Expanded);
        }
Пример #18
0
            protected override APIRequest FetchScores(Action <IEnumerable <ScoreInfo> > scoresCallback)
            {
                Task.Run(async() =>
                {
                    await Task.Delay(TimeSpan.FromMilliseconds(delay));

                    var scores = new List <ScoreInfo>();

                    for (int i = 0; i < 20; i++)
                    {
                        var score         = new TestScoreInfo(new OsuRuleset().RulesetInfo);
                        score.TotalScore += 10 - i;
                        scores.Add(score);
                    }

                    scoresCallback?.Invoke(scores);

                    Schedule(() => FetchCompleted = true);
                });

                return(null);
            }
Пример #19
0
        public void TestKeyboardNavigation()
        {
            var lowestScore = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                MaxCombo = 100
            };
            var middleScore = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                MaxCombo = 200
            };
            var highestScore = new TestScoreInfo(new OsuRuleset().RulesetInfo)
            {
                MaxCombo = 300
            };

            createListStep(() => new ScorePanelList());

            AddStep("add scores and select middle", () =>
            {
                // order of addition purposefully scrambled.
                list.AddScore(middleScore);
                list.AddScore(lowestScore);
                list.AddScore(highestScore);
                list.SelectedScore.Value = middleScore;
            });

            AddUntilStep("wait for all scores to be visible", () => list.ChildrenOfType <ScorePanelTrackingContainer>().All(t => t.IsPresent));

            assertScoreState(highestScore, false);
            assertScoreState(middleScore, true);
            assertScoreState(lowestScore, false);

            AddStep("press left", () => InputManager.Key(Key.Left));

            assertScoreState(highestScore, true);
            assertScoreState(middleScore, false);
            assertScoreState(lowestScore, false);
            assertExpandedPanelCentred();

            AddStep("press left at start of list", () => InputManager.Key(Key.Left));

            assertScoreState(highestScore, true);
            assertScoreState(middleScore, false);
            assertScoreState(lowestScore, false);
            assertExpandedPanelCentred();

            AddStep("press right", () => InputManager.Key(Key.Right));

            assertScoreState(highestScore, false);
            assertScoreState(middleScore, true);
            assertScoreState(lowestScore, false);
            assertExpandedPanelCentred();

            AddStep("press right again", () => InputManager.Key(Key.Right));

            assertScoreState(highestScore, false);
            assertScoreState(middleScore, false);
            assertScoreState(lowestScore, true);
            assertExpandedPanelCentred();

            AddStep("press right at end of list", () => InputManager.Key(Key.Right));

            assertScoreState(highestScore, false);
            assertScoreState(middleScore, false);
            assertScoreState(lowestScore, true);
            assertExpandedPanelCentred();

            AddStep("press left", () => InputManager.Key(Key.Left));

            assertScoreState(highestScore, false);
            assertScoreState(middleScore, true);
            assertScoreState(lowestScore, false);
            assertExpandedPanelCentred();
        }