Browse Source

Add failing integration test on macOS.

Hiding a child window, and then clicking on the parent window causes the child window to be erroneously re-shown.
Steven Kirk 3 years ago
parent
commit
eb8ddef412

+ 1 - 0
samples/IntegrationTestApp/MainWindow.axaml.cs

@@ -99,6 +99,7 @@ namespace IntegrationTestApp
 
             foreach (var window in lifetime.Windows)
             {
+                window.Show();
                 if (window.WindowState == WindowState.Minimized)
                     window.WindowState = WindowState.Normal;
             }

+ 2 - 1
samples/IntegrationTestApp/ShowWindowTest.axaml

@@ -3,7 +3,7 @@
         x:Class="IntegrationTestApp.ShowWindowTest"
         Name="SecondaryWindow"
         Title="Show Window Test">
-  <Grid ColumnDefinitions="Auto,Auto" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
+  <Grid ColumnDefinitions="Auto,Auto" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto">
     <Label Grid.Column="0" Grid.Row="1">Client Size</Label>
     <TextBox Name="ClientSize" Grid.Column="1" Grid.Row="1" IsReadOnly="True"
              Text="{Binding ClientSize, Mode=OneWay}"/>
@@ -31,5 +31,6 @@
       <ComboBoxItem>Maximized</ComboBoxItem>
       <ComboBoxItem>Fullscreen</ComboBoxItem>
     </ComboBox>
+    <Button Name="HideButton" Grid.Row="8" Command="{Binding $parent[Window].Hide}">Hide</Button>
   </Grid>
 </Window>

+ 29 - 0
tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs

@@ -211,6 +211,35 @@ namespace Avalonia.IntegrationTests.Appium
             }
         }
 
+        [PlatformFact(TestPlatforms.MacOS)]
+        public void Hidden_Child_Window_Is_Not_Reshown_When_Parent_Clicked()
+        {
+            var mainWindow = _session.FindElementByAccessibilityId("MainWindow");
+
+            // We don't use dispose to close the window here, because it seems that hiding and re-showing a window
+            // causes Appium to think it's a different window.
+            OpenWindow(null, ShowWindowMode.Owned, WindowStartupLocation.Manual);
+            
+            var secondaryWindow = FindWindow(_session, "SecondaryWindow");
+            var hideButton = secondaryWindow.FindElementByAccessibilityId("HideButton");
+
+            hideButton.Click();
+                
+            var windows = _session.FindElementsByXPath("XCUIElementTypeWindow");
+            Assert.Single(windows);
+                
+            mainWindow.Click();
+                
+            windows = _session.FindElementsByXPath("XCUIElementTypeWindow");
+            Assert.Single(windows);
+                
+            _session.FindElementByAccessibilityId("RestoreAll").Click();
+
+            // Close the window manually.
+            secondaryWindow = FindWindow(_session, "SecondaryWindow");
+            secondaryWindow.GetChromeButtons().close.Click();
+        }
+
         private IDisposable OpenWindow(PixelSize? size, ShowWindowMode mode, WindowStartupLocation location)
         {
             var sizeTextBox = _session.FindElementByAccessibilityId("ShowWindowSize");