public void PointerEnter_Opens_Submenu_After_Delay() { var timer = new TestTimer(); var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); var menu = Mock.Of <IMenu>(); 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 e = CreateArgs(MenuItem.PointerEnterItemEvent, item); target.PointerEnter(item, e); Mock.Get(item).Verify(x => x.Open(), Times.Never); timer.Pulse(); Mock.Get(item).Verify(x => x.Open()); Assert.False(e.Handled); }
public void PointerEnter_Closes_Sibling_Submenu_After_Delay() { var timer = new TestTimer(); var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); var menu = Mock.Of <IMenu>(); 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 sibling = Mock.Of <IMenuItem>(x => x.Parent == parentItem && x.HasSubMenu == true && x.IsSubMenuOpen == true); var e = CreateArgs(MenuItem.PointerEnterItemEvent, item); Mock.Get(parentItem).SetupGet(x => x.SubItems).Returns(new[] { item, sibling }); target.PointerEnter(item, e); Mock.Get(sibling).Verify(x => x.Close(), Times.Never); timer.Pulse(); Mock.Get(sibling).Verify(x => x.Close()); Assert.False(e.Handled); }
public void Selection_Is_Correct_When_Pointer_Temporarily_Exits_Item_To_Select_SubItem() { var timer = new TestTimer(); var target = new DefaultMenuInteractionHandler(false, null, timer.RunOnce); var menu = Mock.Of <IMenu>(); 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 childItem = Mock.Of <IMenuItem>(x => x.Parent == item); var enter = new PointerEventArgs { RoutedEvent = MenuItem.PointerEnterItemEvent, Source = item }; var leave = new PointerEventArgs { RoutedEvent = MenuItem.PointerLeaveItemEvent, Source = item }; // Pointer enters item; item is selected. target.PointerEnter(item, enter); Assert.True(timer.ActionIsQueued); Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); Mock.Get(parentItem).ResetCalls(); // SubMenu shown after a delay. timer.Pulse(); Mock.Get(item).Verify(x => x.Open()); Mock.Get(item).SetupGet(x => x.IsSubMenuOpen).Returns(true); Mock.Get(item).ResetCalls(); // Pointer briefly exits item, but submenu remains open. target.PointerLeave(item, leave); Mock.Get(item).Verify(x => x.Close(), Times.Never); Mock.Get(item).ResetCalls(); // Pointer enters child item; is selected. enter.Source = childItem; target.PointerEnter(childItem, enter); Mock.Get(item).VerifySet(x => x.SelectedItem = childItem); Mock.Get(parentItem).VerifySet(x => x.SelectedItem = item); Mock.Get(item).ResetCalls(); Mock.Get(parentItem).ResetCalls(); }