Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingData.cs =================================================================== diff -u -r5076e379f409c3b5ba41eb98256e3dd5d140571c -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingData.cs (.../PipingData.cs) (revision 5076e379f409c3b5ba41eb98256e3dd5d140571c) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingData.cs (.../PipingData.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -194,6 +194,14 @@ /// public PipingOutput Output { get; set; } + /// + /// Clears the . + /// + public void ClearOutput() + { + Output = null; + } + public void Attach(IObserver observer) { observers.Add(observer); Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationInputsNodePresenter.cs =================================================================== diff -u -r2a90c0c1be6114f72af65c42f0a6f334b30e4755 -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationInputsNodePresenter.cs (.../PipingCalculationInputsNodePresenter.cs) (revision 2a90c0c1be6114f72af65c42f0a6f334b30e4755) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingCalculationInputsNodePresenter.cs (.../PipingCalculationInputsNodePresenter.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -44,10 +44,10 @@ public IEnumerable GetChildNodeObjects(object parentNodeData, ITreeNode node) { - var pipingData = ((PipingCalculationInputs) parentNodeData).PipingData.Output; - if (pipingData != null) + var pipingOutput = ((PipingCalculationInputs) parentNodeData).PipingData.Output; + if (pipingOutput != null) { - yield return pipingData; + yield return pipingOutput; } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingOutputNodePresenter.cs =================================================================== diff -u -r8df04aa7166563cc67a1b7e70f9f4b8867e454b7 -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingOutputNodePresenter.cs (.../PipingOutputNodePresenter.cs) (revision 8df04aa7166563cc67a1b7e70f9f4b8867e454b7) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/NodePresenters/PipingOutputNodePresenter.cs (.../PipingOutputNodePresenter.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -1,91 +1,31 @@ -using System; -using System.Collections; -using System.ComponentModel; -using System.Windows.Forms; -using Core.Common.Controls; -using Core.Common.Utils.Collections; +using Core.Common.Controls; using Ringtoets.Piping.Data; - +using Ringtoets.Piping.Forms.PresentationObjects; using Ringtoets.Piping.Forms.Properties; namespace Ringtoets.Piping.Forms.NodePresenters { - public class PipingOutputNodePresenter : ITreeNodePresenter + public class PipingOutputNodePresenter : PipingNodePresenterBase { - public ITreeView TreeView { get; set; } - - public Type NodeTagType + protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, PipingOutput nodeData) { - get - { - return typeof(PipingOutput); - } - } - - public void UpdateNode(ITreeNode parentNode, ITreeNode node, object nodeData) - { node.Text = Resources.PipingOutput_DisplayName; node.Image = Resources.PipingIcon; } - public IEnumerable GetChildNodeObjects(object parentNodeData, ITreeNode node) + protected override bool CanRemove(object parentNodeData, PipingOutput nodeData) { - yield break; + return true; } - public bool CanRenameNode(ITreeNode node) + protected override bool RemoveNodeData(object parentNodeData, PipingOutput nodeData) { - return false; - } + var pipingCalculationInputs = (PipingCalculationInputs)parentNodeData; - public bool CanRenameNodeTo(ITreeNode node, string newName) - { - return false; - } + pipingCalculationInputs.ClearOutput(); + pipingCalculationInputs.NotifyObservers(); - public void OnNodeRenamed(object nodeData, string newName) - { - throw new InvalidOperationException(string.Format("Cannot rename tree node of type {0}.", GetType().Name)); + return true; } - - public void OnNodeChecked(ITreeNode node) {} - - public DragOperations CanDrag(object nodeData) - { - return DragOperations.None; - } - - public DragOperations CanDrop(object item, ITreeNode sourceNode, ITreeNode targetNode, DragOperations validOperations) - { - return DragOperations.None; - } - - public bool CanInsert(object item, ITreeNode sourceNode, ITreeNode targetNode) - { - return false; - } - - public void OnDragDrop(object item, object sourceParentNodeData, object targetParentNodeData, DragOperations operation, int position) {} - - public void OnNodeSelected(object nodeData) {} - - public ContextMenuStrip GetContextMenu(ITreeNode sender, object nodeData) - { - return null; - } - - public void OnPropertyChanged(object sender, ITreeNode node, PropertyChangedEventArgs e) {} - - public void OnCollectionChanged(object sender, NotifyCollectionChangingEventArgs e) {} - - public bool CanRemove(object parentNodeData, object nodeData) - { - return false; - } - - public bool RemoveNodeData(object parentNodeData, object nodeData) - { - throw new InvalidOperationException(String.Format("Cannot delete node of type {0}.", GetType().Name)); - } } } \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationInputs.cs =================================================================== diff -u -r2a90c0c1be6114f72af65c42f0a6f334b30e4755 -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationInputs.cs (.../PipingCalculationInputs.cs) (revision 2a90c0c1be6114f72af65c42f0a6f334b30e4755) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/PresentationObjects/PipingCalculationInputs.cs (.../PipingCalculationInputs.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -55,5 +55,13 @@ } #endregion + + /// + /// Clears the output of the . + /// + public void ClearOutput() + { + PipingData.ClearOutput(); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingDataTest.cs =================================================================== diff -u -r5076e379f409c3b5ba41eb98256e3dd5d140571c -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingDataTest.cs (.../PipingDataTest.cs) (revision 5076e379f409c3b5ba41eb98256e3dd5d140571c) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingDataTest.cs (.../PipingDataTest.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -1,7 +1,7 @@ using Core.Common.Base; using NUnit.Framework; using Rhino.Mocks; - +using Ringtoets.Piping.Calculation.TestUtil; using Ringtoets.Piping.Data.Probabilistics; namespace Ringtoets.Piping.Data.Test @@ -157,5 +157,21 @@ // Call & Assert pipingData.Detach(observer); } + + [Test] + public void ClearOutput_Always_SetsOutputToNull() + { + // Setup + var data = new PipingData + { + Output = new TestPipingOutput() + }; + + // Call + data.ClearOutput(); + + // Assert + Assert.IsNull(data.Output); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/Ringtoets.Piping.Data.Test.csproj =================================================================== diff -u -r602479eb3666493485aee246d56b08958a6fc958 -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/Ringtoets.Piping.Data.Test.csproj (.../Ringtoets.Piping.Data.Test.csproj) (revision 602479eb3666493485aee246d56b08958a6fc958) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/Ringtoets.Piping.Data.Test.csproj (.../Ringtoets.Piping.Data.Test.csproj) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -78,6 +78,10 @@ {ce994cc9-6f6a-48ac-b4be-02c30a21f4db} Ringtoets.Piping.Data + + {27E0A5C9-3ABF-426A-A3DA-7D0B83A218C8} + Ringtoets.Piping.Calculation.TestUtil + {955E574D-67CE-4347-AA6B-7DF8A04ED754} Ringtoets.Piping.Data.TestUtil Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingOutputNodePresenterTest.cs =================================================================== diff -u -ra950714ad9510756331d862aa35695fa0b2ed03b -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingOutputNodePresenterTest.cs (.../PipingOutputNodePresenterTest.cs) (revision a950714ad9510756331d862aa35695fa0b2ed03b) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/NodePresenters/PipingOutputNodePresenterTest.cs (.../PipingOutputNodePresenterTest.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -5,10 +5,11 @@ using Core.Common.Utils.Collections; using NUnit.Framework; using Rhino.Mocks; - +using Ringtoets.Piping.Calculation.TestUtil; using Ringtoets.Piping.Data; using Ringtoets.Piping.Forms.NodePresenters; +using Ringtoets.Piping.Forms.PresentationObjects; using Ringtoets.Piping.Forms.Test.Helper; using WtiFormsResources = Ringtoets.Piping.Forms.Properties.Resources; @@ -53,280 +54,130 @@ } [Test] - public void GetChildNodeObjects_Always_ReturnNoChildNodes() + public void GetContextMenu_Always_ReturnsNull() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - var output = PipingOutputCreator.Create(); - - // Call - var children = nodePresenter.GetChildNodeObjects(output, nodeMock); - - // Assert - Assert.AreEqual(0, children.Count()); - mocks.VerifyAll(); // Expect no calls on tree node - } - - [Test] - public void CanRenameNode_Always_ReturnFalse() - { - // Setup - var mocks = new MockRepository(); - var nodeMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - var renameAllowed = nodePresenter.CanRenameNode(nodeMock); - - // Assert - Assert.IsFalse(renameAllowed); - mocks.VerifyAll(); // Expect no calls on tree node - } - - [Test] - public void CanRenameNodeTo_Always_ReturnFalse() - { - // Setup - var mocks = new MockRepository(); - var nodeMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - var renameAllowed = nodePresenter.CanRenameNodeTo(nodeMock, ""); - - // Assert - Assert.IsFalse(renameAllowed); - mocks.VerifyAll(); // Expect no calls on tree node - } - - [Test] - public void OnNodeRenamed_Always_ThrowInvalidOperationException() - { - // Setup - var mocks = new MockRepository(); - var nodeMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - TestDelegate call = () => { nodePresenter.OnNodeRenamed(nodeMock, ""); }; - - // Assert - var exception = Assert.Throws(call); - var expectedMessage = string.Format("Cannot rename tree node of type {0}.", nodePresenter.GetType().Name); - Assert.AreEqual(expectedMessage, exception.Message); - mocks.VerifyAll(); // Expect no calls on tree node - } - - [Test] - public void OnNodeChecked_Always_DoNothing() - { - // Setup - var mocks = new MockRepository(); - var nodeMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - nodePresenter.OnNodeChecked(nodeMock); - - // Assert - mocks.VerifyAll(); // Expect no calls on tree node - } - - [Test] - public void CanDrag_Always_ReturnNone() - { - // Setup - var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new PipingOutputNodePresenter(); // Call - DragOperations dragAllowed = nodePresenter.CanDrag(dataMock); + ContextMenuStrip contextMenu = nodePresenter.GetContextMenu(nodeMock, dataMock); // Assert - Assert.AreEqual(DragOperations.None, dragAllowed); - mocks.VerifyAll(); - } - - [Test] - public void CanDrop_Always_ReturnNone() - { - // Setup - var mocks = new MockRepository(); - var dataMock = mocks.StrictMock(); - var sourceMock = mocks.StrictMock(); - var targetMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - DragOperations dropAllowed = nodePresenter.CanDrop(dataMock, sourceMock, targetMock, DragOperations.Move); - - // Assert - Assert.AreEqual(DragOperations.None, dropAllowed); - mocks.VerifyAll(); // Expect no calls on mocks. - } - - [Test] - public void CanInsert_Always_ReturnFalse() - { - // Setup - var mocks = new MockRepository(); - var dataMock = mocks.StrictMock(); - var sourceMock = mocks.StrictMock(); - var targetMock = mocks.StrictMock(); - mocks.ReplayAll(); - - var nodePresenter = new PipingOutputNodePresenter(); - - // Call - bool insertionAllowed = nodePresenter.CanInsert(dataMock, sourceMock, targetMock); - - // Assert - Assert.IsFalse(insertionAllowed); + Assert.IsNull(contextMenu); mocks.VerifyAll(); // Expect no calls on arguments } [Test] - public void OnDragDrop_Always_DoNothing() + public void CanRemove_NotPipingOutput_ThrowsInvalidCastException() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); - var sourceParentNodeMock = mocks.StrictMock(); - var targetParentNodeDataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new PipingOutputNodePresenter(); // Call - nodePresenter.OnDragDrop(dataMock, sourceParentNodeMock, targetParentNodeDataMock, DragOperations.Move, 2); + TestDelegate test = () => nodePresenter.CanRemove(null, dataMock); // Assert + Assert.Throws(test); mocks.VerifyAll(); // Expect no calls on arguments } [Test] - public void OnNodeSelected_Always_DoNothing() + public void CanRemove_PipingOutput_ReturnsTrue() { // Setup var mocks = new MockRepository(); - var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new PipingOutputNodePresenter(); // Call - nodePresenter.OnNodeSelected(dataMock); + var result = nodePresenter.CanRemove(null, new TestPipingOutput()); // Assert + Assert.IsTrue(result); mocks.VerifyAll(); // Expect no calls on arguments } [Test] - public void GetContextMenu_Always_ReturnsNull() + public void RemoveNodeData_NullObject_ThrowsNullReferenceException() { // Setup - var mocks = new MockRepository(); - var nodeMock = mocks.StrictMock(); - var dataMock = mocks.StrictMock(); - mocks.ReplayAll(); - var nodePresenter = new PipingOutputNodePresenter(); // Call - ContextMenuStrip contextMenu = nodePresenter.GetContextMenu(nodeMock, dataMock); + TestDelegate removeAction = () => nodePresenter.RemoveNodeData(null, null); // Assert - Assert.IsNull(contextMenu); - mocks.VerifyAll(); // Expect no calls on arguments + Assert.Throws(removeAction); } [Test] - public void OnPropertyChange_Always_DoNothing() + public void RemoveNodeData_Object_ThrowsInvalidCastException() { // Setup - var mocks = new MockRepository(); - var dataMock = mocks.StrictMock(); - var nodeMock = mocks.StrictMock(); - var eventArgsMock = mocks.StrictMock(""); - mocks.ReplayAll(); - var nodePresenter = new PipingOutputNodePresenter(); // Call - nodePresenter.OnPropertyChanged(dataMock, nodeMock, eventArgsMock); + TestDelegate removeAction = () => nodePresenter.RemoveNodeData(null, new object()); // Assert - mocks.VerifyAll(); // Expect no calls on arguments + Assert.Throws(removeAction); } [Test] - public void OnCollectionChange_Always_DoNothing() + public void RemoveNodeData_NullParent_ThrowsNullReferenceException() { // Setup - var mocks = new MockRepository(); - var dataMock = mocks.StrictMock(); - var eventArgsMock = mocks.StrictMock(); - mocks.ReplayAll(); - var nodePresenter = new PipingOutputNodePresenter(); // Call - nodePresenter.OnCollectionChanged(dataMock, eventArgsMock); + TestDelegate removeAction = () => nodePresenter.RemoveNodeData(null, new TestPipingOutput()); // Assert - mocks.VerifyAll(); // Expect no calls on arguments + Assert.Throws(removeAction); } [Test] - public void CanRemove_Always_ReturnFalse() + public void RemoveNodeData_WithParentNotContainingPipingData_ThrowsNullReferenceException() { // Setup - var mocks = new MockRepository(); - var dataMock = mocks.StrictMock(); - var nodeMock = mocks.StrictMock(); - mocks.ReplayAll(); - var nodePresenter = new PipingOutputNodePresenter(); // Call - bool removalAllowed = nodePresenter.CanRemove(dataMock, nodeMock); + TestDelegate removeAction = () => nodePresenter.RemoveNodeData(new PipingCalculationInputs(), new TestPipingOutput()); // Assert - Assert.IsFalse(removalAllowed); - mocks.VerifyAll(); // Expect no calls on arguments + Assert.Throws(removeAction); } [Test] - public void RemoveNodeData_Always_ThrowsInvalidOperationException() + public void RemoveNodeData_WithParentContainingOutput_OutputCleared() { // Setup var nodePresenter = new PipingOutputNodePresenter(); + var pipingCalculationInputs = new PipingCalculationInputs + { + PipingData = new PipingData + { + Output = new TestPipingOutput() + } + }; + // Call - TestDelegate removeAction = () => nodePresenter.RemoveNodeData(null, null); + nodePresenter.RemoveNodeData(pipingCalculationInputs, new TestPipingOutput()); // Assert - var exception = Assert.Throws(removeAction); - var expectedMessage = string.Format("Cannot delete node of type {0}.", nodePresenter.GetType().Name); - Assert.AreEqual(expectedMessage, exception.Message); + Assert.IsNull(pipingCalculationInputs.PipingData.Output); } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationInputsTest.cs =================================================================== diff -u -r2a90c0c1be6114f72af65c42f0a6f334b30e4755 -r78aece3188a23a908e7c0a47e53e5facd1c7edb5 --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationInputsTest.cs (.../PipingCalculationInputsTest.cs) (revision 2a90c0c1be6114f72af65c42f0a6f334b30e4755) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PresentationObjects/PipingCalculationInputsTest.cs (.../PipingCalculationInputsTest.cs) (revision 78aece3188a23a908e7c0a47e53e5facd1c7edb5) @@ -2,7 +2,7 @@ using NUnit.Framework; using Rhino.Mocks; - +using Ringtoets.Piping.Calculation.TestUtil; using Ringtoets.Piping.Data; using Ringtoets.Piping.Forms.PresentationObjects; @@ -90,5 +90,24 @@ // Assert mocks.VerifyAll(); } + + [Test] + public void ClearOutput_Always_SetsOutputToNull() + { + // Setup + var inputs = new PipingCalculationInputs + { + PipingData = new PipingData + { + Output = new TestPipingOutput() + } + }; + + // Call + inputs.ClearOutput(); + + // Assert + Assert.IsNull(inputs.PipingData.Output); + } } } \ No newline at end of file