Files
mRemoteNG/mRemoteNGTests/Tree/ConnectionTreeDragAndDropHandlerTests.cs
2016-10-17 21:25:04 -04:00

287 lines
10 KiB
C#

using System.Windows.Forms;
using BrightIdeasSoftware;
using mRemoteNG.Connection;
using mRemoteNG.Container;
using mRemoteNG.Tree;
using mRemoteNG.Tree.Root;
using NUnit.Framework;
namespace mRemoteNGTests.Tree
{
public class ConnectionTreeDragAndDropHandlerTests
{
private ConnectionTreeDragAndDropHandler _dragAndDropHandler;
private RootNodeInfo _rootNode;
private ContainerInfo _container1;
private ContainerInfo _container2;
private ContainerInfo _container3;
private ConnectionInfo _connection1;
private ConnectionInfo _connection2;
private ConnectionInfo _connection3;
private ConnectionInfo _connection4;
private ConnectionInfo _connection5;
[SetUp]
public void Setup()
{
_dragAndDropHandler = new ConnectionTreeDragAndDropHandler();
InitializeNodes();
CreateSimpleTreeModel();
}
[TearDown]
public void Teardown()
{
_dragAndDropHandler = null;
DestroyNodes();
}
[Test]
public void CanDragConnectionOntoContainer()
{
var source = _connection3;
var target = _container1;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CanDragContainerOntoContainer()
{
var source = _container1;
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CanDragContainerBetweenContainers()
{
var source = _container3;
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CanDragConnectionBetweenConnections()
{
var source = _connection1;
var target = _connection4;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.Move));
}
[Test]
public void CantDragConnectionOntoItself()
{
var source = _connection1;
var target = _connection1;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerOntoItself()
{
var source = _container1;
var target = _container1;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerOntoItsChild()
{
var source = _container2;
var target = _container3;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerBetweenItsChildren()
{
var source = _container3;
var target = _connection4;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.BelowItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeOntoItsCurrentParent()
{
var source = _container3;
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragRootNodeInfo()
{
var source = _rootNode;
var target = new ContainerInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeAboveRootNodeInfo()
{
var source = _connection1;
var target = _rootNode;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeBelowRootNodeInfo()
{
var source = _connection1;
var target = _rootNode;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.BelowItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragPuttySessionInfo()
{
var source = new PuttySessionInfo();
var target = _container2;
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragConnectionOntoRootPuttySessionNode()
{
var source = _connection1;
var target = new RootPuttySessionsNodeInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragContainerOntoRootPuttySessionNode()
{
var source = _container1;
var target = new RootPuttySessionsNodeInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.Item);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeAbovePuttySessionNodes()
{
var source = _connection1;
var target = new PuttySessionInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.AboveItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void CantDragNodeBelowPuttySessionNodes()
{
var source = _connection1;
var target = new PuttySessionInfo();
var dragDropEffects = _dragAndDropHandler.CanModelDrop(source, target, DropTargetLocation.BelowItem);
Assert.That(dragDropEffects, Is.EqualTo(DragDropEffects.None));
}
[Test]
public void DraggingNodeBelowSiblingRearrangesTheUnderlyingModelCorrectly()
{
var source = _connection3;
var target = _connection5;
var location = DropTargetLocation.BelowItem;
_dragAndDropHandler.DropModel(source, target, location);
var actualIndex = _container3.Children.IndexOf(source);
var expectedIndex = _container3.Children.IndexOf(target) + 1;
Assert.That(actualIndex, Is.EqualTo(expectedIndex));
}
[Test]
public void DraggingNodeAboveSiblingRearrangesTheUnderlyingModelCorrectly()
{
var source = _connection3;
var target = _connection5;
var location = DropTargetLocation.AboveItem;
_dragAndDropHandler.DropModel(source, target, location);
var actualIndex = _container3.Children.IndexOf(source);
var expectedIndex = _container3.Children.IndexOf(target) - 1;
Assert.That(actualIndex, Is.EqualTo(expectedIndex));
}
[Test]
public void DraggingNodeToNewContainerAddsNodeToTheNewContainer()
{
var source = _connection3;
var target = _container1;
var location = DropTargetLocation.Item;
_dragAndDropHandler.DropModel(source, target, location);
Assert.That(target.Children.Contains(source));
}
[Test]
public void DraggingNodeToNewContainerRemovesNodeFromOldContainer()
{
var source = _connection3;
var target = _container1;
var location = DropTargetLocation.Item;
_dragAndDropHandler.DropModel(source, target, location);
Assert.That(!_container3.Children.Contains(source));
}
private void InitializeNodes()
{
_rootNode = new RootNodeInfo(RootNodeType.Connection);
_container1 = new ContainerInfo();
_container2 = new ContainerInfo();
_container3 = new ContainerInfo();
_connection1 = new ConnectionInfo();
_connection2 = new ConnectionInfo();
_connection3 = new ConnectionInfo();
_connection4 = new ConnectionInfo();
_connection5 = new ConnectionInfo();
}
private void CreateSimpleTreeModel()
{
/*
* Root
* |-- container1
* | L-- connection1
* L-- container2
* |-- container3
* | |-- connection3
* | |-- connection4
* | L-- connection5
* L-- connection2
*/
_rootNode.AddChild(_container1);
_rootNode.AddChild(_container2);
_container1.AddChild(_connection1);
_container2.AddChild(_container3);
_container2.AddChild(_connection2);
_container3.AddChild(_connection3);
_container3.AddChild(_connection4);
_container3.AddChild(_connection5);
}
private void DestroyNodes()
{
_rootNode = null;
_container1 = null;
_container2 = null;
_container3 = null;
_connection1 = null;
_connection2 = null;
_connection3 = null;
_connection4 = null;
_connection5 = null;
}
}
}