DesktopStyleApplicationLifetimeTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Collections.Generic;
  3. using Avalonia.Controls.ApplicationLifetimes;
  4. using Avalonia.Threading;
  5. using Avalonia.UnitTests;
  6. using Xunit;
  7. namespace Avalonia.Controls.UnitTests
  8. {
  9. public class DesktopStyleApplicationLifetimeTests
  10. {
  11. [Fact]
  12. public void Should_Set_ExitCode_After_Shutdown()
  13. {
  14. using (UnitTestApplication.Start(TestServices.MockThreadingInterface))
  15. {
  16. var lifetime = new ClassicDesktopStyleApplicationLifetime(Application.Current);
  17. Dispatcher.UIThread.InvokeAsync(() => lifetime.Shutdown(1337));
  18. lifetime.Shutdown(1337);
  19. var exitCode = lifetime.Start(Array.Empty<string>());
  20. Assert.Equal(1337, exitCode);
  21. }
  22. }
  23. [Fact]
  24. public void Should_Close_All_Remaining_Open_Windows_After_Explicit_Exit_Call()
  25. {
  26. using (UnitTestApplication.Start(TestServices.StyledWindow))
  27. {
  28. var windows = new List<Window> { new Window(), new Window(), new Window(), new Window() };
  29. foreach (var window in windows)
  30. {
  31. window.Show();
  32. }
  33. new ClassicDesktopStyleApplicationLifetime(Application.Current).Shutdown();
  34. Assert.Empty(Application.Current.Windows);
  35. }
  36. }
  37. [Fact]
  38. public void Should_Only_Exit_On_Explicit_Exit()
  39. {
  40. using (UnitTestApplication.Start(TestServices.StyledWindow))
  41. {
  42. var lifetime = new ClassicDesktopStyleApplicationLifetime(Application.Current);
  43. lifetime.ShutdownMode = ShutdownMode.OnExplicitShutdown;
  44. var hasExit = false;
  45. lifetime.Exit += (s, e) => hasExit = true;
  46. var windowA = new Window();
  47. windowA.Show();
  48. var windowB = new Window();
  49. windowB.Show();
  50. windowA.Close();
  51. Assert.False(hasExit);
  52. windowB.Close();
  53. Assert.False(hasExit);
  54. lifetime.Shutdown();
  55. Assert.True(hasExit);
  56. }
  57. }
  58. [Fact]
  59. public void Should_Exit_After_MainWindow_Closed()
  60. {
  61. using (UnitTestApplication.Start(TestServices.StyledWindow))
  62. {
  63. var lifetime = new ClassicDesktopStyleApplicationLifetime(Application.Current);
  64. lifetime.ShutdownMode = ShutdownMode.OnMainWindowClose;
  65. var hasExit = false;
  66. lifetime.Exit += (s, e) => hasExit = true;
  67. var mainWindow = new Window();
  68. mainWindow.Show();
  69. lifetime.MainWindow = mainWindow;
  70. var window = new Window();
  71. window.Show();
  72. mainWindow.Close();
  73. Assert.True(hasExit);
  74. }
  75. }
  76. [Fact]
  77. public void Should_Exit_After_Last_Window_Closed()
  78. {
  79. using (UnitTestApplication.Start(TestServices.StyledWindow))
  80. {
  81. var lifetime = new ClassicDesktopStyleApplicationLifetime(Application.Current);
  82. lifetime.ShutdownMode = ShutdownMode.OnLastWindowClose;
  83. var hasExit = false;
  84. lifetime.Exit += (s, e) => hasExit = true;
  85. var windowA = new Window();
  86. windowA.Show();
  87. var windowB = new Window();
  88. windowB.Show();
  89. windowA.Close();
  90. Assert.False(hasExit);
  91. windowB.Close();
  92. Assert.True(hasExit);
  93. }
  94. }
  95. }
  96. }