File: System\Windows\Forms\ToolStripSplitStackDragDropHandlerTests.cs
Web Access
Project: src\src\System.Windows.Forms\tests\UnitTests\System.Windows.Forms.Tests.csproj (System.Windows.Forms.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable enable
 
using System.Drawing;
 
namespace System.Windows.Forms.Tests;
 
public class ToolStripSplitStackDragDropHandlerTests : IDisposable
{
    private readonly ToolStrip _toolStrip;
    private readonly ToolStripSplitStackDragDropHandler _toolStripSplitStackDragDropHandler;
    public ToolStripSplitStackDragDropHandlerTests()
    {
        _toolStrip = new();
        _toolStripSplitStackDragDropHandler = new(_toolStrip);
    }
 
    public void Dispose() => _toolStrip.Dispose();
 
    [WinFormsFact]
    public void OnDragEnter_SetsEffectToMove_WhenDataIsToolStripItem()
    {
        using ToolStripButton toolStripItem = new();
        DataObject dataObject = new();
        dataObject.SetData(typeof(ToolStripItem), toolStripItem);
        DragEventArgs dragEventArgs = new(dataObject, 0, 0, 0, DragDropEffects.None, DragDropEffects.None);
 
        _toolStripSplitStackDragDropHandler.OnDragEnter(dragEventArgs);
 
        dragEventArgs.Effect.Should().Be(DragDropEffects.Move);
    }
 
    [WinFormsFact]
    public void OnDragEnter_DoesNotSetEffect_WhenDataIsNotToolStripItem()
    {
        DataObject dataObject = new();
        DragEventArgs dragEventArgs = new(dataObject, 0, 0, 0, DragDropEffects.None, DragDropEffects.None);
 
        _toolStripSplitStackDragDropHandler.OnDragEnter(dragEventArgs);
 
        dragEventArgs.Effect.Should().Be(DragDropEffects.None);
    }
 
    [WinFormsFact]
    public void OnDragDrop_AddsItemToToolStrip_WhenDataIsToolStripItem()
    {
        using ToolStripButton toolStripItem = new();
        DataObject dataObject = new();
        dataObject.SetData(typeof(ToolStripItem), toolStripItem);
        DragEventArgs dragEventArgs = new(dataObject, 0, 0, 0, DragDropEffects.None, DragDropEffects.None);
 
        _toolStripSplitStackDragDropHandler.OnDragDrop(dragEventArgs);
 
        _toolStrip.Items[0].Should().Be(toolStripItem);
    }
 
    [WinFormsFact]
    public void OnDragDrop_DoesNotAddItem_WhenDataIsNotToolStripItem()
    {
        DataObject dataObject = new();
        DragEventArgs dragEventArgs = new(dataObject, 0, 0, 0, DragDropEffects.None, DragDropEffects.None);
 
        _toolStripSplitStackDragDropHandler.OnDragDrop(dragEventArgs);
 
        _toolStrip.Items.Count.Should().Be(0);
    }
 
    [WinFormsFact]
    public void OnDragOver_SetsEffectToMove_WhenDataIsToolStripItem()
    {
        using ToolStripButton toolStripItem = new();
        DataObject dataObject = new();
        dataObject.SetData(typeof(ToolStripItem), toolStripItem);
        DragEventArgs dragEventArgs = new(dataObject, 0, 0, 0, DragDropEffects.None, DragDropEffects.None);
 
        _toolStripSplitStackDragDropHandler.OnDragOver(dragEventArgs);
 
        dragEventArgs.Effect.Should().Be(DragDropEffects.Move);
    }
 
    [WinFormsFact]
    public void OnDragOver_DoesNotSetEffect_WhenDataIsNotToolStripItem()
    {
        DataObject dataObject = new();
        DragEventArgs dragEventArgs = new(dataObject, 0, 0, 0, DragDropEffects.None, DragDropEffects.None);
 
        _toolStripSplitStackDragDropHandler.OnDragOver(dragEventArgs);
 
        dragEventArgs.Effect.Should().Be(DragDropEffects.None);
    }
 
    [WinFormsFact]
    public void OnGiveFeedback_DoesNotThrowException()
    {
        GiveFeedbackEventArgs giveFeedbackEventArgs = new(effect: DragDropEffects.None, useDefaultCursors: false);
 
        Action action = () => _toolStripSplitStackDragDropHandler.OnGiveFeedback(giveFeedbackEventArgs);
        action.Should().NotThrow();
    }
 
    [WinFormsFact]
    public void OnQueryContinueDrag_DoesNotThrowException()
    {
        QueryContinueDragEventArgs queryContinueDragEventArgs = new(0, escapePressed: false, DragAction.Continue);
 
        Action action = () => _toolStripSplitStackDragDropHandler.OnQueryContinueDrag(queryContinueDragEventArgs);
 
        action.Should().NotThrow();
    }
 
    [WinFormsFact]
    public void OnDropItem_AddsItemWhenToolStripIsEmpty()
    {
        using ToolStripButton newToolStripItem = new();
        Point point = new(10, 10);
 
        _toolStripSplitStackDragDropHandler.TestAccessor().Dynamic.OnDropItem(newToolStripItem, point);
 
        _toolStrip.Items[0].Should().Be(newToolStripItem);
    }
 
    [WinFormsFact]
    public void ShowItemDropPoint_ReturnsTrue_WhenToolStripIsEmpty()
    {
        Point point = new(10, 10);
        var result = _toolStripSplitStackDragDropHandler.TestAccessor().Dynamic.ShowItemDropPoint(point);
 
        ((bool)result).Should().BeTrue();
    }
}