|
|
|
@ -6,6 +6,8 @@ using Avalonia.Markup.Xaml; |
|
|
|
using Avalonia.Platform; |
|
|
|
using Avalonia.Rendering; |
|
|
|
using Avalonia.UnitTests; |
|
|
|
using Avalonia.VisualTree; |
|
|
|
|
|
|
|
using Moq; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
@ -128,12 +130,10 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
{ |
|
|
|
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); |
|
|
|
popupImpl.Setup(x => x.Show(true)).Verifiable(); |
|
|
|
popupImpl.Setup(x => x.Hide()).Verifiable(); |
|
|
|
|
|
|
|
var window = new Window(windowImpl.Object); |
|
|
|
var window = PreparedWindow(); |
|
|
|
window.Width = 100; |
|
|
|
window.Height = 100; |
|
|
|
|
|
|
|
@ -160,12 +160,15 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
button.ContextMenu = c; |
|
|
|
c.Open(button); |
|
|
|
|
|
|
|
var e = CreatePointerPressedEventArgs(window, new Point(90, 90)); |
|
|
|
var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window); |
|
|
|
overlay.RaiseEvent(e); |
|
|
|
_mouse.Down(overlay, MouseButton.Left, new Point(90, 90)); |
|
|
|
_mouse.Up(button, MouseButton.Left, new Point(90, 90)); |
|
|
|
|
|
|
|
Assert.Equal(1, tracker); |
|
|
|
Assert.True(c.IsOpen); |
|
|
|
|
|
|
|
popupImpl.Verify(x => x.Hide(), Times.Never); |
|
|
|
popupImpl.Verify(x => x.Show(true), Times.Exactly(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -174,12 +177,10 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
{ |
|
|
|
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); |
|
|
|
popupImpl.Setup(x => x.Show(true)).Verifiable(); |
|
|
|
popupImpl.Setup(x => x.Hide()).Verifiable(); |
|
|
|
|
|
|
|
var window = new Window(windowImpl.Object); |
|
|
|
var window = PreparedWindow(); |
|
|
|
window.Width = 100; |
|
|
|
window.Height = 100; |
|
|
|
|
|
|
|
@ -199,11 +200,13 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
c.PlacementMode = PlacementMode.Bottom; |
|
|
|
c.Open(button); |
|
|
|
|
|
|
|
var e = CreatePointerPressedEventArgs(window, new Point(90, 90)); |
|
|
|
var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window); |
|
|
|
overlay.RaiseEvent(e); |
|
|
|
_mouse.Down(overlay, MouseButton.Left, new Point(90, 90)); |
|
|
|
_mouse.Up(button, MouseButton.Left, new Point(90, 90)); |
|
|
|
|
|
|
|
Assert.False(c.IsOpen); |
|
|
|
popupImpl.Verify(x => x.Hide(), Times.Exactly(1)); |
|
|
|
popupImpl.Verify(x => x.Show(true), Times.Exactly(1)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -221,15 +224,17 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
ContextMenu = sut |
|
|
|
}; |
|
|
|
|
|
|
|
var window = new Window {Content = target}; |
|
|
|
var window = PreparedWindow(target); |
|
|
|
window.ApplyTemplate(); |
|
|
|
window.Presenter.ApplyTemplate(); |
|
|
|
var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window); |
|
|
|
|
|
|
|
_mouse.Click(target, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
|
|
|
|
_mouse.Click(target); |
|
|
|
_mouse.Down(overlay); |
|
|
|
_mouse.Up(target); |
|
|
|
|
|
|
|
Assert.False(sut.IsOpen); |
|
|
|
popupImpl.Verify(x => x.Show(true), Times.Once); |
|
|
|
@ -251,15 +256,16 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
ContextMenu = sut |
|
|
|
}; |
|
|
|
|
|
|
|
var window = new Window {Content = target}; |
|
|
|
var window = PreparedWindow(target); |
|
|
|
window.ApplyTemplate(); |
|
|
|
window.Presenter.ApplyTemplate(); |
|
|
|
var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window); |
|
|
|
|
|
|
|
_mouse.Click(target, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
|
|
|
|
_mouse.Click(target, MouseButton.Right); |
|
|
|
_mouse.Down(overlay, MouseButton.Right); |
|
|
|
_mouse.Up(target, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
popupImpl.Verify(x => x.Hide(), Times.Once); |
|
|
|
@ -293,12 +299,10 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
|
|
|
|
_mouse.Click(target2, MouseButton.Left); |
|
|
|
|
|
|
|
Assert.False(sut.IsOpen); |
|
|
|
|
|
|
|
sp.Children.Remove(target1); |
|
|
|
|
|
|
|
|
|
|
|
Assert.False(sut.IsOpen); |
|
|
|
|
|
|
|
_mouse.Click(target2, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
@ -439,17 +443,20 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
{ |
|
|
|
ContextMenu = sut |
|
|
|
}; |
|
|
|
|
|
|
|
var window = new Window {Content = target}; |
|
|
|
window.ApplyTemplate(); |
|
|
|
|
|
|
|
var window = PreparedWindow(target); |
|
|
|
var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window); |
|
|
|
|
|
|
|
sut.ContextMenuClosing += (c, e) => { eventCalled = true; e.Cancel = true; }; |
|
|
|
|
|
|
|
window.Show(); |
|
|
|
|
|
|
|
_mouse.Click(target, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
|
|
|
|
_mouse.Click(target, MouseButton.Right); |
|
|
|
_mouse.Down(overlay, MouseButton.Right); |
|
|
|
_mouse.Up(target, MouseButton.Right); |
|
|
|
|
|
|
|
Assert.True(eventCalled); |
|
|
|
Assert.True(sut.IsOpen); |
|
|
|
@ -459,6 +466,18 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private Window PreparedWindow(object content = null) |
|
|
|
{ |
|
|
|
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 w = new Window(windowImpl.Object) { Content = content }; |
|
|
|
w.ApplyTemplate(); |
|
|
|
return w; |
|
|
|
} |
|
|
|
|
|
|
|
private IDisposable Application() |
|
|
|
{ |
|
|
|
var screen = new PixelRect(new PixelPoint(), new PixelSize(100, 100)); |
|
|
|
@ -480,18 +499,5 @@ 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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|