AppBuilderTests.cs 4.0 KB

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