Browse Source
* Try to combine AvaloniaResources with the same system path * Fix test assertrelease/11.1.0-beta2
4 changed files with 152 additions and 15 deletions
@ -0,0 +1,91 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.Text; |
|||
using Avalonia.Utilities; |
|||
using Xunit; |
|||
|
|||
namespace Avalonia.Base.UnitTests; |
|||
|
|||
public class AvaloniaResourcesIndexTests |
|||
{ |
|||
[Fact] |
|||
public void Should_Write_And_Read_The_Same_Resources() |
|||
{ |
|||
using var memoryStream = new MemoryStream(); |
|||
|
|||
var fooBytes = Encoding.UTF8.GetBytes("foo"); |
|||
var booBytes = Encoding.UTF8.GetBytes("boo"); |
|||
AvaloniaResourcesIndexReaderWriter.WriteResources(memoryStream, |
|||
new[] |
|||
{ |
|||
new AvaloniaResourcesEntry |
|||
{ |
|||
Path = "foo.xaml", Size = fooBytes.Length, Open = () => new MemoryStream(fooBytes) |
|||
}, |
|||
new AvaloniaResourcesEntry |
|||
{ |
|||
Path = "boo.xaml", Size = booBytes.Length, Open = () => new MemoryStream(booBytes) |
|||
} |
|||
}); |
|||
|
|||
memoryStream.Seek(4, SeekOrigin.Begin); // skip 4 bytes for "index size" field.
|
|||
|
|||
var index = AvaloniaResourcesIndexReaderWriter.ReadIndex(memoryStream); |
|||
var resourcesBasePosition = memoryStream.Position; |
|||
|
|||
Span<byte> buffer = stackalloc byte[index[0].Size]; |
|||
|
|||
Assert.Equal("foo.xaml", index[0].Path); |
|||
Assert.Equal(0, index[0].Offset); |
|||
Assert.Equal(fooBytes.Length, index[0].Size); |
|||
|
|||
memoryStream.Seek(resourcesBasePosition + index[0].Offset, SeekOrigin.Begin); |
|||
memoryStream.ReadExactly(buffer); |
|||
Assert.Equal(fooBytes, buffer.ToArray()); |
|||
|
|||
Assert.Equal("boo.xaml", index[1].Path); |
|||
Assert.Equal(fooBytes.Length, index[1].Offset); |
|||
Assert.Equal(booBytes.Length, index[1].Size); |
|||
|
|||
memoryStream.Seek(resourcesBasePosition + index[1].Offset, SeekOrigin.Begin); |
|||
memoryStream.ReadExactly(buffer); |
|||
Assert.Equal(booBytes, buffer.ToArray()); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_Combined_Same_Physical_Path_Resources() |
|||
{ |
|||
using var memoryStream = new MemoryStream(); |
|||
|
|||
var resourceBytes = Encoding.UTF8.GetBytes("resource-data"); |
|||
AvaloniaResourcesIndexReaderWriter.WriteResources(memoryStream, new[] |
|||
{ |
|||
new AvaloniaResourcesEntry |
|||
{ |
|||
Path = "app.xaml", |
|||
SystemPath = "app.ico", |
|||
Size = resourceBytes.Length, |
|||
Open = () => new MemoryStream(resourceBytes) |
|||
}, |
|||
new AvaloniaResourcesEntry |
|||
{ |
|||
Path = "!__AvaloniaDefaultWindowIcon", |
|||
SystemPath = "app.ico", |
|||
Size = resourceBytes.Length, |
|||
Open = () => new MemoryStream(resourceBytes) |
|||
} |
|||
}); |
|||
|
|||
memoryStream.Seek(4, SeekOrigin.Begin); // skip 4 bytes for "index size" field.
|
|||
|
|||
var index = AvaloniaResourcesIndexReaderWriter.ReadIndex(memoryStream); |
|||
|
|||
Assert.Equal("app.xaml", index[0].Path); |
|||
Assert.Equal(0, index[0].Offset); |
|||
Assert.Equal(resourceBytes.Length, index[0].Size); |
|||
|
|||
Assert.Equal("!__AvaloniaDefaultWindowIcon", index[1].Path); |
|||
Assert.Equal(0, index[1].Offset); |
|||
Assert.Equal(resourceBytes.Length, index[1].Size); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue