AppBuilderTests.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using Avalonia.Controls.UnitTests;
  2. using Avalonia.Platform;
  3. using Xunit;
  4. [assembly: ExportAvaloniaModule("DefaultModule", typeof(AppBuilderTests.DefaultModule))]
  5. [assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.Direct2DModule), ForRenderingSubsystem = "Direct2D1")]
  6. [assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.SkiaModule), ForRenderingSubsystem = "Skia")]
  7. [assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.DefaultRenderingModule))]
  8. namespace Avalonia.Controls.UnitTests
  9. {
  10. using AppBuilder = Avalonia.UnitTests.AppBuilder;
  11. public class AppBuilderTests
  12. {
  13. class App : Application
  14. {
  15. }
  16. public class DefaultModule
  17. {
  18. public static bool IsLoaded = false;
  19. public DefaultModule()
  20. {
  21. IsLoaded = true;
  22. }
  23. }
  24. public class DefaultRenderingModule
  25. {
  26. public static bool IsLoaded = false;
  27. public DefaultRenderingModule()
  28. {
  29. IsLoaded = true;
  30. }
  31. }
  32. public class Direct2DModule
  33. {
  34. public static bool IsLoaded = false;
  35. public Direct2DModule()
  36. {
  37. IsLoaded = true;
  38. }
  39. }
  40. public class SkiaModule
  41. {
  42. public static bool IsLoaded = false;
  43. public SkiaModule()
  44. {
  45. IsLoaded = true;
  46. }
  47. }
  48. [Fact]
  49. public void LoadsDefaultModule()
  50. {
  51. using (AvaloniaLocator.EnterScope())
  52. {
  53. ResetModuleLoadStates();
  54. AppBuilder.Configure<App>()
  55. .UseWindowingSubsystem(() => { })
  56. .UseRenderingSubsystem(() => { })
  57. .UseAvaloniaModules()
  58. .SetupWithoutStarting();
  59. Assert.True(DefaultModule.IsLoaded);
  60. }
  61. }
  62. [Fact]
  63. public void LoadsRenderingModuleWithMatchingRenderingSubsystem()
  64. {
  65. using (AvaloniaLocator.EnterScope())
  66. {
  67. ResetModuleLoadStates();
  68. var builder = AppBuilder.Configure<App>()
  69. .UseWindowingSubsystem(() => { })
  70. .UseRenderingSubsystem(() => { }, "Direct2D1");
  71. builder.UseAvaloniaModules().SetupWithoutStarting();
  72. Assert.False(DefaultRenderingModule.IsLoaded);
  73. Assert.True(Direct2DModule.IsLoaded);
  74. Assert.False(SkiaModule.IsLoaded);
  75. ResetModuleLoadStates();
  76. builder = AppBuilder.Configure<App>()
  77. .UseWindowingSubsystem(() => { })
  78. .UseRenderingSubsystem(() => { }, "Skia");
  79. builder.UseAvaloniaModules().SetupWithoutStarting();
  80. Assert.False(DefaultRenderingModule.IsLoaded);
  81. Assert.False(Direct2DModule.IsLoaded);
  82. Assert.True(SkiaModule.IsLoaded);
  83. }
  84. }
  85. [Fact]
  86. public void LoadsRenderingModuleWithoutDependenciesWhenNoModuleMatches()
  87. {
  88. using (AvaloniaLocator.EnterScope())
  89. {
  90. ResetModuleLoadStates();
  91. var builder = AppBuilder.Configure<App>()
  92. .UseWindowingSubsystem(() => { })
  93. .UseRenderingSubsystem(() => { }, "TBD");
  94. builder.UseAvaloniaModules().SetupWithoutStarting();
  95. Assert.True(DefaultRenderingModule.IsLoaded);
  96. Assert.False(Direct2DModule.IsLoaded);
  97. Assert.False(SkiaModule.IsLoaded);
  98. }
  99. }
  100. private static void ResetModuleLoadStates()
  101. {
  102. DefaultModule.IsLoaded = false;
  103. DefaultRenderingModule.IsLoaded = false;
  104. Direct2DModule.IsLoaded = false;
  105. SkiaModule.IsLoaded = false;
  106. }
  107. }
  108. }