AppBuilderTests.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using Avalonia.Controls.UnitTests;
  3. using Avalonia.Platform;
  4. using Xunit;
  5. [assembly: ExportAvaloniaModule("DefaultModule", typeof(AppBuilderTests.DefaultModule))]
  6. [assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.Direct2DModule), ForRenderingSubsystem = "Direct2D1")]
  7. [assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.SkiaModule), ForRenderingSubsystem = "Skia")]
  8. [assembly: ExportAvaloniaModule("RenderingModule", typeof(AppBuilderTests.DefaultRenderingModule))]
  9. namespace Avalonia.Controls.UnitTests
  10. {
  11. using AppBuilder = Avalonia.UnitTests.AppBuilder;
  12. public class AppBuilderTests
  13. {
  14. class App : Application
  15. {
  16. }
  17. public class AppWithDependencies : Application
  18. {
  19. public AppWithDependencies(object dependencyA, object dependencyB)
  20. {
  21. DependencyA = dependencyA;
  22. DependencyB = dependencyB;
  23. }
  24. public object DependencyA { get; }
  25. public object DependencyB { get; }
  26. }
  27. public class DefaultModule
  28. {
  29. public static bool IsLoaded = false;
  30. public DefaultModule()
  31. {
  32. IsLoaded = true;
  33. }
  34. }
  35. public class DefaultRenderingModule
  36. {
  37. public static bool IsLoaded = false;
  38. public DefaultRenderingModule()
  39. {
  40. IsLoaded = true;
  41. }
  42. }
  43. public class Direct2DModule
  44. {
  45. public static bool IsLoaded = false;
  46. public Direct2DModule()
  47. {
  48. IsLoaded = true;
  49. }
  50. }
  51. public class SkiaModule
  52. {
  53. public static bool IsLoaded = false;
  54. public SkiaModule()
  55. {
  56. IsLoaded = true;
  57. }
  58. }
  59. [Fact]
  60. public void UseAppFactory()
  61. {
  62. using (AvaloniaLocator.EnterScope())
  63. {
  64. ResetModuleLoadStates();
  65. Func<AppWithDependencies> appFactory = () => new AppWithDependencies(dependencyA: new object(), dependencyB: new object());
  66. var builder = AppBuilder.Configure<AppWithDependencies>(appFactory)
  67. .UseWindowingSubsystem(() => { })
  68. .UseRenderingSubsystem(() => { })
  69. .UseAvaloniaModules()
  70. .SetupWithoutStarting();
  71. AppWithDependencies app = (AppWithDependencies)builder.Instance;
  72. Assert.NotNull(app.DependencyA);
  73. Assert.NotNull(app.DependencyB);
  74. Assert.True(DefaultModule.IsLoaded);
  75. }
  76. }
  77. [Fact]
  78. public void LoadsDefaultModule()
  79. {
  80. using (AvaloniaLocator.EnterScope())
  81. {
  82. ResetModuleLoadStates();
  83. AppBuilder.Configure<App>()
  84. .UseWindowingSubsystem(() => { })
  85. .UseRenderingSubsystem(() => { })
  86. .UseAvaloniaModules()
  87. .SetupWithoutStarting();
  88. Assert.True(DefaultModule.IsLoaded);
  89. }
  90. }
  91. [Fact]
  92. public void LoadsRenderingModuleWithMatchingRenderingSubsystem()
  93. {
  94. using (AvaloniaLocator.EnterScope())
  95. {
  96. ResetModuleLoadStates();
  97. var builder = AppBuilder.Configure<App>()
  98. .UseWindowingSubsystem(() => { })
  99. .UseRenderingSubsystem(() => { }, "Direct2D1");
  100. builder.UseAvaloniaModules().SetupWithoutStarting();
  101. Assert.False(DefaultRenderingModule.IsLoaded);
  102. Assert.True(Direct2DModule.IsLoaded);
  103. Assert.False(SkiaModule.IsLoaded);
  104. ResetModuleLoadStates();
  105. builder = AppBuilder.Configure<App>()
  106. .UseWindowingSubsystem(() => { })
  107. .UseRenderingSubsystem(() => { }, "Skia");
  108. builder.UseAvaloniaModules().SetupWithoutStarting();
  109. Assert.False(DefaultRenderingModule.IsLoaded);
  110. Assert.False(Direct2DModule.IsLoaded);
  111. Assert.True(SkiaModule.IsLoaded);
  112. }
  113. }
  114. [Fact]
  115. public void LoadsRenderingModuleWithoutDependenciesWhenNoModuleMatches()
  116. {
  117. using (AvaloniaLocator.EnterScope())
  118. {
  119. ResetModuleLoadStates();
  120. var builder = AppBuilder.Configure<App>()
  121. .UseWindowingSubsystem(() => { })
  122. .UseRenderingSubsystem(() => { }, "TBD");
  123. builder.UseAvaloniaModules().SetupWithoutStarting();
  124. Assert.True(DefaultRenderingModule.IsLoaded);
  125. Assert.False(Direct2DModule.IsLoaded);
  126. Assert.False(SkiaModule.IsLoaded);
  127. }
  128. }
  129. private static void ResetModuleLoadStates()
  130. {
  131. DefaultModule.IsLoaded = false;
  132. DefaultRenderingModule.IsLoaded = false;
  133. Direct2DModule.IsLoaded = false;
  134. SkiaModule.IsLoaded = false;
  135. }
  136. }
  137. }