Index: Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs =================================================================== diff -u -rb190a14336e0d8fe9aec34e81a68194081c76155 -r6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b --- Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs (.../PipingFailureMechanismContextPropertiesTest.cs) (revision b190a14336e0d8fe9aec34e81a68194081c76155) +++ Ringtoets/Piping/test/Ringtoets.Piping.Forms.Test/PropertyClasses/PipingFailureMechanismContextPropertiesTest.cs (.../PipingFailureMechanismContextPropertiesTest.cs) (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -109,7 +109,6 @@ var generalCategory = "Algemeen"; var heaveCategory = "Heave"; var modelFactorCategory = "Modelinstellingen"; - var upliftCategory = "Opbarsten"; var semiProbabilisticCategory = "Semi-probabilistische parameters"; var sellmeijerCategory = "Terugschrijdende erosie (Sellmeijer)"; Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Ringtoets.StabilityPointStructures.Forms.csproj =================================================================== diff -u -rbf7824face851bd1ca833bd4337c9f80efedac00 -r6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Ringtoets.StabilityPointStructures.Forms.csproj (.../Ringtoets.StabilityPointStructures.Forms.csproj) (revision bf7824face851bd1ca833bd4337c9f80efedac00) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Forms/Ringtoets.StabilityPointStructures.Forms.csproj (.../Ringtoets.StabilityPointStructures.Forms.csproj) (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -34,6 +34,7 @@ + @@ -55,6 +56,13 @@ + + + UserControl + + + StabilityPointStructuresScenariosView.cs + UserControl @@ -117,6 +125,9 @@ Resources.Designer.cs Designer + + StabilityPointStructuresScenariosView.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file Index: Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs =================================================================== diff -u -r60233a739e6b40a3182f53bb9ebd923703bd745c -r6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b --- Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision 60233a739e6b40a3182f53bb9ebd923703bd745c) +++ Ringtoets/StabilityPointStructures/src/Ringtoets.StabilityPointStructures.Plugin/StabilityPointStructuresPlugin.cs (.../StabilityPointStructuresPlugin.cs) (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -77,6 +77,15 @@ GetViewData = context => context.WrappedData, AfterCreate = (view, context) => view.FailureMechanism = context.FailureMechanism }; + + yield return new ViewInfo + { + GetViewData = context => context.WrappedData, + GetViewName = (view, calculationGroup) => RingtoetsCommonFormsResources.Scenarios_DisplayName, + Image = RingtoetsCommonFormsResources.ScenariosIcon, + AfterCreate = (view, context) => view.FailureMechanism = context.ParentFailureMechanism, + CloseForData = CloseScenariosViewForData + }; } /// @@ -193,8 +202,33 @@ #endregion + #region StabilityPointStructuresScenariosView ViewInfo + + private static bool CloseScenariosViewForData(StabilityPointStructuresScenariosView view, object removedData) + { + var failureMechanism = removedData as StabilityPointStructuresFailureMechanism; + + var failureMechanismContext = removedData as StabilityPointStructuresFailureMechanismContext; + if (failureMechanismContext != null) + { + failureMechanism = failureMechanismContext.WrappedData; + } + + var assessmentSection = removedData as IAssessmentSection; + if (assessmentSection != null) + { + failureMechanism = assessmentSection.GetFailureMechanisms() + .OfType() + .FirstOrDefault(); + } + + return failureMechanism != null && ReferenceEquals(view.Data, failureMechanism.CalculationsGroup); + } + #endregion + #endregion + #region Validation and Calculation private static string ValidateAllDataAvailableAndGetErrorMessage(IAssessmentSection assessmentSection, StabilityPointStructuresFailureMechanism failureMechanism) @@ -414,15 +448,15 @@ private StrictContextMenuItem CreateGenerateStabilityPointStructuresCalculationsItem(StabilityPointStructuresCalculationGroupContext nodeData) { - ObservableList closingStructures = nodeData.FailureMechanism.StabilityPointStructures; - bool structuresAvailable = closingStructures.Any(); + ObservableList stabilityPointStructures = nodeData.FailureMechanism.StabilityPointStructures; + bool structuresAvailable = stabilityPointStructures.Any(); - string closingStructuresCalculationGroupContextToolTip = structuresAvailable + string stabilityPointStructuresCalculationGroupContextToolTip = structuresAvailable ? RingtoetsCommonFormsResources.StructuresPlugin_Generate_calculations_for_selected_structures : RingtoetsCommonFormsResources.StructuresPlugin_No_structures_to_generate_for; return new StrictContextMenuItem(RingtoetsCommonFormsResources.CalculationsGroup_Generate_calculations, - closingStructuresCalculationGroupContextToolTip, + stabilityPointStructuresCalculationGroupContextToolTip, RingtoetsCommonFormsResources.GenerateScenariosIcon, (sender, args) => { ShowStabilityPointStructuresSelectionDialog(nodeData); }) { Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Ringtoets.StabilityPointStructures.Forms.Test.csproj =================================================================== diff -u -r9463e81bcdb5801a11cbc391c73961438f697551 -r6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Ringtoets.StabilityPointStructures.Forms.Test.csproj (.../Ringtoets.StabilityPointStructures.Forms.Test.csproj) (revision 9463e81bcdb5801a11cbc391c73961438f697551) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Ringtoets.StabilityPointStructures.Forms.Test.csproj (.../Ringtoets.StabilityPointStructures.Forms.Test.csproj) (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -78,6 +78,8 @@ + + Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresScenarioRowTest.cs =================================================================== diff -u --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresScenarioRowTest.cs (revision 0) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresScenarioRowTest.cs (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -0,0 +1,120 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; +using Core.Common.Base; +using Core.Common.Base.Geometry; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.StabilityPointStructures.Data; +using Ringtoets.StabilityPointStructures.Forms.Views; +using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Data.Structures; +using Ringtoets.Common.Forms; + +namespace Ringtoets.StabilityPointStructures.Forms.Test.Views +{ + [TestFixture] + public class StabilityPointStructuresScenarioRowTest + { + [Test] + public void Constructor_ExpectedValues() + { + // Setup + var section = new FailureMechanismSection("testName", new[] + { + new Point2D(1.1, 2.2), + new Point2D(3.3, 4.4) + }); + var sectionResult = new StabilityPointStructuresFailureMechanismSectionResult(section); + + // Call + var row = new StabilityPointStructuresScenarioRow(sectionResult); + + // Assert + Assert.AreSame(sectionResult.Section.Name, row.Name); + Assert.AreSame(sectionResult.Calculation, row.Calculation); + Assert.IsInstanceOf>>(row); + } + + [Test] + public void Constructor_SectionResultIsNull_ThrowArgumentNullException() + { + // Call + TestDelegate call = () => new StabilityPointStructuresScenarioRow(null); + + // Assert + string paramName = Assert.Throws(call).ParamName; + Assert.AreSame("sectionResult", paramName); + } + + [Test] + public void Calculation_SetNewValue_UpdatesSectionResultCalculation() + { + // Setup + var section = new FailureMechanismSection("haha", new[] + { + new Point2D(1.1, 2.2), + new Point2D(3.3, 4.4) + }); + var sectionResult = new StabilityPointStructuresFailureMechanismSectionResult(section); + + var row = new StabilityPointStructuresScenarioRow(sectionResult); + + var calculation = new StructuresCalculation(); + + // Call + row.Calculation = calculation; + + // Assert + Assert.AreSame(calculation, row.Calculation); + Assert.AreSame(calculation, sectionResult.Calculation); + } + + [Test] + public void Calculation_SetNewValue_NotifyObserversOnSectionResult() + { + // Setup + var mocks = new MockRepository(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var section = new FailureMechanismSection("testSection", new[] + { + new Point2D(1.1, 2.2), + new Point2D(3.3, 4.4) + }); + var sectionResult = new StabilityPointStructuresFailureMechanismSectionResult(section); + sectionResult.Attach(observer); + + var row = new StabilityPointStructuresScenarioRow(sectionResult); + + var calculation = new StructuresCalculation(); + + // Call + row.Calculation = calculation; + + // Assert + mocks.VerifyAll(); // Assert observer is notified + } + } +} \ No newline at end of file Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresScenariosViewTest.cs =================================================================== diff -u --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresScenariosViewTest.cs (revision 0) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Forms.Test/Views/StabilityPointStructuresScenariosViewTest.cs (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -0,0 +1,409 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using Core.Common.Base.Geometry; +using Core.Common.Controls.DataGrid; +using Core.Common.Controls.Views; +using NUnit.Extensions.Forms; +using NUnit.Framework; +using Ringtoets.StabilityPointStructures.Data; +using Ringtoets.StabilityPointStructures.Forms.Views; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; +using Ringtoets.Common.Data.Structures; +using Ringtoets.Common.Forms; + +namespace Ringtoets.StabilityPointStructures.Forms.Test.Views +{ + [TestFixture] + public class StabilityPointStructuresScenariosViewTest + { + private Form testForm; + + [SetUp] + public void Setup() + { + testForm = new Form(); + } + + [TearDown] + public void TearDown() + { + testForm.Dispose(); + } + + [Test] + public void DefaultConstructor_DataGridViewCorrectlyInitialized() + { + // Call + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + // Assert + Assert.IsInstanceOf(view); + Assert.IsInstanceOf(view); + Assert.IsTrue(view.AutoScroll); + Assert.IsNull(view.Data); + Assert.IsNull(view.FailureMechanism); + + var scenarioSelectionControl = new ControlTester("scenarioSelectionControl").TheObject as ScenarioSelectionControl; + + Assert.NotNull(scenarioSelectionControl); + Assert.AreEqual(new Size(0, 0), scenarioSelectionControl.MinimumSize); + } + } + + [Test] + public void Data_ValidDataSet_ValidData() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + var calculationGroup = new CalculationGroup(); + + // Call + view.Data = calculationGroup; + + // Assert + Assert.AreSame(calculationGroup, view.Data); + } + } + + [Test] + public void FailureMechanism_ValidFailureMechanismSet_ValidFailureMechanism() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + // Call + view.FailureMechanism = failureMechanism; + + // Assert + Assert.AreSame(failureMechanism, view.FailureMechanism); + } + } + + [Test] + public void Data_WithFailureMechanism_UpdateScenarioControl() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.FailureMechanism = failureMechanism; + + // Call + view.Data = failureMechanism.CalculationsGroup; + + // Assert + AssertDataGridView(failureMechanism, false, new[] + { + new[] + { + "", + "CalculationA" + }, + new[] + { + "", + "CalculationB" + } + }); + } + } + + [Test] + public void Data_SetToNullAfterGridViewShowsData_ClearsScenarioControl() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.FailureMechanism = failureMechanism; + view.Data = failureMechanism.CalculationsGroup; + + // Call + view.Data = null; + + // Assert + AssertDataGridView(failureMechanism, true); + } + } + + [Test] + public void FailureMechanism_WithData_UpdateScenarioControl() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.Data = failureMechanism.CalculationsGroup; + + // Call + view.FailureMechanism = failureMechanism; + + // Assert + AssertDataGridView(failureMechanism, false, new[] + { + new[] + { + "", + "CalculationA" + }, + new[] + { + "", + "CalculationB" + } + }); + } + } + + [Test] + public void FailureMechanism_WithoutData_ClearsScenarioControl() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.Data = failureMechanism.CalculationsGroup; + view.FailureMechanism = failureMechanism; + + // Call + view.FailureMechanism = null; + + // Assert + AssertDataGridView(failureMechanism, true); + } + } + + [Test] + public void NotifyFailureMechanism_SectionsAddedAfterFullInitialization_NewRowAddedToView() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.Data = failureMechanism.CalculationsGroup; + view.FailureMechanism = failureMechanism; + + view.FailureMechanism.AddSection(new FailureMechanismSection("SectionC", new[] + { + view.FailureMechanism.Sections.Last().GetLast(), + new Point2D(30, 30) + })); + + // Call + failureMechanism.NotifyObservers(); + + // Assert + AssertDataGridView(failureMechanism, false, new[] + { + new[] + { + "", + "CalculationA" + }, + new[] + { + "", + "CalculationB" + }, + new[] + { + "" + } + }); + } + } + + [Test] + public void NotifyCalculation_CalculationChangedDikeProfile_CalculationMovedToOtherSectionResultOptions() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.Data = failureMechanism.CalculationsGroup; + view.FailureMechanism = failureMechanism; + + var calculationA = (StructuresCalculation) failureMechanism.CalculationsGroup.Children[0]; + var calculationB = (StructuresCalculation) failureMechanism.CalculationsGroup.Children[1]; + + calculationA.InputParameters.Structure = calculationB.InputParameters.Structure; + + // Call + calculationA.NotifyObservers(); + + // Assert + AssertDataGridView(failureMechanism, false, new[] + { + new[] + { + "" + }, + new[] + { + "", + "CalculationA", + "CalculationB" + }, + }); + } + } + + [Test] + public void NotifyCalculationGroup_CalculationAdded_CalculationAddedToSectionResultOptions() + { + // Setup + using (StabilityPointStructuresScenariosView view = ShowScenariosView()) + { + StabilityPointStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); + view.Data = failureMechanism.CalculationsGroup; + view.FailureMechanism = failureMechanism; + + var calculationB = ((StructuresCalculation) failureMechanism.CalculationsGroup.Children[1]); + var calculationC = new StructuresCalculation + { + Name = "CalculationC", + InputParameters = + { + Structure = calculationB.InputParameters.Structure + } + }; + failureMechanism.CalculationsGroup.Children.Add(calculationC); + + calculationC.InputParameters.Structure = calculationC.InputParameters.Structure; + + // Call + failureMechanism.CalculationsGroup.NotifyObservers(); + + // Assert + AssertDataGridView(failureMechanism, false, new[] + { + new[] + { + "", + "CalculationA" + }, + new[] + { + "", + "CalculationB", + "CalculationC" + }, + }); + } + } + + private void AssertDataGridView( + StabilityPointStructuresFailureMechanism failureMechanism, + bool shouldBeCleared, + string[][] expectedComboBoxItemTexts = null) + { + var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; + var rowCount = dataGridView.RowCount; + + if (shouldBeCleared) + { + Assert.AreEqual(0, rowCount); + } + else + { + var dataGridViewColumn = (DataGridViewComboBoxColumn) dataGridView.Columns[1]; + + Assert.AreEqual(failureMechanism.SectionResults.Count(), rowCount); + Assert.AreEqual(failureMechanism.Calculations.Count(), dataGridViewColumn.Items.Count); + + for (int i = 0; i < rowCount; i++) + { + var cell = (DataGridViewComboBoxCell) dataGridView[1, i]; + var items = cell.Items.OfType>(); + Assert.AreEqual(expectedComboBoxItemTexts[i], items.Select(r => r.DisplayName)); + } + } + } + + private StabilityPointStructuresFailureMechanism CreateCompleteFailureMechanism() + { + StabilityPointStructuresFailureMechanism failureMechanism = new StabilityPointStructuresFailureMechanism(); + var matchingPointA = new Point2D(0, 0); + var matchingPointB = new Point2D(20, 20); + var calculationA = new StructuresCalculation + { + Name = "CalculationA", + InputParameters = + { + Structure = CreateStructure(matchingPointA) + } + }; + var calculationB = new StructuresCalculation + { + Name = "CalculationB", + InputParameters = + { + Structure = CreateStructure(matchingPointB) + } + }; + Point2D connectionPoint = new Point2D(10, 10); + var failureMechanismSectionA = new FailureMechanismSection("sectionA", new[] + { + matchingPointA, + connectionPoint + }); + var failureMechanismSectionB = new FailureMechanismSection("sectionB", new[] + { + connectionPoint, + matchingPointB + }); + + failureMechanism.CalculationsGroup.Children.Add(calculationA); + failureMechanism.CalculationsGroup.Children.Add(calculationB); + failureMechanism.AddSection(failureMechanismSectionA); + failureMechanism.AddSection(failureMechanismSectionB); + + return failureMechanism; + } + + private StabilityPointStructure CreateStructure(Point2D location) + { + return new StabilityPointStructure(new StabilityPointStructure.ConstructionProperties + { + Id = "1", + Name = "", + Location = location + }); + } + + private StabilityPointStructuresScenariosView ShowScenariosView() + { + var scenariosView = new StabilityPointStructuresScenariosView(); + testForm.Controls.Add(scenariosView); + testForm.Show(); + + return scenariosView; + } + } +} \ No newline at end of file Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/Ringtoets.StabilityPointStructures.Plugin.Test.csproj =================================================================== diff -u -r44837ec463259677b2bc84d05e020de9fb5b782c -r6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/Ringtoets.StabilityPointStructures.Plugin.Test.csproj (.../Ringtoets.StabilityPointStructures.Plugin.Test.csproj) (revision 44837ec463259677b2bc84d05e020de9fb5b782c) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/Ringtoets.StabilityPointStructures.Plugin.Test.csproj (.../Ringtoets.StabilityPointStructures.Plugin.Test.csproj) (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -57,6 +57,7 @@ + Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/StabilityPointStructuresPluginTest.cs =================================================================== diff -u -r9463e81bcdb5801a11cbc391c73961438f697551 -r6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/StabilityPointStructuresPluginTest.cs (.../StabilityPointStructuresPluginTest.cs) (revision 9463e81bcdb5801a11cbc391c73961438f697551) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/StabilityPointStructuresPluginTest.cs (.../StabilityPointStructuresPluginTest.cs) (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -124,11 +124,10 @@ ViewInfo[] viewInfos = plugin.GetViewInfos().ToArray(); // Assert - Assert.AreEqual(1, viewInfos.Length); - ViewInfo stabilityPointStructuresResultViewInfo = viewInfos.Single(vi => vi.DataType == typeof(FailureMechanismSectionResultContext)); - Assert.AreEqual(typeof(IEnumerable), stabilityPointStructuresResultViewInfo.ViewDataType); - Assert.AreEqual(typeof(StabilityPointStructuresFailureMechanismResultView), stabilityPointStructuresResultViewInfo.ViewType); - TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.FailureMechanismSectionResultIcon, stabilityPointStructuresResultViewInfo.Image); + Assert.AreEqual(2, viewInfos.Length); + + Assert.IsTrue(viewInfos.Any(vi => vi.DataType == typeof(FailureMechanismSectionResultContext))); + Assert.IsTrue(viewInfos.Any(vi => vi.ViewType == typeof(StabilityPointStructuresScenariosView))); } } Index: Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/ViewInfos/StabilityPointStructuresScenariosViewInfoTest.cs =================================================================== diff -u --- Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/ViewInfos/StabilityPointStructuresScenariosViewInfoTest.cs (revision 0) +++ Ringtoets/StabilityPointStructures/test/Ringtoets.StabilityPointStructures.Plugin.Test/ViewInfos/StabilityPointStructuresScenariosViewInfoTest.cs (revision 6af0f01bd9b9b6da145bea0b4f8b8b1b4b09e02b) @@ -0,0 +1,391 @@ +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System.Drawing; +using System.Linq; +using Core.Common.Gui.Plugin; +using Core.Common.TestUtil; +using NUnit.Framework; +using Rhino.Mocks; +using Ringtoets.StabilityPointStructures.Data; +using Ringtoets.StabilityPointStructures.Forms.PresentationObjects; +using Ringtoets.StabilityPointStructures.Forms.Views; +using Ringtoets.Common.Data.AssessmentSection; +using Ringtoets.Common.Data.Calculation; +using Ringtoets.Common.Data.FailureMechanism; +using RingtoetsCommonFormsResources = Ringtoets.Common.Forms.Properties.Resources; + +namespace Ringtoets.StabilityPointStructures.Plugin.Test.ViewInfos +{ + [TestFixture] + public class StabilityPointStructuresScenariosViewInfoTest + { + private StabilityPointStructuresPlugin plugin; + private ViewInfo info; + private MockRepository mocks; + + [SetUp] + public void SetUp() + { + plugin = new StabilityPointStructuresPlugin(); + info = plugin.GetViewInfos().First(tni => tni.ViewType == typeof(StabilityPointStructuresScenariosView)); + mocks = new MockRepository(); + } + + [TearDown] + public void TearDown() + { + plugin.Dispose(); + } + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Assert + Assert.AreEqual(typeof(StabilityPointStructuresScenariosContext), info.DataType); + Assert.AreEqual(typeof(CalculationGroup), info.ViewDataType); + } + + [Test] + public void GetViewName_Always_ReturnViewName() + { + // Setup + using (var view = new StabilityPointStructuresScenariosView()) + { + var viewData = new CalculationGroup(); + + // Call + string viewName = info.GetViewName(view, viewData); + + // Assert + Assert.AreEqual("Scenario's", viewName); + } + } + + [Test] + public void GetViewData_Always_ReturnWrappedData() + { + // Setup + var calculationGroup = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context = new StabilityPointStructuresScenariosContext(calculationGroup, failureMechanism); + + // Call + object viewData = info.GetViewData(context); + + // Assert + Assert.AreSame(calculationGroup, viewData); + } + + [Test] + public void Image_Always_ReturnScenariosIcon() + { + // Call + Image image = info.Image; + + // Assert + TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.ScenariosIcon, image); + } + + [Test] + public void AfterCreate_Always_SetsSpecificPropertiesToView() + { + // Setup + using (var view = new StabilityPointStructuresScenariosView()) + { + var group = new CalculationGroup(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var context = new StabilityPointStructuresScenariosContext(group, failureMechanism); + + // Call + info.AfterCreate(view, context); + + // Assert + Assert.AreSame(failureMechanism, view.FailureMechanism); + } + } + + [Test] + public void CloseForData_AssessmentSectionRemovedWithoutFailureMechanism_ReturnFalse() + { + // Setup + using (var view = new StabilityPointStructuresScenariosView + { + Data = new CalculationGroup() + }) + { + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(section => section.GetFailureMechanisms()).Return(new IFailureMechanism[0]); + mocks.ReplayAll(); + + // Call + bool closeForData = info.CloseForData(view, assessmentSection); + + // Assert + Assert.IsFalse(closeForData); + mocks.VerifyAll(); + } + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedAssessmentSection_ReturnFalse() + { + // Setup + using (var view = new StabilityPointStructuresScenariosView + { + Data = new CalculationGroup() + }) + { + var unrelatedFailureMechanism = new StabilityPointStructuresFailureMechanism(); + + var assessmentSection = mocks.Stub(); + assessmentSection.Expect(asm => asm.GetFailureMechanisms()).Return(new[] + { + unrelatedFailureMechanism + }); + mocks.ReplayAll(); + + // Precondition + Assert.AreNotSame(view.Data, unrelatedFailureMechanism.CalculationsGroup); + + // Call + bool closeForData = info.CloseForData(view, assessmentSection); + + // Assert + Assert.IsFalse(closeForData); + mocks.VerifyAll(); + } + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedAssessmentSection_ReturnTrue() + { + // Setup + var relatedFailureMechanism = new StabilityPointStructuresFailureMechanism(); + + using (var view = new StabilityPointStructuresScenariosView + { + Data = relatedFailureMechanism.CalculationsGroup + }) + { + var assessmentSection = mocks.Stub(); + assessmentSection.Expect(asm => asm.GetFailureMechanisms()).Return(new[] + { + relatedFailureMechanism + }); + mocks.ReplayAll(); + + // Precondition + Assert.AreSame(view.Data, relatedFailureMechanism.CalculationsGroup); + + // Call + bool closeForData = info.CloseForData(view, assessmentSection); + + // Assert + Assert.IsTrue(closeForData); + mocks.VerifyAll(); + } + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedFailureMechanism_ReturnFalse() + { + // Setup + using (var view = new StabilityPointStructuresScenariosView + { + Data = new CalculationGroup() + }) + { + // Call + bool closeForData = info.CloseForData(view, new StabilityPointStructuresFailureMechanism()); + + // Assert + Assert.IsFalse(closeForData); + } + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedFailureMechanism_ReturnTrue() + { + // Setup + var correspondingFailureMechanism = new StabilityPointStructuresFailureMechanism(); + using (var view = new StabilityPointStructuresScenariosView + { + Data = correspondingFailureMechanism.CalculationsGroup + }) + { + // Call + bool closeForData = info.CloseForData(view, correspondingFailureMechanism); + + // Assert + Assert.IsTrue(closeForData); + } + } + + [Test] + public void CloseForData_AssessmentSectionRemovedWithoutStabilityPointStructuresFailureMechanism_ReturnsFalse() + { + // Setup + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.GetFailureMechanisms()).Return(new IFailureMechanism[0]); + mocks.ReplayAll(); + + var view = new StabilityPointStructuresScenariosView + { + Data = new CalculationGroup() + }; + + // Call + bool closeForData = info.CloseForData(view, assessmentSectionMock); + + // Assert + Assert.IsFalse(closeForData); + mocks.VerifyAll(); + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedAssessmentSection_ReturnsFalse() + { + // Setup + var assessmentSectionMock = mocks.StrictMock(); + assessmentSectionMock.Expect(asm => asm.GetFailureMechanisms()).Return(new[] + { + new StabilityPointStructuresFailureMechanism() + }); + + mocks.ReplayAll(); + + var view = new StabilityPointStructuresScenariosView + { + Data = new CalculationGroup() + }; + + // Call + bool closeForData = info.CloseForData(view, assessmentSectionMock); + + // Assert + Assert.IsFalse(closeForData); + mocks.VerifyAll(); + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedAssessmentSection_ReturnsTrue() + { + // Setup + var assessmentSectionMock = mocks.StrictMock(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + assessmentSectionMock.Expect(asm => asm.GetFailureMechanisms()).Return(new[] + { + failureMechanism + }); + + mocks.ReplayAll(); + + var view = new StabilityPointStructuresScenariosView + { + Data = failureMechanism.CalculationsGroup + }; + + // Call + bool closeForData = info.CloseForData(view, assessmentSectionMock); + + // Assert + Assert.IsTrue(closeForData); + mocks.VerifyAll(); + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedFailureMechanism_ReturnsFalse() + { + // Setup + var view = new StabilityPointStructuresScenariosView(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + view.Data = new CalculationGroup(); + + // Call + bool closeForData = info.CloseForData(view, failureMechanism); + + // Assert + Assert.IsFalse(closeForData); + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedFailureMechanism_ReturnsTrue() + { + // Setup + var view = new StabilityPointStructuresScenariosView(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + + view.Data = failureMechanism.CalculationsGroup; + + // Call + bool closeForData = info.CloseForData(view, failureMechanism); + + // Assert + Assert.IsTrue(closeForData); + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedFailureMechanismContext_ReturnsFalse() + { + // Setup + var assessmentSectionMock = mocks.Stub(); + + mocks.ReplayAll(); + + var view = new StabilityPointStructuresScenariosView(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(new StabilityPointStructuresFailureMechanism(), assessmentSectionMock); + + view.Data = failureMechanism.CalculationsGroup; + + // Call + bool closeForData = info.CloseForData(view, failureMechanismContext); + + // Assert + Assert.IsFalse(closeForData); + mocks.VerifyAll(); + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedFailureMechanismContext_ReturnsTrue() + { + // Setup + var assessmentSectionMock = mocks.Stub(); + + mocks.ReplayAll(); + + var view = new StabilityPointStructuresScenariosView(); + var failureMechanism = new StabilityPointStructuresFailureMechanism(); + var failureMechanismContext = new StabilityPointStructuresFailureMechanismContext(failureMechanism, assessmentSectionMock); + + view.Data = failureMechanism.CalculationsGroup; + + // Call + bool closeForData = info.CloseForData(view, failureMechanismContext); + + // Assert + Assert.IsTrue(closeForData); + mocks.VerifyAll(); + } + } +} \ No newline at end of file