mirror of
https://github.com/ppy/osu.git
synced 2024-12-14 10:52:53 +08:00
Add failing test scene
This commit is contained in:
parent
d75d67577a
commit
255f7b7b53
92
osu.Game.Tests/Skins/TestSceneSkinProvidingContainer.cs
Normal file
92
osu.Game.Tests/Skins/TestSceneSkinProvidingContainer.cs
Normal file
@ -0,0 +1,92 @@
|
||||
// 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.
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using osu.Framework.Audio.Sample;
|
||||
using osu.Framework.Bindables;
|
||||
using osu.Framework.Extensions.IEnumerableExtensions;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.OpenGL.Textures;
|
||||
using osu.Framework.Graphics.Textures;
|
||||
using osu.Game.Audio;
|
||||
using osu.Game.Skinning;
|
||||
using osu.Game.Tests.Visual;
|
||||
|
||||
namespace osu.Game.Tests.Skins
|
||||
{
|
||||
public class TestSceneSkinProvidingContainer : OsuTestScene
|
||||
{
|
||||
/// <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++)
|
||||
sources.Add(new TestSkin());
|
||||
|
||||
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 OnSourceChanged()
|
||||
{
|
||||
ResetSources();
|
||||
sources.ForEach(AddSource);
|
||||
}
|
||||
}
|
||||
|
||||
private class TestSkin : ISkin
|
||||
{
|
||||
public const string TEXTURE_NAME = "virtual-texture";
|
||||
|
||||
public Drawable GetDrawableComponent(ISkinComponent component) => throw new System.NotImplementedException();
|
||||
|
||||
public Texture GetTexture(string componentName, WrapMode wrapModeS, WrapMode wrapModeT)
|
||||
{
|
||||
if (componentName == TEXTURE_NAME)
|
||||
return Texture.WhitePixel;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public ISample GetSample(ISampleInfo sampleInfo) => throw new System.NotImplementedException();
|
||||
|
||||
public IBindable<TValue> GetConfig<TLookup, TValue>(TLookup lookup) => throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user