diff --git a/mRemoteNGTests/Container/ContainerInfoTests.cs b/mRemoteNGTests/Container/ContainerInfoTests.cs new file mode 100644 index 000000000..528991067 --- /dev/null +++ b/mRemoteNGTests/Container/ContainerInfoTests.cs @@ -0,0 +1,84 @@ +using mRemoteNG.Connection; +using mRemoteNG.Container; +using NUnit.Framework; + + +namespace mRemoteNGTests.Container +{ + public class ContainerInfoTests + { + private ContainerInfo _containerInfo; + private ConnectionInfo _connectionInfo; + + [SetUp] + public void Setup() + { + _containerInfo = new ContainerInfo(); + _connectionInfo = new ConnectionInfo(); + } + + [TearDown] + public void Teardown() + { + _containerInfo = null; + _connectionInfo = null; + } + + [Test] + public void AddSetsParentPropertyOnTheChild() + { + _containerInfo.Add(_connectionInfo); + Assert.That(_connectionInfo.Parent, Is.EqualTo(_containerInfo)); + } + + [Test] + public void AddAddsChildToChildrenList() + { + _containerInfo.Add(_connectionInfo); + Assert.That(_containerInfo.Children, Does.Contain(_connectionInfo)); + } + + [Test] + public void AddRangeAddsAllItems() + { + var collection = new[] {new ConnectionInfo(),new ConnectionInfo(), new ContainerInfo()}; + _containerInfo.AddRange(collection); + Assert.That(_containerInfo.Children, Is.EquivalentTo(collection)); + } + + [Test] + public void RemoveUnsetsParentPropertyOnChild() + { + _containerInfo.Add(_connectionInfo); + _containerInfo.Remove(_connectionInfo); + Assert.That(_connectionInfo.Parent, Is.Not.EqualTo(_containerInfo)); + } + + [Test] + public void RemoveRemovesChildFromChildrenList() + { + _containerInfo.Add(_connectionInfo); + _containerInfo.Remove(_connectionInfo); + Assert.That(_containerInfo.Children, Does.Not.Contains(_connectionInfo)); + } + + [Test] + public void RemoveRangeRemovesAllIndicatedItems() + { + var collection = new[] { new ConnectionInfo(), new ConnectionInfo(), new ContainerInfo() }; + _containerInfo.AddRange(collection); + _containerInfo.RemoveRange(collection); + Assert.That(_containerInfo.Children, Does.Not.Contains(collection[0]).And.Not.Contains(collection[1]).And.Not.Contains(collection[2])); + } + + [Test] + public void RemoveRangeDoesNotRemoveUntargetedMembers() + { + var collection = new[] { new ConnectionInfo(), new ConnectionInfo(), new ContainerInfo() }; + _containerInfo.AddRange(collection); + _containerInfo.Add(_connectionInfo); + _containerInfo.RemoveRange(collection); + Assert.That(_containerInfo.Children, Does.Contain(_connectionInfo)); + } + } +} \ No newline at end of file diff --git a/mRemoteNGTests/mRemoteNGTests.csproj b/mRemoteNGTests/mRemoteNGTests.csproj index ffac55f93..5a93836be 100644 --- a/mRemoteNGTests/mRemoteNGTests.csproj +++ b/mRemoteNGTests/mRemoteNGTests.csproj @@ -105,6 +105,7 @@ + diff --git a/mRemoteV1/Container/ContainerInfo.cs b/mRemoteV1/Container/ContainerInfo.cs index 39ea7b279..3c5892b28 100644 --- a/mRemoteV1/Container/ContainerInfo.cs +++ b/mRemoteV1/Container/ContainerInfo.cs @@ -19,12 +19,40 @@ namespace mRemoteNG.Container IsContainer = true; } + public void Add(ConnectionInfo newChildItem) + { + newChildItem.Parent = this; + Children.Add(newChildItem); + } + + public void AddRange(IEnumerable newChildren) + { + foreach (var child in newChildren) + { + Add(child); + } + } + + public void Remove(ConnectionInfo removalTarget) + { + removalTarget.Parent = null; + Children.Remove(removalTarget); + } + + public void RemoveRange(IEnumerable removalTargets) + { + foreach (var child in removalTargets) + { + Remove(child); + } + } + public new ContainerInfo Copy() { return (ContainerInfo)MemberwiseClone(); } - public void SetDefaults() + private void SetDefaults() { IsExpanded = true; }