UnitTestApplication.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using Avalonia.Input;
  5. using Avalonia.Layout;
  6. using Avalonia.Platform;
  7. using Avalonia.Styling;
  8. using Avalonia.Controls;
  9. using Avalonia.Rendering;
  10. using Avalonia.Threading;
  11. using System.Reactive.Disposables;
  12. using System.Reactive.Concurrency;
  13. using Avalonia.Input.Platform;
  14. using Avalonia.Animation;
  15. namespace Avalonia.UnitTests
  16. {
  17. public class UnitTestApplication : Application
  18. {
  19. private readonly TestServices _services;
  20. public UnitTestApplication() : this(null)
  21. {
  22. }
  23. public UnitTestApplication(TestServices services)
  24. {
  25. _services = services ?? new TestServices();
  26. RegisterServices();
  27. }
  28. public static new UnitTestApplication Current => (UnitTestApplication)Application.Current;
  29. public TestServices Services => _services;
  30. public static IDisposable Start(TestServices services = null)
  31. {
  32. var scope = AvaloniaLocator.EnterScope();
  33. var app = new UnitTestApplication(services);
  34. AvaloniaLocator.CurrentMutable.BindToSelf<Application>(app);
  35. Dispatcher.UIThread.UpdateServices();
  36. return Disposable.Create(() =>
  37. {
  38. scope.Dispose();
  39. Dispatcher.UIThread.UpdateServices();
  40. });
  41. }
  42. public override void RegisterServices()
  43. {
  44. AvaloniaLocator.CurrentMutable
  45. .Bind<IAssetLoader>().ToConstant(Services.AssetLoader)
  46. .Bind<IFocusManager>().ToConstant(Services.FocusManager)
  47. .Bind<IGlobalClock>().ToConstant(Services.GlobalClock)
  48. .BindToSelf<IGlobalStyles>(this)
  49. .Bind<IInputManager>().ToConstant(Services.InputManager)
  50. .Bind<IKeyboardDevice>().ToConstant(Services.KeyboardDevice?.Invoke())
  51. .Bind<IKeyboardNavigationHandler>().ToConstant(Services.KeyboardNavigation)
  52. .Bind<IMouseDevice>().ToConstant(Services.MouseDevice?.Invoke())
  53. .Bind<IRuntimePlatform>().ToConstant(Services.Platform)
  54. .Bind<IPlatformRenderInterface>().ToConstant(Services.RenderInterface)
  55. .Bind<IPlatformThreadingInterface>().ToConstant(Services.ThreadingInterface)
  56. .Bind<IScheduler>().ToConstant(Services.Scheduler)
  57. .Bind<IStandardCursorFactory>().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. }