|
|
@@ -1,11 +1,11 @@
|
|
|
using System;
|
|
|
+
|
|
|
+using Avalonia.Controls.Primitives;
|
|
|
using Avalonia.Input;
|
|
|
-using Avalonia.LogicalTree;
|
|
|
using Avalonia.Markup.Xaml;
|
|
|
-using Avalonia.Markup.Xaml.MarkupExtensions;
|
|
|
using Avalonia.Platform;
|
|
|
+using Avalonia.Rendering;
|
|
|
using Avalonia.UnitTests;
|
|
|
-using Castle.DynamicProxy.Generators;
|
|
|
using Moq;
|
|
|
using Xunit;
|
|
|
|
|
|
@@ -123,6 +123,90 @@ namespace Avalonia.Controls.UnitTests
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public void Cancel_Light_Dismiss_Closing_Keeps_Flyout_Open()
|
|
|
+ {
|
|
|
+ using (Application())
|
|
|
+ {
|
|
|
+ var renderer = new Mock<IRenderer>();
|
|
|
+ var platform = AvaloniaLocator.Current.GetService<IWindowingPlatform>();
|
|
|
+ var windowImpl = Mock.Get(platform.CreateWindow());
|
|
|
+ windowImpl.Setup(x => x.CreateRenderer(It.IsAny<IRenderRoot>())).Returns(renderer.Object);
|
|
|
+
|
|
|
+ var window = new Window(windowImpl.Object);
|
|
|
+ window.Width = 100;
|
|
|
+ window.Height = 100;
|
|
|
+
|
|
|
+ var button = new Button
|
|
|
+ {
|
|
|
+ Height = 10,
|
|
|
+ Width = 10,
|
|
|
+ HorizontalAlignment = Layout.HorizontalAlignment.Left,
|
|
|
+ VerticalAlignment = Layout.VerticalAlignment.Top
|
|
|
+ };
|
|
|
+ window.Content = button;
|
|
|
+
|
|
|
+ window.ApplyTemplate();
|
|
|
+ window.Show();
|
|
|
+
|
|
|
+ var tracker = 0;
|
|
|
+
|
|
|
+ var c = new ContextMenu();
|
|
|
+ c.ContextMenuClosing += (s, e) =>
|
|
|
+ {
|
|
|
+ tracker++;
|
|
|
+ e.Cancel = true;
|
|
|
+ };
|
|
|
+ button.ContextMenu = c;
|
|
|
+ c.Open(button);
|
|
|
+
|
|
|
+ var e = CreatePointerPressedEventArgs(window, new Point(90, 90));
|
|
|
+ var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
|
|
|
+ overlay.RaiseEvent(e);
|
|
|
+
|
|
|
+ Assert.Equal(1, tracker);
|
|
|
+ Assert.True(c.IsOpen);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ [Fact]
|
|
|
+ public void Light_Dismiss_Closes_Flyout()
|
|
|
+ {
|
|
|
+ using (Application())
|
|
|
+ {
|
|
|
+ var renderer = new Mock<IRenderer>();
|
|
|
+ var platform = AvaloniaLocator.Current.GetService<IWindowingPlatform>();
|
|
|
+ var windowImpl = Mock.Get(platform.CreateWindow());
|
|
|
+ windowImpl.Setup(x => x.CreateRenderer(It.IsAny<IRenderRoot>())).Returns(renderer.Object);
|
|
|
+
|
|
|
+ var window = new Window(windowImpl.Object);
|
|
|
+ window.Width = 100;
|
|
|
+ window.Height = 100;
|
|
|
+
|
|
|
+ var button = new Button
|
|
|
+ {
|
|
|
+ Height = 10,
|
|
|
+ Width = 10,
|
|
|
+ HorizontalAlignment = Layout.HorizontalAlignment.Left,
|
|
|
+ VerticalAlignment = Layout.VerticalAlignment.Top
|
|
|
+ };
|
|
|
+ window.Content = button;
|
|
|
+
|
|
|
+ window.ApplyTemplate();
|
|
|
+ window.Show();
|
|
|
+
|
|
|
+ var c = new ContextMenu();
|
|
|
+ c.PlacementMode = PlacementMode.Bottom;
|
|
|
+ c.Open(button);
|
|
|
+
|
|
|
+ var e = CreatePointerPressedEventArgs(window, new Point(90, 90));
|
|
|
+ var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
|
|
|
+ overlay.RaiseEvent(e);
|
|
|
+
|
|
|
+ Assert.False(c.IsOpen);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
[Fact]
|
|
|
public void Clicking_On_Control_Toggles_ContextMenu()
|
|
|
{
|
|
|
@@ -341,7 +425,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- [Fact(Skip = "The only reason this test was 'passing' before was that the author forgot to call Window.ApplyTemplate()")]
|
|
|
+ [Fact]
|
|
|
public void Cancelling_Closing_Leaves_ContextMenuOpen()
|
|
|
{
|
|
|
using (Application())
|
|
|
@@ -396,5 +480,18 @@ namespace Avalonia.Controls.UnitTests
|
|
|
|
|
|
return UnitTestApplication.Start(services);
|
|
|
}
|
|
|
+
|
|
|
+ private PointerPressedEventArgs CreatePointerPressedEventArgs(Window source, Point p)
|
|
|
+ {
|
|
|
+ var pointer = new Pointer(Pointer.GetNextFreeId(), PointerType.Mouse, true);
|
|
|
+ return new PointerPressedEventArgs(
|
|
|
+ source,
|
|
|
+ pointer,
|
|
|
+ source,
|
|
|
+ p,
|
|
|
+ 0,
|
|
|
+ new PointerPointProperties(RawInputModifiers.None, PointerUpdateKind.LeftButtonPressed),
|
|
|
+ KeyModifiers.None);
|
|
|
+ }
|
|
|
}
|
|
|
}
|