// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System.Collections.Generic; using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.MathUtils; using osu.Framework.Timing; using osu.Game.Rulesets.Objects; using osu.Game.Screens.Play; namespace osu.Game.Tests.Visual { [TestFixture] public class TestCaseSongProgress : OsuTestCase { private readonly SongProgress progress; private readonly TestSongProgressGraph graph; private readonly StopwatchClock clock; public TestCaseSongProgress() { clock = new StopwatchClock(true); Add(progress = new SongProgress { RelativeSizeAxes = Axes.X, AudioClock = new StopwatchClock(true), Anchor = Anchor.BottomLeft, Origin = Anchor.BottomLeft, }); Add(graph = new TestSongProgressGraph { RelativeSizeAxes = Axes.X, Height = 200, Anchor = Anchor.TopLeft, Origin = Anchor.TopLeft, }); AddWaitStep(5); AddAssert("ensure not created", () => graph.CreationCount == 0); AddStep("display values", displayNewValues); AddWaitStep(5); AddUntilStep(() => graph.CreationCount == 1, "wait for creation count"); AddStep("Toggle Bar", () => progress.AllowSeeking = !progress.AllowSeeking); AddWaitStep(5); AddUntilStep(() => graph.CreationCount == 1, "wait for creation count"); AddStep("Toggle Bar", () => progress.AllowSeeking = !progress.AllowSeeking); AddWaitStep(5); AddUntilStep(() => graph.CreationCount == 1, "wait for creation count"); AddRepeatStep("New Values", displayNewValues, 5); AddWaitStep(5); AddAssert("ensure debounced", () => graph.CreationCount == 2); } private void displayNewValues() { List objects = new List(); for (double i = 0; i < 5000; i += RNG.NextDouble() * 10 + i / 1000) objects.Add(new HitObject { StartTime = i }); progress.Objects = objects; graph.Objects = objects; progress.AudioClock = clock; progress.OnSeek = pos => clock.Seek(pos); } private class TestSongProgressGraph : SongProgressGraph { public int CreationCount { get; private set; } protected override void RecreateGraph() { base.RecreateGraph(); CreationCount++; } } } }