mirror of
https://github.com/ppy/osu.git
synced 2024-11-15 01:23:44 +08:00
Add manual test coverage of storyboard videos
This commit is contained in:
parent
9e7182acf0
commit
50afd48812
@ -10,6 +10,7 @@ using NUnit.Framework;
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Extensions.IEnumerableExtensions;
|
using osu.Framework.Extensions.IEnumerableExtensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
using osu.Framework.IO.Stores;
|
using osu.Framework.IO.Stores;
|
||||||
using osu.Framework.Testing;
|
using osu.Framework.Testing;
|
||||||
@ -40,7 +41,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("disallow all lookups", () =>
|
AddStep("disallow all lookups", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = false;
|
storyboard.UseSkinSprites = false;
|
||||||
storyboard.AlwaysProvideTexture = false;
|
storyboard.ProvideResources = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -55,7 +56,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("allow storyboard lookup", () =>
|
AddStep("allow storyboard lookup", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = false;
|
storyboard.UseSkinSprites = false;
|
||||||
storyboard.AlwaysProvideTexture = true;
|
storyboard.ProvideResources = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -67,13 +68,47 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
assertStoryboardSourced();
|
assertStoryboardSourced();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestCase(false)]
|
||||||
|
[TestCase(true)]
|
||||||
|
public void TestVideo(bool scaleTransformProvided)
|
||||||
|
{
|
||||||
|
AddStep("allow storyboard lookup", () =>
|
||||||
|
{
|
||||||
|
storyboard.ProvideResources = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
AddStep("create video", () => SetContents(_ =>
|
||||||
|
{
|
||||||
|
var layer = storyboard.GetLayer("Video");
|
||||||
|
|
||||||
|
var sprite = new StoryboardVideo("Videos/test-video.mp4", Time.Current);
|
||||||
|
|
||||||
|
sprite.AddLoop(Time.Current, 100).Alpha.Add(Easing.None, 0, 10000, 1, 1);
|
||||||
|
|
||||||
|
if (scaleTransformProvided)
|
||||||
|
sprite.TimelineGroup.Scale.Add(Easing.None, Time.Current, Time.Current, 1, 1);
|
||||||
|
|
||||||
|
layer.Elements.Clear();
|
||||||
|
layer.Add(sprite);
|
||||||
|
|
||||||
|
return new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
storyboard.CreateDrawable()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSkinLookupPreferredOverStoryboard()
|
public void TestSkinLookupPreferredOverStoryboard()
|
||||||
{
|
{
|
||||||
AddStep("allow all lookups", () =>
|
AddStep("allow all lookups", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = true;
|
storyboard.UseSkinSprites = true;
|
||||||
storyboard.AlwaysProvideTexture = true;
|
storyboard.ProvideResources = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -91,7 +126,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("allow skin lookup", () =>
|
AddStep("allow skin lookup", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = true;
|
storyboard.UseSkinSprites = true;
|
||||||
storyboard.AlwaysProvideTexture = false;
|
storyboard.ProvideResources = false;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -109,7 +144,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("allow all lookups", () =>
|
AddStep("allow all lookups", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = true;
|
storyboard.UseSkinSprites = true;
|
||||||
storyboard.AlwaysProvideTexture = true;
|
storyboard.ProvideResources = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -127,7 +162,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("allow all lookups", () =>
|
AddStep("allow all lookups", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = true;
|
storyboard.UseSkinSprites = true;
|
||||||
storyboard.AlwaysProvideTexture = true;
|
storyboard.ProvideResources = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -142,7 +177,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("allow all lookups", () =>
|
AddStep("allow all lookups", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = true;
|
storyboard.UseSkinSprites = true;
|
||||||
storyboard.AlwaysProvideTexture = true;
|
storyboard.ProvideResources = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -156,7 +191,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddStep("allow all lookups", () =>
|
AddStep("allow all lookups", () =>
|
||||||
{
|
{
|
||||||
storyboard.UseSkinSprites = true;
|
storyboard.UseSkinSprites = true;
|
||||||
storyboard.AlwaysProvideTexture = true;
|
storyboard.ProvideResources = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
AddStep("create sprites", () => SetContents(_ => createSprite(lookup_name, Anchor.TopLeft, Vector2.Zero)));
|
||||||
@ -170,7 +205,7 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
AddAssert("origin back", () => sprites.All(s => s.Origin == Anchor.TopLeft));
|
AddAssert("origin back", () => sprites.All(s => s.Origin == Anchor.TopLeft));
|
||||||
}
|
}
|
||||||
|
|
||||||
private DrawableStoryboard createSprite(string lookupName, Anchor origin, Vector2 initialPosition)
|
private Drawable createSprite(string lookupName, Anchor origin, Vector2 initialPosition)
|
||||||
{
|
{
|
||||||
var layer = storyboard.GetLayer("Background");
|
var layer = storyboard.GetLayer("Background");
|
||||||
|
|
||||||
@ -180,7 +215,14 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
layer.Elements.Clear();
|
layer.Elements.Clear();
|
||||||
layer.Add(sprite);
|
layer.Add(sprite);
|
||||||
|
|
||||||
return storyboard.CreateDrawable().With(s => s.RelativeSizeAxes = Axes.Both);
|
return new Container
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
storyboard.CreateDrawable()
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertStoryboardSourced()
|
private void assertStoryboardSourced()
|
||||||
@ -202,42 +244,52 @@ namespace osu.Game.Tests.Visual.Gameplay
|
|||||||
return new TestDrawableStoryboard(this, mods);
|
return new TestDrawableStoryboard(this, mods);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AlwaysProvideTexture { get; set; }
|
public bool ProvideResources { get; set; }
|
||||||
|
|
||||||
public override string GetStoragePathFromStoryboardPath(string path) => AlwaysProvideTexture ? path : string.Empty;
|
public override string GetStoragePathFromStoryboardPath(string path) => ProvideResources ? path : string.Empty;
|
||||||
|
|
||||||
private partial class TestDrawableStoryboard : DrawableStoryboard
|
private partial class TestDrawableStoryboard : DrawableStoryboard
|
||||||
{
|
{
|
||||||
private readonly bool alwaysProvideTexture;
|
private readonly bool provideResources;
|
||||||
|
|
||||||
public TestDrawableStoryboard(TestStoryboard storyboard, IReadOnlyList<Mod>? mods)
|
public TestDrawableStoryboard(TestStoryboard storyboard, IReadOnlyList<Mod>? mods)
|
||||||
: base(storyboard, mods)
|
: base(storyboard, mods)
|
||||||
{
|
{
|
||||||
alwaysProvideTexture = storyboard.AlwaysProvideTexture;
|
provideResources = storyboard.ProvideResources;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IResourceStore<byte[]> CreateResourceLookupStore() => alwaysProvideTexture
|
protected override IResourceStore<byte[]> CreateResourceLookupStore() => provideResources
|
||||||
? new AlwaysReturnsTextureStore()
|
? new ResourcesTextureStore()
|
||||||
: new ResourceStore<byte[]>();
|
: new ResourceStore<byte[]>();
|
||||||
|
|
||||||
internal class AlwaysReturnsTextureStore : IResourceStore<byte[]>
|
internal class ResourcesTextureStore : IResourceStore<byte[]>
|
||||||
{
|
{
|
||||||
private const string test_image = "Resources/Textures/test-image.png";
|
|
||||||
|
|
||||||
private readonly DllResourceStore store;
|
private readonly DllResourceStore store;
|
||||||
|
|
||||||
public AlwaysReturnsTextureStore()
|
public ResourcesTextureStore()
|
||||||
{
|
{
|
||||||
store = TestResources.GetStore();
|
store = TestResources.GetStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose() => store.Dispose();
|
public void Dispose() => store.Dispose();
|
||||||
|
|
||||||
public byte[] Get(string name) => store.Get(test_image);
|
public byte[] Get(string name) => store.Get(map(name));
|
||||||
|
|
||||||
public Task<byte[]> GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) => store.GetAsync(test_image, cancellationToken);
|
public Task<byte[]> GetAsync(string name, CancellationToken cancellationToken = new CancellationToken()) => store.GetAsync(map(name), cancellationToken);
|
||||||
|
|
||||||
public Stream GetStream(string name) => store.GetStream(test_image);
|
public Stream GetStream(string name) => store.GetStream(map(name));
|
||||||
|
|
||||||
|
private string map(string name)
|
||||||
|
{
|
||||||
|
switch (name)
|
||||||
|
{
|
||||||
|
case lookup_name:
|
||||||
|
return "Resources/Textures/test-image.png";
|
||||||
|
|
||||||
|
default:
|
||||||
|
return $"Resources/{name}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public IEnumerable<string> GetAvailableResources() => store.GetAvailableResources();
|
public IEnumerable<string> GetAvailableResources() => store.GetAvailableResources();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user