Browse Source
Merge branch 'master' into refactor-pointerover
pull/7905/head
Max Katz
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with
26 additions and
12 deletions
-
nukebuild/Build.cs
-
src/Avalonia.PlatformSupport/AssetLoader.cs
-
src/Avalonia.PlatformSupport/Avalonia.PlatformSupport.csproj
-
src/Avalonia.PlatformSupport/Internal/AssemblyDescriptor.cs
-
src/Avalonia.PlatformSupport/Internal/AssemblyDescriptorResolver.cs
-
tests/Avalonia.PlatformSupport.UnitTests/AssetLoaderTests.cs
|
|
|
@ -221,6 +221,7 @@ partial class Build : NukeBuild |
|
|
|
RunCoreTest("Avalonia.Markup.Xaml.UnitTests"); |
|
|
|
RunCoreTest("Avalonia.Skia.UnitTests"); |
|
|
|
RunCoreTest("Avalonia.ReactiveUI.UnitTests"); |
|
|
|
RunCoreTest("Avalonia.PlatformSupport.UnitTests"); |
|
|
|
}); |
|
|
|
|
|
|
|
Target RunRenderTests => _ => _ |
|
|
|
|
|
|
|
@ -14,14 +14,14 @@ namespace Avalonia.PlatformSupport |
|
|
|
/// </summary>
|
|
|
|
public class AssetLoader : IAssetLoader |
|
|
|
{ |
|
|
|
private static AssemblyDescriptorResolver s_assemblyDescriptorResolver = new(); |
|
|
|
private static IAssemblyDescriptorResolver s_assemblyDescriptorResolver = new AssemblyDescriptorResolver(); |
|
|
|
|
|
|
|
private AssemblyDescriptor? _defaultResmAssembly; |
|
|
|
|
|
|
|
/// <remarks>
|
|
|
|
/// Introduced for tests.
|
|
|
|
/// </remarks>
|
|
|
|
internal static void SetAssemblyDescriptorResolver(AssemblyDescriptorResolver resolver) => |
|
|
|
internal static void SetAssemblyDescriptorResolver(IAssemblyDescriptorResolver resolver) => |
|
|
|
s_assemblyDescriptorResolver = resolver; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -182,13 +182,13 @@ namespace Avalonia.PlatformSupport |
|
|
|
throw new ArgumentException($"Unsupported url type: " + uri.Scheme, nameof(uri)); |
|
|
|
} |
|
|
|
|
|
|
|
private (AssemblyDescriptor asm, string path) GetResAsmAndPath(Uri uri) |
|
|
|
private (IAssemblyDescriptor asm, string path) GetResAsmAndPath(Uri uri) |
|
|
|
{ |
|
|
|
var asm = s_assemblyDescriptorResolver.GetAssembly(uri.Authority); |
|
|
|
return (asm, uri.GetUnescapeAbsolutePath()); |
|
|
|
} |
|
|
|
|
|
|
|
private AssemblyDescriptor? GetAssembly(Uri? uri) |
|
|
|
private IAssemblyDescriptor? GetAssembly(Uri? uri) |
|
|
|
{ |
|
|
|
if (uri != null) |
|
|
|
{ |
|
|
|
|
|
|
|
@ -19,6 +19,6 @@ |
|
|
|
|
|
|
|
<ItemGroup> |
|
|
|
<InternalsVisibleTo Include="$(AssemblyName).UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87" /> |
|
|
|
<InternalsVisibleTo Include="DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1bba1142285fe0419326fb25866ba62c47e6c2b5c1ab0c95b46413fad375471232cb81706932e1cef38781b9ebd39d5100401bacb651c6c5bbf59e571e81b3bc08d2a622004e08b1a6ece82a7e0b9857525c86d2b95fab4bc3dce148558d7f3ae61aa3a234086902aeface87d9dfdd32b9d2fe3c6dd4055b5ab4b104998bd87" /> |
|
|
|
<InternalsVisibleTo Include="DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7" /> |
|
|
|
</ItemGroup> |
|
|
|
</Project> |
|
|
|
|
|
|
|
@ -6,7 +6,15 @@ using Avalonia.Utilities; |
|
|
|
|
|
|
|
namespace Avalonia.PlatformSupport.Internal; |
|
|
|
|
|
|
|
internal class AssemblyDescriptor |
|
|
|
internal interface IAssemblyDescriptor |
|
|
|
{ |
|
|
|
Assembly Assembly { get; } |
|
|
|
Dictionary<string, IAssetDescriptor>? Resources { get; } |
|
|
|
Dictionary<string, IAssetDescriptor>? AvaloniaResources { get; } |
|
|
|
string? Name { get; } |
|
|
|
} |
|
|
|
|
|
|
|
internal class AssemblyDescriptor : IAssemblyDescriptor |
|
|
|
{ |
|
|
|
public AssemblyDescriptor(Assembly assembly) |
|
|
|
{ |
|
|
|
|
|
|
|
@ -5,11 +5,16 @@ using System.Reflection; |
|
|
|
|
|
|
|
namespace Avalonia.PlatformSupport.Internal; |
|
|
|
|
|
|
|
internal class AssemblyDescriptorResolver |
|
|
|
internal interface IAssemblyDescriptorResolver |
|
|
|
{ |
|
|
|
private readonly Dictionary<string, AssemblyDescriptor> _assemblyNameCache = new(); |
|
|
|
IAssemblyDescriptor GetAssembly(string name); |
|
|
|
} |
|
|
|
|
|
|
|
internal class AssemblyDescriptorResolver: IAssemblyDescriptorResolver |
|
|
|
{ |
|
|
|
private readonly Dictionary<string, IAssemblyDescriptor> _assemblyNameCache = new(); |
|
|
|
|
|
|
|
public AssemblyDescriptor GetAssembly(string name) |
|
|
|
public IAssemblyDescriptor GetAssembly(string name) |
|
|
|
{ |
|
|
|
if (name == null) |
|
|
|
throw new ArgumentNullException(nameof(name)); |
|
|
|
|
|
|
|
@ -16,7 +16,7 @@ public class AssetLoaderTests |
|
|
|
|
|
|
|
static AssetLoaderTests() |
|
|
|
{ |
|
|
|
var resolver = Mock.Of<AssemblyDescriptorResolver>(); |
|
|
|
var resolver = Mock.Of<IAssemblyDescriptorResolver>(); |
|
|
|
|
|
|
|
var descriptor = CreateAssemblyDescriptor(AssemblyNameWithWhitespace); |
|
|
|
Mock.Get(resolver).Setup(x => x.GetAssembly(AssemblyNameWithWhitespace)).Returns(descriptor); |
|
|
|
@ -49,13 +49,13 @@ public class AssetLoaderTests |
|
|
|
Assert.Equal(AssemblyNameWithNonAscii, assemblyActual?.FullName); |
|
|
|
} |
|
|
|
|
|
|
|
private static AssemblyDescriptor CreateAssemblyDescriptor(string assemblyName) |
|
|
|
private static IAssemblyDescriptor CreateAssemblyDescriptor(string assemblyName) |
|
|
|
{ |
|
|
|
var assembly = Mock.Of<MockAssembly>(); |
|
|
|
Mock.Get(assembly).Setup(x => x.GetName()).Returns(new AssemblyName(assemblyName)); |
|
|
|
Mock.Get(assembly).Setup(x => x.FullName).Returns(assemblyName); |
|
|
|
|
|
|
|
var descriptor = Mock.Of<AssemblyDescriptor>(); |
|
|
|
var descriptor = Mock.Of<IAssemblyDescriptor>(); |
|
|
|
Mock.Get(descriptor).Setup(x => x.Assembly).Returns(assembly); |
|
|
|
return descriptor; |
|
|
|
} |
|
|
|
|