|
|
@ -174,7 +174,7 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerEnter_Opens_Item_When_Old_Item_Is_Open() |
|
|
public void PointerEntered_Opens_Item_When_Old_Item_Is_Open() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = new Mock<IMenu>(); |
|
|
var menu = new Mock<IMenu>(); |
|
|
@ -187,11 +187,11 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
x.IsTopLevel == true && |
|
|
x.IsTopLevel == true && |
|
|
x.HasSubMenu == true && |
|
|
x.HasSubMenu == true && |
|
|
x.Parent == menu.Object); |
|
|
x.Parent == menu.Object); |
|
|
var e = CreateArgs(MenuItem.PointerEnterItemEvent, nextItem); |
|
|
var e = CreateArgs(MenuItem.PointerEnteredItemEvent, nextItem); |
|
|
|
|
|
|
|
|
menu.SetupGet(x => x.SelectedItem).Returns(item); |
|
|
menu.SetupGet(x => x.SelectedItem).Returns(item); |
|
|
|
|
|
|
|
|
target.PointerEnter(nextItem, e); |
|
|
target.PointerEntered(nextItem, e); |
|
|
|
|
|
|
|
|
Mock.Get(item).Verify(x => x.Close()); |
|
|
Mock.Get(item).Verify(x => x.Close()); |
|
|
menu.VerifySet(x => x.SelectedItem = nextItem); |
|
|
menu.VerifySet(x => x.SelectedItem = nextItem); |
|
|
@ -202,31 +202,31 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerLeave_Deselects_Item_When_Menu_Not_Open() |
|
|
public void PointerExited_Deselects_Item_When_Menu_Not_Open() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = new Mock<IMenu>(); |
|
|
var menu = new Mock<IMenu>(); |
|
|
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.Parent == menu.Object); |
|
|
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.Parent == menu.Object); |
|
|
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item); |
|
|
|
|
|
|
|
|
menu.SetupGet(x => x.SelectedItem).Returns(item); |
|
|
menu.SetupGet(x => x.SelectedItem).Returns(item); |
|
|
target.PointerLeave(item, e); |
|
|
target.PointerExited(item, e); |
|
|
|
|
|
|
|
|
menu.VerifySet(x => x.SelectedItem = null); |
|
|
menu.VerifySet(x => x.SelectedItem = null); |
|
|
Assert.False(e.Handled); |
|
|
Assert.False(e.Handled); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerLeave_Doesnt_Deselect_Item_When_Menu_Open() |
|
|
public void PointerExited_Doesnt_Deselect_Item_When_Menu_Open() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = new Mock<IMenu>(); |
|
|
var menu = new Mock<IMenu>(); |
|
|
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.Parent == menu.Object); |
|
|
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.Parent == menu.Object); |
|
|
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item); |
|
|
|
|
|
|
|
|
menu.SetupGet(x => x.IsOpen).Returns(true); |
|
|
menu.SetupGet(x => x.IsOpen).Returns(true); |
|
|
menu.SetupGet(x => x.SelectedItem).Returns(item); |
|
|
menu.SetupGet(x => x.SelectedItem).Returns(item); |
|
|
target.PointerLeave(item, e); |
|
|
target.PointerExited(item, e); |
|
|
|
|
|
|
|
|
menu.VerifySet(x => x.SelectedItem = null, Times.Never); |
|
|
menu.VerifySet(x => x.SelectedItem = null, Times.Never); |
|
|
Assert.False(e.Handled); |
|
|
Assert.False(e.Handled); |
|
|
@ -382,31 +382,31 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerEnter_Selects_Item() |
|
|
public void PointerEntered_Selects_Item() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var e = CreateArgs(MenuItem.PointerEnterItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerEnteredItemEvent, item); |
|
|
|
|
|
|
|
|
target.PointerEnter(item, e); |
|
|
target.PointerEntered(item, e); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); |
|
|
Assert.False(e.Handled); |
|
|
Assert.False(e.Handled); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerEnter_Opens_Submenu_After_Delay() |
|
|
public void PointerEntered_Opens_Submenu_After_Delay() |
|
|
{ |
|
|
{ |
|
|
var timer = new TestTimer(); |
|
|
var timer = new TestTimer(); |
|
|
var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); |
|
|
var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true); |
|
|
var e = CreateArgs(MenuItem.PointerEnterItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerEnteredItemEvent, item); |
|
|
|
|
|
|
|
|
target.PointerEnter(item, e); |
|
|
target.PointerEntered(item, e); |
|
|
Mock.Get(item).Verify(x => x.Open(), Times.Never); |
|
|
Mock.Get(item).Verify(x => x.Open(), Times.Never); |
|
|
|
|
|
|
|
|
timer.Pulse(); |
|
|
timer.Pulse(); |
|
|
@ -416,7 +416,7 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerEnter_Closes_Sibling_Submenu_After_Delay() |
|
|
public void PointerEntered_Closes_Sibling_Submenu_After_Delay() |
|
|
{ |
|
|
{ |
|
|
var timer = new TestTimer(); |
|
|
var timer = new TestTimer(); |
|
|
var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); |
|
|
var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); |
|
|
@ -424,11 +424,11 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var sibling = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true && x.IsSubMenuOpen == true); |
|
|
var sibling = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true && x.IsSubMenuOpen == true); |
|
|
var e = CreateArgs(MenuItem.PointerEnterItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerEnteredItemEvent, item); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).SetupGet(x => x.SubItems).Returns(new[] { item, sibling }); |
|
|
Mock.Get(parentItem).SetupGet(x => x.SubItems).Returns(new[] { item, sibling }); |
|
|
|
|
|
|
|
|
target.PointerEnter(item, e); |
|
|
target.PointerEntered(item, e); |
|
|
Mock.Get(sibling).Verify(x => x.Close(), Times.Never); |
|
|
Mock.Get(sibling).Verify(x => x.Close(), Times.Never); |
|
|
|
|
|
|
|
|
timer.Pulse(); |
|
|
timer.Pulse(); |
|
|
@ -438,48 +438,48 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerLeave_Deselects_Item() |
|
|
public void PointerExited_Deselects_Item() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).SetupGet(x => x.SelectedItem).Returns(item); |
|
|
Mock.Get(parentItem).SetupGet(x => x.SelectedItem).Returns(item); |
|
|
target.PointerLeave(item, e); |
|
|
target.PointerExited(item, e); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null); |
|
|
Assert.False(e.Handled); |
|
|
Assert.False(e.Handled); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerLeave_Doesnt_Deselect_Sibling() |
|
|
public void PointerExited_Doesnt_Deselect_Sibling() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var sibling = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var sibling = Mock.Of<IMenuItem>(x => x.Parent == parentItem); |
|
|
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).SetupGet(x => x.SelectedItem).Returns(sibling); |
|
|
Mock.Get(parentItem).SetupGet(x => x.SelectedItem).Returns(sibling); |
|
|
target.PointerLeave(item, e); |
|
|
target.PointerExited(item, e); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null, Times.Never); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null, Times.Never); |
|
|
Assert.False(e.Handled); |
|
|
Assert.False(e.Handled); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public void PointerLeave_Doesnt_Deselect_Item_If_Pointer_Over_Submenu() |
|
|
public void PointerExited_Doesnt_Deselect_Item_If_Pointer_Over_Submenu() |
|
|
{ |
|
|
{ |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var target = new DefaultMenuInteractionHandler(false); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var menu = Mock.Of<IMenu>(); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true && x.IsPointerOverSubMenu == true); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true && x.IsPointerOverSubMenu == true); |
|
|
var e = CreateArgs(MenuItem.PointerLeaveItemEvent, item); |
|
|
var e = CreateArgs(MenuItem.PointerExitedItemEvent, item); |
|
|
|
|
|
|
|
|
target.PointerLeave(item, e); |
|
|
target.PointerExited(item, e); |
|
|
|
|
|
|
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null, Times.Never); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = null, Times.Never); |
|
|
Assert.False(e.Handled); |
|
|
Assert.False(e.Handled); |
|
|
@ -510,11 +510,11 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var parentItem = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.Parent == menu); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true); |
|
|
var item = Mock.Of<IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true); |
|
|
var childItem = Mock.Of<IMenuItem>(x => x.Parent == item); |
|
|
var childItem = Mock.Of<IMenuItem>(x => x.Parent == item); |
|
|
var enter = CreateArgs(MenuItem.PointerEnterItemEvent, item); |
|
|
var enter = CreateArgs(MenuItem.PointerEnteredItemEvent, item); |
|
|
var leave = CreateArgs(MenuItem.PointerLeaveItemEvent, item); |
|
|
var leave = CreateArgs(MenuItem.PointerExitedItemEvent, item); |
|
|
|
|
|
|
|
|
// Pointer enters item; item is selected.
|
|
|
// Pointer enters item; item is selected.
|
|
|
target.PointerEnter(item, enter); |
|
|
target.PointerEntered(item, enter); |
|
|
Assert.True(timer.ActionIsQueued); |
|
|
Assert.True(timer.ActionIsQueued); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); |
|
|
Mock.Get(parentItem).Invocations.Clear(); |
|
|
Mock.Get(parentItem).Invocations.Clear(); |
|
|
@ -526,13 +526,13 @@ namespace Avalonia.Controls.UnitTests.Platform |
|
|
Mock.Get(item).Invocations.Clear(); |
|
|
Mock.Get(item).Invocations.Clear(); |
|
|
|
|
|
|
|
|
// Pointer briefly exits item, but submenu remains open.
|
|
|
// Pointer briefly exits item, but submenu remains open.
|
|
|
target.PointerLeave(item, leave); |
|
|
target.PointerExited(item, leave); |
|
|
Mock.Get(item).Verify(x => x.Close(), Times.Never); |
|
|
Mock.Get(item).Verify(x => x.Close(), Times.Never); |
|
|
Mock.Get(item).Invocations.Clear(); |
|
|
Mock.Get(item).Invocations.Clear(); |
|
|
|
|
|
|
|
|
// Pointer enters child item; is selected.
|
|
|
// Pointer enters child item; is selected.
|
|
|
enter.Source = childItem; |
|
|
enter.Source = childItem; |
|
|
target.PointerEnter(childItem, enter); |
|
|
target.PointerEntered(childItem, enter); |
|
|
Mock.Get(item).VerifySet(x => x.SelectedItem = childItem); |
|
|
Mock.Get(item).VerifySet(x => x.SelectedItem = childItem); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); |
|
|
Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); |
|
|
Mock.Get(item).Invocations.Clear(); |
|
|
Mock.Get(item).Invocations.Clear(); |
|
|
|