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