File: System\ComponentModel\Design\DesignerActionListTests.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.Runtime.CompilerServices;
using Moq;
 
namespace System.ComponentModel.Design.Tests;
 
public class DesignerActionListTests
{
    public static IEnumerable<object[]> Ctor_IComponent_TestDat()
    {
        yield return new object[] { null };
        yield return new object[] { new Component() };
    }
 
    [Theory]
    [MemberData(nameof(Ctor_IComponent_TestDat))]
    public void DesignerActionList_Ctor_IComponent(IComponent component)
    {
        DesignerActionList list = new(component);
        Assert.Equal(component, list.Component);
        Assert.False(list.AutoShow);
    }
 
    [Theory]
    [BoolData]
    public void DesignerActionList_AutoShow_Set_GetReturnsExpected(bool value)
    {
        DesignerActionList list = new(new Component())
        {
            AutoShow = value
        };
        Assert.Equal(value, list.AutoShow);
 
        // Set same.
        list.AutoShow = value;
        Assert.Equal(value, list.AutoShow);
    }
 
    public static IEnumerable<object[]> GetService_TestData()
    {
        yield return new object[] { null, null };
        yield return new object[] { new Component(), null };
 
        object o = new();
        Mock<ISite> mockSite = new(MockBehavior.Strict);
        mockSite
            .Setup(s => s.GetService(typeof(int)))
            .Returns(o);
        mockSite
            .Setup(s => s.Container)
            .Returns((IContainer)null);
        yield return new object[] { new Component { Site = mockSite.Object }, o };
    }
 
    [Theory]
    [MemberData(nameof(GetService_TestData))]
    public void DesignerActionList_GetService_Invoke_ReturnsExpected(Component component, object expected)
    {
        DesignerActionList list = new(component);
        Assert.Equal(expected, list.GetService(typeof(int)));
    }
 
    [Fact]
    public void DesignerActionList_GetSortedActionItems_CustomClass_ReturnsExpected()
    {
        SubDesignerActionList list = new();
        DesignerActionItemCollection items = list.GetSortedActionItems();
        Assert.Equal(8, items.Count);
 
        DesignerActionMethodItem item1 = Assert.IsType<DesignerActionMethodItem>(items[0]);
        Assert.Equal("AnnotatedMethod", item1.MemberName);
        Assert.Equal("DisplayName", item1.DisplayName);
        Assert.Equal("Description", item1.Description);
        Assert.Equal("Category", item1.Category);
 
        DesignerActionPropertyItem item2 = Assert.IsType<DesignerActionPropertyItem>(items[1]);
        Assert.Equal("AnnotatedProperty", item2.MemberName);
        Assert.Equal("DisplayName", item2.DisplayName);
        Assert.Equal("Description", item2.Description);
        Assert.Equal("Category", item2.Category);
 
        DesignerActionMethodItem item3 = Assert.IsType<DesignerActionMethodItem>(items[2]);
        Assert.Equal("EmptyAnnotatedMethod", item3.MemberName);
        Assert.Equal("EmptyAnnotatedMethod", item3.DisplayName);
        Assert.Empty(item3.Description);
        Assert.Empty(item3.Category);
 
        DesignerActionPropertyItem item4 = Assert.IsType<DesignerActionPropertyItem>(items[3]);
        Assert.Equal("EmptyAnnotatedProperty", item4.MemberName);
        Assert.Equal("EmptyAnnotatedProperty", item4.DisplayName);
        Assert.Empty(item4.Description);
        Assert.Empty(item4.Category);
 
        DesignerActionMethodItem item5 = Assert.IsType<DesignerActionMethodItem>(items[4]);
        Assert.Equal("NullAnnotatedMethod", item5.MemberName);
        Assert.Equal("NullAnnotatedMethod", item5.DisplayName);
        Assert.Null(item5.Description);
        Assert.Null(item5.Category);
 
        DesignerActionPropertyItem item6 = Assert.IsType<DesignerActionPropertyItem>(items[5]);
        Assert.Equal("NullAnnotatedProperty", item6.MemberName);
        Assert.Equal("NullAnnotatedProperty", item6.DisplayName);
        Assert.Null(item6.Description);
        Assert.Null(item6.Category);
 
        DesignerActionMethodItem item7 = Assert.IsType<DesignerActionMethodItem>(items[6]);
        Assert.Equal("PublicMethod", item7.MemberName);
        Assert.Equal("PublicMethod", item7.DisplayName);
        Assert.Empty(item7.Description);
        Assert.Empty(item7.Category);
 
        DesignerActionPropertyItem item8 = Assert.IsType<DesignerActionPropertyItem>(items[7]);
        Assert.Equal("PublicProperty", item8.MemberName);
        Assert.Equal("PublicProperty", item8.DisplayName);
        Assert.Empty(item8.Description);
        Assert.Empty(item8.Category);
    }
 
    [Fact]
    public void DesignerActionList_GetSortedActionItems_BaseClass_ReturnsEmpty()
    {
        DesignerActionList list = new(null);
        DesignerActionItemCollection items = list.GetSortedActionItems();
        Assert.Empty(items);
    }
 
    private class SubDesignerActionList : DesignerActionList
    {
        public SubDesignerActionList() : base(null)
        {
        }
 
        public void PublicMethod()
        {
        }
 
        [Description("Description")]
        [DisplayName("DisplayName")]
        [Category("Category")]
        public void AnnotatedMethod()
        {
        }
 
        [Description("")]
        [DisplayName("")]
        [Category("")]
        public void EmptyAnnotatedMethod()
        {
        }
 
        [Description(null)]
        [DisplayName(null)]
        [Category(null)]
        public void NullAnnotatedMethod()
        {
        }
 
#pragma warning disable IDE0051 // Remove unused private members
#pragma warning disable IDE0060 // Remove unused parameter
        private void PrivateMethod()
        {
        }
 
        public void MethodWithParameters(object o)
        {
        }
 
        [SpecialName]
        public void MethodWithSpecialName()
        {
        }
 
        public static void StaticMethod()
        {
        }
 
        public int PublicProperty { get; set; }
 
        [Description("Description")]
        [DisplayName("DisplayName")]
        [Category("Category")]
        public int AnnotatedProperty { get; set; }
 
        [Description("")]
        [DisplayName("")]
        [Category("")]
        public int EmptyAnnotatedProperty { get; set; }
 
        [Description(null)]
        [DisplayName(null)]
        [Category(null)]
        public int NullAnnotatedProperty { get; set; }
 
        private int PrivateProperty { get; set; }
 
        public static int StaticProperty { get; set; }
 
#pragma warning restore IDE0051
#pragma warning restore IDE0060
    }
}