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);
            }
Пример #3
0
            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();
            }