csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.9 KiB
55 lines
1.9 KiB
using System;
|
|
using Avalonia.Rendering;
|
|
using Avalonia.Rendering.Composition;
|
|
using Avalonia.Rendering.Composition.Drawing;
|
|
using Avalonia.Threading;
|
|
using Avalonia.UnitTests;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Base.UnitTests.Media;
|
|
|
|
internal class RenderResourceTestHelper : IDisposable
|
|
{
|
|
public CompositorTestServices Services { get; } = new();
|
|
public Compositor Compositor => Services.Compositor;
|
|
|
|
public void AddToCompositor(ICompositionRenderResource resource) => resource.AddRefOnCompositor(Compositor);
|
|
|
|
public bool IsInvalidated(ICompositorSerializable resource) =>
|
|
Compositor.UnitTestIsRegisteredForSerialization(resource);
|
|
|
|
public void AssertExistsOnCompositor(ICompositorSerializable resource, bool exists = true)
|
|
{
|
|
var server = resource.TryGetServer(Compositor);
|
|
if (exists)
|
|
Assert.NotNull(server);
|
|
else
|
|
Assert.Null(server);
|
|
}
|
|
|
|
public static void AssertResourceInvalidation<T>(T resource, Action cb)
|
|
where T : ICompositionRenderResource, ICompositorSerializable
|
|
{
|
|
using var helper = new RenderResourceTestHelper();
|
|
helper.AssertInvalidation(resource, cb);
|
|
}
|
|
|
|
public void AssertInvalidation<T>(T resource, Action cb)
|
|
where T : ICompositionRenderResource, ICompositorSerializable
|
|
{
|
|
resource.AddRefOnCompositor(Compositor);
|
|
Assert.NotNull(resource.TryGetServer(Compositor));
|
|
Assert.True(Compositor.UnitTestIsRegisteredForSerialization(resource));
|
|
|
|
Compositor.Commit();
|
|
Compositor.Server.Render(false);
|
|
|
|
Assert.False(Compositor.UnitTestIsRegisteredForSerialization(resource));
|
|
cb();
|
|
Assert.True(Compositor.UnitTestIsRegisteredForSerialization(resource));
|
|
resource.ReleaseOnCompositor(Compositor);
|
|
Assert.Null(resource.TryGetServer(Compositor));
|
|
}
|
|
|
|
public void Dispose() => Services.Dispose();
|
|
}
|
|
|