A cross-platform UI framework for .NET
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.
 
 
 

103 lines
3.0 KiB

using Avalonia.Rendering.Composition.Drawing;
using Xunit;
namespace Avalonia.Base.UnitTests.Rendering.SceneGraph
{
public class RenderDataResourcesTests
{
[Fact]
public void Intern_Null_Returns_Null_Handle()
{
var resources = new RenderDataResources();
Assert.Equal(RenderDataResources.NullHandle, resources.Intern(null));
Assert.Equal(0, resources.Count);
}
[Fact]
public void Intern_Same_Reference_Returns_Same_Handle()
{
var resources = new RenderDataResources();
var obj = new object();
var first = resources.Intern(obj);
var second = resources.Intern(obj);
Assert.Equal(first, second);
Assert.Equal(1, resources.Count);
}
[Fact]
public void Intern_Distinct_References_Return_Distinct_Handles()
{
var resources = new RenderDataResources();
var a = resources.Intern(new object());
var b = resources.Intern(new object());
Assert.NotEqual(a, b);
Assert.Equal(2, resources.Count);
}
[Fact]
public void Intern_Equal_But_Distinct_References_Return_Distinct_Handles()
{
var resources = new RenderDataResources();
var a = resources.Intern(new EqualByValue());
var b = resources.Intern(new EqualByValue());
Assert.NotEqual(a, b);
Assert.Equal(2, resources.Count);
}
[Fact]
public void Indexer_Returns_Interned_Resource()
{
var resources = new RenderDataResources();
var obj = new object();
var handle = resources.Intern(obj);
Assert.Same(obj, resources[handle]);
}
[Fact]
public void Indexer_Null_Handle_Returns_Null()
{
var resources = new RenderDataResources();
resources.Intern(new object());
Assert.Null(resources[RenderDataResources.NullHandle]);
}
[Fact]
public void AppendDeserialized_Appends_Without_Deduplication()
{
var resources = new RenderDataResources();
var obj = new object();
var first = resources.AppendDeserialized(obj);
var second = resources.AppendDeserialized(obj);
Assert.NotEqual(first, second);
Assert.Equal(2, resources.Count);
Assert.Same(obj, resources[first]);
Assert.Same(obj, resources[second]);
}
[Fact]
public void Dispose_Resets_The_Table()
{
var resources = new RenderDataResources();
resources.Intern(new object());
resources.Dispose();
Assert.Equal(0, resources.Count);
}
private sealed class EqualByValue
{
public override bool Equals(object? obj) => obj is EqualByValue;
public override int GetHashCode() => 1;
}
}
}