1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-18 14:12:54 +08:00
osu-lazer/osu.Game.Tests/Skins/TestSceneSkinProvidingContainer.cs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

106 lines
3.4 KiB
C#
Raw Normal View History

2021-07-06 21:32:02 +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.
2022-06-17 15:37:17 +08:00
#nullable disable
2021-07-06 21:32:02 +08:00
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework;
2022-08-02 18:50:57 +08:00
using osu.Framework.Allocation;
2021-07-06 21:32:02 +08:00
using osu.Framework.Audio.Sample;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
2022-08-02 18:50:57 +08:00
using osu.Framework.Graphics.Rendering;
2021-07-06 21:32:02 +08:00
using osu.Framework.Graphics.Textures;
using osu.Framework.Testing;
2021-07-06 21:32:02 +08:00
using osu.Game.Audio;
using osu.Game.Skinning;
using osu.Game.Tests.Visual;
namespace osu.Game.Tests.Skins
{
[HeadlessTest]
2021-07-06 21:32:02 +08:00
public class TestSceneSkinProvidingContainer : OsuTestScene
{
2022-08-02 18:50:57 +08:00
[Resolved]
private IRenderer renderer { get; set; }
2021-07-06 21:32:02 +08:00
/// <summary>
/// Ensures that the first inserted skin after resetting (via source change)
/// is always prioritised over others when providing the same resource.
/// </summary>
[Test]
public void TestPriorityPreservation()
{
TestSkinProvidingContainer provider = null;
TestSkin mostPrioritisedSource = null;
AddStep("setup sources", () =>
{
var sources = new List<TestSkin>();
for (int i = 0; i < 10; i++)
2022-08-02 18:50:57 +08:00
sources.Add(new TestSkin(renderer));
2021-07-06 21:32:02 +08:00
mostPrioritisedSource = sources.First();
Child = provider = new TestSkinProvidingContainer(sources);
});
AddAssert("texture provided by expected skin", () =>
{
return provider.FindProvider(s => s.GetTexture(TestSkin.TEXTURE_NAME) != null) == mostPrioritisedSource;
});
AddStep("trigger source change", () => provider.TriggerSourceChanged());
AddAssert("texture still provided by expected skin", () =>
{
return provider.FindProvider(s => s.GetTexture(TestSkin.TEXTURE_NAME) != null) == mostPrioritisedSource;
});
}
private class TestSkinProvidingContainer : SkinProvidingContainer
{
private readonly IEnumerable<ISkin> sources;
public TestSkinProvidingContainer(IEnumerable<ISkin> sources)
{
this.sources = sources;
}
public new void TriggerSourceChanged() => base.TriggerSourceChanged();
protected override void RefreshSources()
2021-07-06 21:32:02 +08:00
{
SetSources(sources);
2021-07-06 21:32:02 +08:00
}
}
private class TestSkin : ISkin
{
public const string TEXTURE_NAME = "virtual-texture";
2022-08-02 18:50:57 +08:00
private readonly IRenderer renderer;
public TestSkin(IRenderer renderer)
{
this.renderer = renderer;
}
2021-07-06 21:32:02 +08:00
public Drawable GetDrawableComponent(ISkinComponent component) => throw new System.NotImplementedException();
public Texture GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT)
{
if (componentName == TEXTURE_NAME)
2022-08-02 18:50:57 +08:00
return renderer.WhitePixel;
2021-07-06 21:32:02 +08:00
return null;
}
public ISample GetSample(ISampleInfo sampleInfo) => throw new System.NotImplementedException();
public IBindable<TValue> GetConfig<TLookup, TValue>(TLookup lookup) => throw new System.NotImplementedException();
}
}
}