Browse Source

Add a unit test to show we can now cancel window closing shutdown modes.

Dan Walmsley 3 years ago
parent
commit
00c633ab3d

+ 76 - 2
tests/Avalonia.Controls.UnitTests/DesktopStyleApplicationLifetimeTests.cs

@@ -1,9 +1,7 @@
 using System;
 using System.Collections.Generic;
-using System.ComponentModel;
 using Avalonia.Controls.ApplicationLifetimes;
 using Avalonia.Platform;
-using Avalonia.Threading;
 using Avalonia.UnitTests;
 using Moq;
 using Xunit;
@@ -238,5 +236,81 @@ namespace Avalonia.Controls.UnitTests
                 Assert.Equal(new[] { window }, lifetime.Windows);
             }
         }
+        
+        [Fact]
+        public void MainWindow_Closed_Shutdown_Should_Be_Cancellable()
+        {
+            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
+            {
+                lifetime.ShutdownMode = ShutdownMode.OnMainWindowClose;
+
+                var hasExit = false;
+
+                lifetime.Exit += (s, e) => hasExit = true;
+
+                var mainWindow = new Window();
+
+                mainWindow.Show();
+
+                lifetime.MainWindow = mainWindow;
+
+                var window = new Window();
+
+                window.Show();
+
+                var raised = 0;
+                
+                lifetime.ShutdownRequested += (s, e) =>
+                {
+                    e.Cancel = true;
+                    ++raised;
+                };
+
+                mainWindow.Close();
+                
+                Assert.Equal(1, raised);
+                Assert.False(hasExit);
+            }
+        }
+        
+        [Fact]
+        public void LastWindow_Closed_Shutdown_Should_Be_Cancellable()
+        {
+            using (UnitTestApplication.Start(TestServices.StyledWindow))
+            using(var lifetime = new ClassicDesktopStyleApplicationLifetime())
+            {
+                lifetime.ShutdownMode = ShutdownMode.OnLastWindowClose;
+
+                var hasExit = false;
+
+                lifetime.Exit += (s, e) => hasExit = true;
+
+                var windowA = new Window();
+
+                windowA.Show();
+
+                var windowB = new Window();
+
+                windowB.Show();
+                
+                var raised = 0;
+                
+                lifetime.ShutdownRequested += (s, e) =>
+                {
+                    e.Cancel = true;
+                    ++raised;
+                };
+
+                windowA.Close();
+
+                Assert.False(hasExit);
+
+                windowB.Close();
+
+                Assert.Equal(1, raised);
+                Assert.False(hasExit);
+            }
+        }
     }
 }