diff --git a/mRemoteNGTests/UI/Controls/ConnectionTreeTests.cs b/mRemoteNGTests/UI/Controls/ConnectionTreeTests.cs index cb8a996e9..70aa1ec78 100644 --- a/mRemoteNGTests/UI/Controls/ConnectionTreeTests.cs +++ b/mRemoteNGTests/UI/Controls/ConnectionTreeTests.cs @@ -96,5 +96,68 @@ namespace mRemoteNGTests.UI.Controls Assert.That(puttyRoot.Children, Is.Empty); } + + [Test] + [Apartment(ApartmentState.STA)] + public void CannotDuplicateRootConnectionNode() + { + var connectionTreeModel = new ConnectionTreeModel(); + var root = new RootNodeInfo(RootNodeType.Connection); + connectionTreeModel.AddRootNode(root); + _connectionTree.ConnectionTreeModel = connectionTreeModel; + + _connectionTree.SelectedObject = root; + _connectionTree.DuplicateSelectedNode(); + + Assert.That(connectionTreeModel.RootNodes, Has.One.Items); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void CannotDuplicateRootPuttyNode() + { + var connectionTreeModel = new ConnectionTreeModel(); + var puttyRoot = new RootNodeInfo(RootNodeType.PuttySessions); + connectionTreeModel.AddRootNode(puttyRoot); + _connectionTree.ConnectionTreeModel = connectionTreeModel; + + _connectionTree.SelectedObject = puttyRoot; + _connectionTree.DuplicateSelectedNode(); + + Assert.That(connectionTreeModel.RootNodes, Has.One.Items); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void CannotDuplicatePuttyConnectionNode() + { + var connectionTreeModel = new ConnectionTreeModel(); + var puttyRoot = new RootNodeInfo(RootNodeType.PuttySessions); + var puttyConnection = new PuttySessionInfo(); + puttyRoot.AddChild(puttyConnection); + connectionTreeModel.AddRootNode(puttyRoot); + _connectionTree.ConnectionTreeModel = connectionTreeModel; + _connectionTree.ExpandAll(); + + _connectionTree.SelectedObject = puttyConnection; + _connectionTree.DuplicateSelectedNode(); + + Assert.That(puttyRoot.Children, Has.One.Items); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void DuplicatingWithNoNodeSelectedDoesNothing() + { + var connectionTreeModel = new ConnectionTreeModel(); + var puttyRoot = new RootNodeInfo(RootNodeType.PuttySessions); + connectionTreeModel.AddRootNode(puttyRoot); + _connectionTree.ConnectionTreeModel = connectionTreeModel; + + _connectionTree.SelectedObject = null; + _connectionTree.DuplicateSelectedNode(); + + Assert.That(connectionTreeModel.GetRecursiveChildList(), Has.One.Items); + } } } diff --git a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs index 06de81914..94b59d486 100644 --- a/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs +++ b/mRemoteV1/UI/Controls/ConnectionTree/ConnectionTree.cs @@ -281,6 +281,9 @@ namespace mRemoteNG.UI.Controls public void DuplicateSelectedNode() { + if (SelectedNode == null) + return; + var selectedNodeType = SelectedNode.GetTreeNodeType(); if (selectedNodeType != TreeNodeType.Connection && selectedNodeType != TreeNodeType.Container) return;