DesktopStyleApplicationLifetimeTests.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using System;
  2. using System.Collections.Generic;
  3. using Avalonia.Controls.ApplicationLifetimes;
  4. using Avalonia.Platform;
  5. using Avalonia.Threading;
  6. using Avalonia.UnitTests;
  7. using Moq;
  8. using Xunit;
  9. namespace Avalonia.Controls.UnitTests
  10. {
  11. public class DesktopStyleApplicationLifetimeTests
  12. {
  13. [Fact]
  14. public void Should_Set_ExitCode_After_Shutdown()
  15. {
  16. using (UnitTestApplication.Start(TestServices.MockThreadingInterface))
  17. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  18. {
  19. lifetime.Shutdown(1337);
  20. var exitCode = lifetime.Start(Array.Empty<string>());
  21. Assert.Equal(1337, exitCode);
  22. }
  23. }
  24. [Fact]
  25. public void Should_Close_All_Remaining_Open_Windows_After_Explicit_Exit_Call()
  26. {
  27. using (UnitTestApplication.Start(TestServices.StyledWindow))
  28. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  29. {
  30. var windows = new List<Window> { new Window(), new Window(), new Window(), new Window() };
  31. foreach (var window in windows)
  32. {
  33. window.Show();
  34. }
  35. Assert.Equal(4, lifetime.Windows.Count);
  36. lifetime.Shutdown();
  37. Assert.Empty(lifetime.Windows);
  38. }
  39. }
  40. [Fact]
  41. public void Should_Only_Exit_On_Explicit_Exit()
  42. {
  43. using (UnitTestApplication.Start(TestServices.StyledWindow))
  44. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  45. {
  46. lifetime.ShutdownMode = ShutdownMode.OnExplicitShutdown;
  47. var hasExit = false;
  48. lifetime.Exit += (s, e) => hasExit = true;
  49. var windowA = new Window();
  50. windowA.Show();
  51. var windowB = new Window();
  52. windowB.Show();
  53. windowA.Close();
  54. Assert.False(hasExit);
  55. windowB.Close();
  56. Assert.False(hasExit);
  57. lifetime.Shutdown();
  58. Assert.True(hasExit);
  59. }
  60. }
  61. [Fact]
  62. public void Should_Exit_After_MainWindow_Closed()
  63. {
  64. using (UnitTestApplication.Start(TestServices.StyledWindow))
  65. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  66. {
  67. lifetime.ShutdownMode = ShutdownMode.OnMainWindowClose;
  68. var hasExit = false;
  69. lifetime.Exit += (s, e) => hasExit = true;
  70. var mainWindow = new Window();
  71. mainWindow.Show();
  72. lifetime.MainWindow = mainWindow;
  73. var window = new Window();
  74. window.Show();
  75. mainWindow.Close();
  76. Assert.True(hasExit);
  77. }
  78. }
  79. [Fact]
  80. public void Should_Exit_After_Last_Window_Closed()
  81. {
  82. using (UnitTestApplication.Start(TestServices.StyledWindow))
  83. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  84. {
  85. lifetime.ShutdownMode = ShutdownMode.OnLastWindowClose;
  86. var hasExit = false;
  87. lifetime.Exit += (s, e) => hasExit = true;
  88. var windowA = new Window();
  89. windowA.Show();
  90. var windowB = new Window();
  91. windowB.Show();
  92. windowA.Close();
  93. Assert.False(hasExit);
  94. windowB.Close();
  95. Assert.True(hasExit);
  96. }
  97. }
  98. [Fact]
  99. public void Show_Should_Add_Window_To_OpenWindows()
  100. {
  101. using (UnitTestApplication.Start(TestServices.StyledWindow))
  102. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  103. {
  104. var window = new Window();
  105. window.Show();
  106. Assert.Equal(new[] { window }, lifetime.Windows);
  107. }
  108. }
  109. [Fact]
  110. public void Window_Should_Be_Added_To_OpenWindows_Only_Once()
  111. {
  112. using (UnitTestApplication.Start(TestServices.StyledWindow))
  113. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  114. {
  115. var window = new Window();
  116. window.Show();
  117. window.Show();
  118. window.IsVisible = true;
  119. Assert.Equal(new[] { window }, lifetime.Windows);
  120. window.Close();
  121. }
  122. }
  123. [Fact]
  124. public void Close_Should_Remove_Window_From_OpenWindows()
  125. {
  126. using (UnitTestApplication.Start(TestServices.StyledWindow))
  127. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  128. {
  129. var window = new Window();
  130. window.Show();
  131. Assert.Equal(1, lifetime.Windows.Count);
  132. window.Close();
  133. Assert.Empty(lifetime.Windows);
  134. }
  135. }
  136. [Fact]
  137. public void Impl_Closing_Should_Remove_Window_From_OpenWindows()
  138. {
  139. var windowImpl = new Mock<IWindowImpl>();
  140. windowImpl.SetupProperty(x => x.Closed);
  141. windowImpl.Setup(x => x.DesktopScaling).Returns(1);
  142. windowImpl.Setup(x => x.RenderScaling).Returns(1);
  143. var services = TestServices.StyledWindow.With(
  144. windowingPlatform: new MockWindowingPlatform(() => windowImpl.Object));
  145. using (UnitTestApplication.Start(services))
  146. using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
  147. {
  148. var window = new Window();
  149. window.Show();
  150. Assert.Equal(1, lifetime.Windows.Count);
  151. windowImpl.Object.Closed();
  152. Assert.Empty(lifetime.Windows);
  153. }
  154. }
  155. }
  156. }