AppBuilderTests.cs 4.0 KB

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