| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- 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);
- }
- }
|