File: ToolStripMenuItemDesignerTest.cs
Web Access
Project: src\src\System.Windows.Forms.Design\tests\UnitTests\System.Windows.Forms.Design.Tests.csproj (System.Windows.Forms.Design.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms.Design.Tests.Mocks;
 
using Moq;
 
namespace System.Windows.Forms.Design.Tests;
 
public class ToolStripMenuItemDesignerTest
{
    [WinFormsFact]
    public void ToolStripMenuItemDesignerTest_AssociatedComponentsTest()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripDropDown = new();
        toolStripMenuItemDesigner.Initialize(toolStripDropDown);
 
        Assert.Empty(toolStripMenuItemDesigner.AssociatedComponents);
 
        toolStripDropDown.DropDownItems.Add("123");
 
        Assert.Single(toolStripMenuItemDesigner.AssociatedComponents);
        Assert.Null(toolStripMenuItemDesigner.Editor);
        Assert.Null(toolStripMenuItemDesigner.GetParentComponentProperty());
    }
 
    [Fact]
    public void CommitTest()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        toolStripMenuItemDesigner.Commit();
    }
 
    [Fact]
    public void UnHookEvents()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripDropDown = new();
        toolStripMenuItemDesigner.Initialize(toolStripDropDown);
 
        toolStripMenuItemDesigner.UnHookEvents();
    }
 
    [Theory]
    [BoolData]
    public void DisposeTest(bool disposing)
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        toolStripMenuItemDesigner.DisposeMethod(disposing);
    }
 
    [Theory]
    [BoolData]
    public void EditTemplateNodeTest(bool clicked)
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        toolStripMenuItemDesigner.EditTemplateNode(clicked);
    }
 
    [Fact]
    public void GetOwnerForActionListTest()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        Assert.NotNull(toolStripMenuItemDesigner.GetOwnerForActionListMethod());
    }
 
    [Fact]
    public void HookEventsTest()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        toolStripMenuItemDesigner.HookEvents();
    }
 
    [Fact]
    public void PreFilterPropertiesTest()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
 
        Mock<IDesignerHost> mockDesignerHost = new(MockBehavior.Strict);
        mockDesignerHost
            .Setup(h => h.RootComponent)
            .Returns(toolStripMenuItem);
        mockDesignerHost
            .Setup(s => s.GetDesigner(It.IsAny<Control>()))
            .Returns(() => null);
        var mockSite = MockSite.CreateMockSiteWithDesignerHost(mockDesignerHost.Object);
        toolStripMenuItem.Site = mockSite.Object;
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(ToolStripMenuItem));
        Assert.NotNull(properties);
 
        PropertyDescriptor propertyDescriptor = properties.Find("Visible", true);
        Dictionary<string, PropertyDescriptor> property = new()
        {
            { "Visible", propertyDescriptor }
        };
 
        toolStripMenuItemDesigner.PreFilterPropertiesMethod(property);
    }
 
    [Fact]
    public void GetMainToolStripTest()
    {
        TestToolStripMenuItemDesigner toolStripMenuItemDesigner = new();
        ToolStripMenuItem toolStripMenuItem = new();
 
        Mock<IDesignerHost> mockDesignerHost = new(MockBehavior.Strict);
        mockDesignerHost
            .Setup(h => h.RootComponent)
            .Returns(toolStripMenuItem);
        mockDesignerHost
            .Setup(s => s.GetDesigner(It.IsAny<Control>()))
            .Returns(() => null);
        var mockSite = MockSite.CreateMockSiteWithDesignerHost(mockDesignerHost.Object);
        toolStripMenuItem.Site = mockSite.Object;
        toolStripMenuItemDesigner.Initialize(toolStripMenuItem);
 
        Assert.Null(toolStripMenuItemDesigner.GetMainToolStrip());
    }
 
    private class TestToolStripMenuItemDesigner : ToolStripMenuItemDesigner
    {
        internal IComponent GetParentComponentProperty()
        {
            return ParentComponent;
        }
 
        internal void DisposeMethod(bool disposing)
        {
            Dispose(disposing);
        }
 
        internal Component GetOwnerForActionListMethod()
        {
            return GetOwnerForActionList();
        }
 
        internal void PreFilterPropertiesMethod(IDictionary properties)
        {
            PreFilterProperties(properties);
        }
    }
}