File: System\Windows\Forms\Design\ListViewDesignerTests.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.ComponentModel.Design;
using System.Drawing;
 
namespace System.Windows.Forms.Design.Tests;
 
public class ListViewDesignerTests : IDisposable
{
    private readonly ListViewDesigner _listViewDesigner;
    private readonly ListView _listView;
 
    public ListViewDesignerTests()
    {
        _listViewDesigner = new();
        _listView = new();
        _listViewDesigner.Initialize(_listView);
    }
 
    public void Dispose()
    {
        _listViewDesigner.Dispose();
        _listView.Dispose();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_AssociatedComponentsTest()
    {
        _listView.Columns.Add("123");
        _listView.Columns.Add("abc");
 
        _listViewDesigner.AssociatedComponents.Count.Should().Be(2);
    }
 
    [WinFormsFact]
    public void ListViewDesigner_GetHitTest_ReturnsFalse_WhenViewIsNotDetails()
    {
        _listView.View = View.LargeIcon;
 
        bool result = _listViewDesigner.TestAccessor().Dynamic.GetHitTest(new Point(10, 10));
 
        result.Should().BeFalse();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_GetHitTest_ReturnsFalse_WhenPointIsNotOnHeader()
    {
        _listView.View = View.Details;
        _listView.Columns.Add("Column1");
 
        bool result = _listViewDesigner.TestAccessor().Dynamic.GetHitTest(new Point(10, 10));
 
        result.Should().BeFalse();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_GetHitTest_ReturnsFalse_WhenHeaderHandleIsNull()
    {
        _listView.View = View.Details;
        _listView.Columns.Add("Column1");
 
        Point point = new(10, 5);
        bool result = _listViewDesigner.TestAccessor().Dynamic.GetHitTest(point);
 
        result.Should().BeFalse();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_GetHitTest_ReturnsFalse_WhenPointIsOutsideControl()
    {
        _listView.View = View.Details;
        _listView.Columns.Add("Column1");
 
        Point outsidePoint = new(-10, -10);
        bool result = _listViewDesigner.TestAccessor().Dynamic.GetHitTest(outsidePoint);
 
        result.Should().BeFalse();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_Initialize_SetsOwnerDrawToFalse() =>
    _listView.OwnerDraw.Should().BeFalse();
 
    [WinFormsFact]
    public void ListViewDesigner_Initialize_SetsUseCompatibleStateImageBehaviorToFalse() =>
        _listView.UseCompatibleStateImageBehavior.Should().BeFalse();
 
    [WinFormsFact]
    public void ListViewDesigner_Initialize_HooksChildHandles_WhenViewIsDetails()
    {
        _listView.View = View.Details;
 
        _listViewDesigner.Should().BeOfType<ListViewDesigner>();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_Initialize_DoesNotHookChildHandles_WhenViewIsNotDetails()
    {
        _listView.View = View.LargeIcon;
 
        _listViewDesigner.Should().BeOfType<ListViewDesigner>();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_ActionLists_ReturnsNonNullCollection()
    {
        DesignerActionListCollection actionLists = _listViewDesigner.ActionLists;
 
        actionLists.Should().BeOfType<DesignerActionListCollection>();
        actionLists[0].Should().BeOfType<ListViewActionList>();
    }
 
    [WinFormsFact]
    public void ListViewDesigner_ActionLists_ReturnsSameInstanceOnSubsequentCalls()
    {
        DesignerActionListCollection firstCall = _listViewDesigner.ActionLists;
        DesignerActionListCollection secondCall = _listViewDesigner.ActionLists;
 
        firstCall.Should().BeSameAs(secondCall);
    }
 
    [WinFormsFact]
    public void ListViewDesigner_ActionLists_ThreadSafeInitialization()
    {
        DesignerActionListCollection[] results = new DesignerActionListCollection[2];
        Parallel.Invoke(
            () => results[0] = _listViewDesigner.ActionLists,
            () => results[1] = _listViewDesigner.ActionLists
        );
 
        results[0].Should().BeSameAs(results[1]);
    }
}