1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-26 17:13:07 +08:00
osu-lazer/osu.Game.Tests/Visual/Components/TestScenePreviewTrackManager.cs

166 lines
5.8 KiB
C#
Raw Normal View History

2019-05-29 15:43:27 +08:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2018-06-21 18:31:07 +08:00
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Framework.Audio.Track;
using osu.Framework.Graphics.Containers;
using osu.Game.Audio;
using osu.Game.Beatmaps;
using static osu.Game.Tests.Visual.Components.TestScenePreviewTrackManager.TestPreviewTrackManager;
2018-06-21 18:31:07 +08:00
2019-03-25 00:02:36 +08:00
namespace osu.Game.Tests.Visual.Components
2018-06-21 18:31:07 +08:00
{
public class TestScenePreviewTrackManager : OsuTestScene, IPreviewTrackOwner
2018-06-21 18:31:07 +08:00
{
private readonly PreviewTrackManager trackManager = new TestPreviewTrackManager();
2018-07-11 16:07:14 +08:00
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
2018-06-21 18:31:07 +08:00
{
2018-07-11 16:07:14 +08:00
var dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
2018-06-21 18:31:07 +08:00
dependencies.CacheAs(trackManager);
dependencies.CacheAs<IPreviewTrackOwner>(this);
return dependencies;
}
[BackgroundDependencyLoader]
private void load()
{
2018-08-24 14:50:39 +08:00
Add(trackManager);
2018-06-21 18:31:07 +08:00
}
[Test]
public void TestStartStop()
{
PreviewTrack track = null;
AddStep("get track", () => track = getOwnedTrack());
2019-11-06 18:06:24 +08:00
AddUntilStep("wait loaded", () => track.IsLoaded);
2018-06-21 18:31:07 +08:00
AddStep("start", () => track.Start());
AddAssert("started", () => track.IsRunning);
AddStep("stop", () => track.Stop());
AddAssert("stopped", () => !track.IsRunning);
}
[Test]
public void TestStartMultipleTracks()
{
PreviewTrack track1 = null;
PreviewTrack track2 = null;
AddStep("get tracks", () =>
{
track1 = getOwnedTrack();
track2 = getOwnedTrack();
});
2019-11-06 18:06:24 +08:00
AddUntilStep("wait loaded", () => track1.IsLoaded && track2.IsLoaded);
2018-06-21 18:31:07 +08:00
AddStep("start track 1", () => track1.Start());
AddStep("start track 2", () => track2.Start());
AddAssert("track 1 stopped", () => !track1.IsRunning);
AddAssert("track 2 started", () => track2.IsRunning);
AddStep("start track 1", () => track1.Start());
AddAssert("track 2 stopped", () => !track2.IsRunning);
AddAssert("track 1 started", () => track1.IsRunning);
2018-06-21 18:31:07 +08:00
}
[Test]
public void TestCancelFromOwner()
{
PreviewTrack track = null;
AddStep("get track", () => track = getOwnedTrack());
2019-11-06 18:06:24 +08:00
AddUntilStep("wait loaded", () => track.IsLoaded);
2018-06-21 18:31:07 +08:00
AddStep("start", () => track.Start());
AddStep("stop by owner", () => trackManager.StopAnyPlaying(this));
2018-06-21 18:31:07 +08:00
AddAssert("stopped", () => !track.IsRunning);
}
[Test]
public void TestCancelFromNonOwner()
{
TestTrackOwner owner = null;
PreviewTrack track = null;
2018-08-24 14:50:39 +08:00
AddStep("get track", () => Add(owner = new TestTrackOwner(track = getTrack())));
2019-11-06 18:06:24 +08:00
AddUntilStep("wait loaded", () => track.IsLoaded);
2018-06-21 18:31:07 +08:00
AddStep("start", () => track.Start());
AddStep("attempt stop", () => trackManager.StopAnyPlaying(this));
2018-06-21 18:31:07 +08:00
AddAssert("not stopped", () => track.IsRunning);
AddStep("stop by true owner", () => trackManager.StopAnyPlaying(owner));
2018-06-21 18:31:07 +08:00
AddAssert("stopped", () => !track.IsRunning);
}
[Test]
public void TestNonPresentTrack()
{
TestPreviewTrack track = null;
AddStep("get non-present track", () =>
{
Add(new TestTrackOwner(track = getTrack()));
track.Alpha = 0;
});
AddUntilStep("wait loaded", () => track.IsLoaded);
AddStep("start", () => track.Start());
AddStep("seek to end", () => track.Track.Seek(track.Track.Length));
AddAssert("track stopped", () => !track.IsRunning);
}
2018-06-21 18:31:07 +08:00
private TestPreviewTrack getTrack() => (TestPreviewTrack)trackManager.Get(null);
private TestPreviewTrack getOwnedTrack()
2018-06-21 18:31:07 +08:00
{
var track = getTrack();
2019-11-06 18:06:24 +08:00
LoadComponentAsync(track, Add);
2018-06-21 18:31:07 +08:00
return track;
}
private class TestTrackOwner : CompositeDrawable, IPreviewTrackOwner
{
2019-11-06 18:06:24 +08:00
private readonly PreviewTrack track;
2018-06-21 18:31:07 +08:00
public TestTrackOwner(PreviewTrack track)
{
2019-11-06 18:06:24 +08:00
this.track = track;
}
[BackgroundDependencyLoader]
private void load()
{
LoadComponentAsync(track, AddInternal);
2018-06-21 18:31:07 +08:00
}
2018-07-11 16:07:14 +08:00
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
2018-06-21 18:31:07 +08:00
{
2018-07-11 16:07:14 +08:00
var dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
2018-06-21 18:31:07 +08:00
dependencies.CacheAs<IPreviewTrackOwner>(this);
return dependencies;
}
}
public class TestPreviewTrackManager : PreviewTrackManager
2018-06-21 18:31:07 +08:00
{
2019-05-29 15:43:15 +08:00
protected override TrackManagerPreviewTrack CreatePreviewTrack(BeatmapSetInfo beatmapSetInfo, ITrackStore trackStore) => new TestPreviewTrack(beatmapSetInfo, trackStore);
2018-06-21 18:31:07 +08:00
public class TestPreviewTrack : TrackManagerPreviewTrack
2018-06-21 18:31:07 +08:00
{
2019-05-29 15:43:27 +08:00
private readonly ITrackStore trackManager;
public new Track Track => base.Track;
2019-05-29 15:43:15 +08:00
public TestPreviewTrack(BeatmapSetInfo beatmapSetInfo, ITrackStore trackManager)
2018-06-21 18:31:07 +08:00
: base(beatmapSetInfo, trackManager)
{
2019-05-29 15:43:27 +08:00
this.trackManager = trackManager;
2018-06-21 18:31:07 +08:00
}
2019-05-29 15:43:27 +08:00
protected override Track GetTrack() => trackManager.GetVirtual(100000);
2018-06-21 18:31:07 +08:00
}
}
}
}