5 changed files with 189 additions and 13 deletions
@ -0,0 +1,20 @@ |
|||
using System; |
|||
|
|||
namespace Avalonia.Platform |
|||
{ |
|||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] |
|||
public class ExportAvaloniaModuleAttribute : Attribute |
|||
{ |
|||
public ExportAvaloniaModuleAttribute(string name, Type moduleType) |
|||
{ |
|||
Name = name; |
|||
ModuleType = moduleType; |
|||
} |
|||
|
|||
public string Name { get; private set; } |
|||
public Type ModuleType { get; private set; } |
|||
|
|||
public string RequiredWindowingSubsystem { get; set; } = ""; |
|||
public string RequiredRenderingSubsystem { get; set; } = ""; |
|||
} |
|||
} |
|||
@ -0,0 +1,120 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using Xunit; |
|||
using Avalonia.Controls.UnitTests; |
|||
using Avalonia.Platform; |
|||
|
|||
[assembly: ExportAvaloniaModule("DefaultModule", typeof(AppBuilderTests.DefaultModule))] |
|||
[assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.Direct2DModule), RequiredRenderingSubsystem = "Direct2D1")] |
|||
[assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.SkiaModule), RequiredRenderingSubsystem = "Skia")] |
|||
[assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.DefaultRenderingModule))] |
|||
|
|||
|
|||
namespace Avalonia.Controls.UnitTests |
|||
{ |
|||
|
|||
public class AppBuilderTests |
|||
{ |
|||
class App : Application |
|||
{ |
|||
} |
|||
|
|||
public class DefaultModule |
|||
{ |
|||
public static bool IsLoaded = false; |
|||
public DefaultModule() |
|||
{ |
|||
IsLoaded = true; |
|||
} |
|||
} |
|||
|
|||
public class DefaultRenderingModule |
|||
{ |
|||
public static bool IsLoaded = false; |
|||
public DefaultRenderingModule() |
|||
{ |
|||
IsLoaded = true; |
|||
} |
|||
} |
|||
|
|||
public class Direct2DModule |
|||
{ |
|||
public static bool IsLoaded = false; |
|||
public Direct2DModule() |
|||
{ |
|||
IsLoaded = true; |
|||
} |
|||
} |
|||
|
|||
public class SkiaModule |
|||
{ |
|||
public static bool IsLoaded = false; |
|||
public SkiaModule() |
|||
{ |
|||
IsLoaded = true; |
|||
} |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadsDefaultModule() |
|||
{ |
|||
ResetModuleLoadStates(); |
|||
AppBuilder.Configure<App>() |
|||
.UseWindowingSubsystem(() => { }) |
|||
.UseRenderingSubsystem(() => { }) |
|||
.UseAvaloniaModules() |
|||
.SetupWithoutStarting(); |
|||
|
|||
Assert.True(DefaultModule.IsLoaded); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadsRenderingModuleWithMatchingRenderingSubsystem() |
|||
{ |
|||
ResetModuleLoadStates(); |
|||
var builder = AppBuilder.Configure<App>() |
|||
.UseWindowingSubsystem(() => { }) |
|||
.UseRenderingSubsystem(() => { }); |
|||
builder.RenderingSubsystemName = "Direct2D1"; |
|||
builder.UseAvaloniaModules().SetupWithoutStarting(); |
|||
Assert.False(DefaultRenderingModule.IsLoaded); |
|||
Assert.True(Direct2DModule.IsLoaded); |
|||
Assert.False(SkiaModule.IsLoaded); |
|||
|
|||
ResetModuleLoadStates(); |
|||
builder = AppBuilder.Configure<App>() |
|||
.UseWindowingSubsystem(() => { }) |
|||
.UseRenderingSubsystem(() => { }); |
|||
builder.RenderingSubsystemName = "Skia"; |
|||
builder.UseAvaloniaModules().SetupWithoutStarting(); |
|||
Assert.False(DefaultRenderingModule.IsLoaded); |
|||
Assert.False(Direct2DModule.IsLoaded); |
|||
Assert.True(SkiaModule.IsLoaded); |
|||
} |
|||
|
|||
[Fact] |
|||
public void LoadsRenderingModuleWithoutDependenciesWhenNoModuleMatches() |
|||
{ |
|||
ResetModuleLoadStates(); |
|||
var builder = AppBuilder.Configure<App>() |
|||
.UseWindowingSubsystem(() => { }) |
|||
.UseRenderingSubsystem(() => { }); |
|||
builder.RenderingSubsystemName = "Cairo"; |
|||
builder.UseAvaloniaModules().SetupWithoutStarting(); |
|||
Assert.True(DefaultRenderingModule.IsLoaded); |
|||
Assert.False(Direct2DModule.IsLoaded); |
|||
Assert.False(SkiaModule.IsLoaded); |
|||
} |
|||
|
|||
private static void ResetModuleLoadStates() |
|||
{ |
|||
DefaultModule.IsLoaded = false; |
|||
DefaultRenderingModule.IsLoaded = false; |
|||
Direct2DModule.IsLoaded = false; |
|||
SkiaModule.IsLoaded = false; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue