ApplicationTests.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 System.Collections.Generic;
  5. using Avalonia.UnitTests;
  6. using Xunit;
  7. namespace Avalonia.Controls.UnitTests
  8. {
  9. public class ApplicationTests
  10. {
  11. [Fact]
  12. public void Should_Exit_After_MainWindow_Closed()
  13. {
  14. using (UnitTestApplication.Start(TestServices.StyledWindow))
  15. {
  16. Application.Current.ExitMode = ExitMode.OnMainWindowClose;
  17. var mainWindow = new Window();
  18. mainWindow.Show();
  19. Application.Current.MainWindow = mainWindow;
  20. var window = new Window();
  21. window.Show();
  22. mainWindow.Close();
  23. Assert.True(Application.Current.IsExiting);
  24. }
  25. }
  26. [Fact]
  27. public void Should_Exit_After_Last_Window_Closed()
  28. {
  29. using (UnitTestApplication.Start(TestServices.StyledWindow))
  30. {
  31. Application.Current.ExitMode = ExitMode.OnLastWindowClose;
  32. var windowA = new Window();
  33. windowA.Show();
  34. var windowB = new Window();
  35. windowB.Show();
  36. windowA.Close();
  37. Assert.False(Application.Current.IsExiting);
  38. windowB.Close();
  39. Assert.True(Application.Current.IsExiting);
  40. }
  41. }
  42. [Fact]
  43. public void Should_Only_Exit_On_Explicit_Exit()
  44. {
  45. using (UnitTestApplication.Start(TestServices.StyledWindow))
  46. {
  47. Application.Current.ExitMode = ExitMode.OnExplicitExit;
  48. var windowA = new Window();
  49. windowA.Show();
  50. var windowB = new Window();
  51. windowB.Show();
  52. windowA.Close();
  53. Assert.False(Application.Current.IsExiting);
  54. windowB.Close();
  55. Assert.False(Application.Current.IsExiting);
  56. Application.Current.Exit();
  57. Assert.True(Application.Current.IsExiting);
  58. }
  59. }
  60. [Fact]
  61. public void Should_Close_All_Remaining_Open_Windows_After_Explicit_Exit_Call()
  62. {
  63. using (UnitTestApplication.Start(TestServices.StyledWindow))
  64. {
  65. var windows = new List<Window> { new Window(), new Window(), new Window(), new Window() };
  66. foreach (var window in windows)
  67. {
  68. window.Show();
  69. }
  70. Application.Current.Exit();
  71. Assert.Empty(Application.Current.Windows);
  72. }
  73. }
  74. [Fact]
  75. public void Throws_ArgumentNullException_On_Run_If_MainWindow_Is_Null()
  76. {
  77. using (UnitTestApplication.Start(TestServices.StyledWindow))
  78. {
  79. Assert.Throws<ArgumentNullException>(() => { Application.Current.Run(null); });
  80. }
  81. }
  82. [Fact]
  83. public void Raises_ResourcesChanged_When_Event_Handler_Added_After_Resources_Has_Been_Accessed()
  84. {
  85. // Test for #1765.
  86. using (UnitTestApplication.Start())
  87. {
  88. var resources = Application.Current.Resources;
  89. var raised = false;
  90. Application.Current.ResourcesChanged += (s, e) => raised = true;
  91. resources["foo"] = "bar";
  92. Assert.True(raised);
  93. }
  94. }
  95. }
  96. }