UnitTestApplication.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System;
  2. using Avalonia.Input;
  3. using Avalonia.Layout;
  4. using Avalonia.Platform;
  5. using Avalonia.Styling;
  6. using Avalonia.Controls;
  7. using Avalonia.Rendering;
  8. using Avalonia.Threading;
  9. using System.Reactive.Disposables;
  10. using System.Reactive.Concurrency;
  11. using Avalonia.Input.Platform;
  12. using Avalonia.Animation;
  13. namespace Avalonia.UnitTests
  14. {
  15. public class UnitTestApplication : Application
  16. {
  17. private readonly TestServices _services;
  18. public UnitTestApplication() : this(null)
  19. {
  20. }
  21. public UnitTestApplication(TestServices services)
  22. {
  23. _services = services ?? new TestServices();
  24. AvaloniaLocator.CurrentMutable.BindToSelf<Application>(this);
  25. RegisterServices();
  26. }
  27. public static new UnitTestApplication Current => (UnitTestApplication)Application.Current;
  28. public TestServices Services => _services;
  29. public static IDisposable Start(TestServices services = null)
  30. {
  31. var scope = AvaloniaLocator.EnterScope();
  32. var app = new UnitTestApplication(services);
  33. Dispatcher.UIThread.UpdateServices();
  34. return Disposable.Create(() =>
  35. {
  36. scope.Dispose();
  37. Dispatcher.UIThread.UpdateServices();
  38. });
  39. }
  40. public override void RegisterServices()
  41. {
  42. AvaloniaLocator.CurrentMutable
  43. .Bind<IAssetLoader>().ToConstant(Services.AssetLoader)
  44. .Bind<IFocusManager>().ToConstant(Services.FocusManager)
  45. .Bind<IGlobalClock>().ToConstant(Services.GlobalClock)
  46. .BindToSelf<IGlobalStyles>(this)
  47. .Bind<IInputManager>().ToConstant(Services.InputManager)
  48. .Bind<IKeyboardDevice>().ToConstant(Services.KeyboardDevice?.Invoke())
  49. .Bind<IKeyboardNavigationHandler>().ToConstant(Services.KeyboardNavigation)
  50. .Bind<IMouseDevice>().ToConstant(Services.MouseDevice?.Invoke())
  51. .Bind<IRuntimePlatform>().ToConstant(Services.Platform)
  52. .Bind<IPlatformRenderInterface>().ToConstant(Services.RenderInterface)
  53. .Bind<IFontManagerImpl>().ToConstant(Services.FontManagerImpl)
  54. .Bind<ITextShaperImpl>().ToConstant(Services.TextShaperImpl)
  55. .Bind<IPlatformThreadingInterface>().ToConstant(Services.ThreadingInterface)
  56. .Bind<IScheduler>().ToConstant(Services.Scheduler)
  57. .Bind<ICursorFactory>().ToConstant(Services.StandardCursorFactory)
  58. .Bind<IStyler>().ToConstant(Services.Styler)
  59. .Bind<IWindowingPlatform>().ToConstant(Services.WindowingPlatform)
  60. .Bind<PlatformHotkeyConfiguration>().ToSingleton<PlatformHotkeyConfiguration>();
  61. var styles = Services.Theme?.Invoke();
  62. if (styles != null)
  63. {
  64. Styles.AddRange(styles);
  65. }
  66. }
  67. }
  68. }