Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/HydraulicLoadsState/DuneErosionFailureMechanismView.cs =================================================================== diff -u -r1e9842d882c96a9bdde40560b7facfb8cf3db468 -r8ae7522403830ec33cc3543de6dd89f4490cc402 --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/HydraulicLoadsState/DuneErosionFailureMechanismView.cs (.../DuneErosionFailureMechanismView.cs) (revision 1e9842d882c96a9bdde40560b7facfb8cf3db468) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/HydraulicLoadsState/DuneErosionFailureMechanismView.cs (.../DuneErosionFailureMechanismView.cs) (revision 8ae7522403830ec33cc3543de6dd89f4490cc402) @@ -32,7 +32,7 @@ namespace Riskeer.DuneErosion.Forms.Views.HydraulicLoadsState { /// - /// This class is a view showing map data for a dune erosion failure mechanism. + /// Hydraulic loads state view showing map data for a dune erosion failure mechanism. /// public partial class DuneErosionFailureMechanismView : UserControl, IMapView { Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/RegistrationState/DuneErosionFailureMechanismView.cs =================================================================== diff -u --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/RegistrationState/DuneErosionFailureMechanismView.cs (revision 0) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/RegistrationState/DuneErosionFailureMechanismView.cs (revision 8ae7522403830ec33cc3543de6dd89f4490cc402) @@ -0,0 +1,125 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer 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 System.Collections.Generic; +using Core.Common.Base; +using Core.Components.Gis.Data; +using Riskeer.Common.Data.AssemblyTool; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Forms.Factories; +using Riskeer.Common.Forms.MapLayers; +using Riskeer.DuneErosion.Data; +using DuneErosionDataResources = Riskeer.DuneErosion.Data.Properties.Resources; + +namespace Riskeer.DuneErosion.Forms.Views.RegistrationState +{ + /// + /// Registration state view showing map data for a dune erosion failure mechanism. + /// + public class DuneErosionFailureMechanismView : HydraulicLoadsState.DuneErosionFailureMechanismView + { + private MapLineData sectionsMapData; + private MapPointData sectionsStartPointMapData; + private MapPointData sectionsEndPointMapData; + + private NonCalculatableFailureMechanismSectionResultsMapLayer assemblyResultMapLayer; + + private Observer failureMechanismObserver; + + /// + /// Creates a new instance of . + /// + /// The failure mechanism to show the data for. + /// The assessment section in which the + /// belongs to. + /// Thrown when any parameter is null. + public DuneErosionFailureMechanismView(DuneErosionFailureMechanism failureMechanism, + IAssessmentSection assessmentSection) + : base(failureMechanism, assessmentSection) {} + + protected override void Dispose(bool disposing) + { + failureMechanismObserver.Dispose(); + assemblyResultMapLayer.Dispose(); + + base.Dispose(disposing); + } + + protected override void CreateObservers() + { + base.CreateObservers(); + + failureMechanismObserver = new Observer(UpdateFailureMechanismMapData) + { + Observable = FailureMechanism + }; + } + + protected override void CreateMapData() + { + base.CreateMapData(); + + MapDataCollection sectionsMapDataCollection = RiskeerMapDataFactory.CreateSectionsMapDataCollection(); + sectionsMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsMapData(); + sectionsStartPointMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsStartPointMapData(); + sectionsEndPointMapData = RiskeerMapDataFactory.CreateFailureMechanismSectionsEndPointMapData(); + + assemblyResultMapLayer = new NonCalculatableFailureMechanismSectionResultsMapLayer( + FailureMechanism, sr => FailureMechanismSectionAssemblyResultFactory.AssembleSection(sr, AssessmentSection)); + + sectionsMapDataCollection.Add(sectionsMapData); + sectionsMapDataCollection.Add(sectionsStartPointMapData); + sectionsMapDataCollection.Add(sectionsEndPointMapData); + MapDataCollection.Insert(1, sectionsMapDataCollection); + + MapDataCollection.Insert(2, assemblyResultMapLayer.MapData); + } + + protected override void SetAllMapDataFeatures() + { + base.SetAllMapDataFeatures(); + + SetFailureMechanismMapData(); + } + + #region FailureMechanism MapData + + private void UpdateFailureMechanismMapData() + { + SetFailureMechanismMapData(); + sectionsMapData.NotifyObservers(); + sectionsStartPointMapData.NotifyObservers(); + sectionsEndPointMapData.NotifyObservers(); + } + + private void SetFailureMechanismMapData() + { + IEnumerable failureMechanismSections = FailureMechanism.Sections; + sectionsMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionFeatures(failureMechanismSections); + sectionsStartPointMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionStartPointFeatures(failureMechanismSections); + sectionsEndPointMapData.Features = RiskeerMapDataFeaturesFactory.CreateFailureMechanismSectionEndPointFeatures(failureMechanismSections); + } + + #endregion + } +} \ No newline at end of file Fisheye: Tag 8ae7522403830ec33cc3543de6dd89f4490cc402 refers to a dead (removed) revision in file `Riskeer/DuneErosion/src/Riskeer.DuneErosion.Forms/Views/RegistrationState/DuneErosionFailurePathView.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs =================================================================== diff -u -r1e9842d882c96a9bdde40560b7facfb8cf3db468 -r8ae7522403830ec33cc3543de6dd89f4490cc402 --- Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision 1e9842d882c96a9bdde40560b7facfb8cf3db468) +++ Riskeer/DuneErosion/src/Riskeer.DuneErosion.Plugin/DuneErosionPlugin.cs (.../DuneErosionPlugin.cs) (revision 8ae7522403830ec33cc3543de6dd89f4490cc402) @@ -50,14 +50,14 @@ using Riskeer.DuneErosion.Forms.PresentationObjects; using Riskeer.DuneErosion.Forms.PropertyClasses; using Riskeer.DuneErosion.Forms.Views; -using Riskeer.DuneErosion.Forms.Views.HydraulicLoadsState; -using Riskeer.DuneErosion.Forms.Views.RegistrationState; using Riskeer.DuneErosion.IO; using Riskeer.DuneErosion.Plugin.Handlers; using Riskeer.DuneErosion.Plugin.Properties; using Riskeer.DuneErosion.Service; using HydraulicLoadsStateFailureMechanismProperties = Riskeer.DuneErosion.Forms.PropertyClasses.HydraulicLoadsState.DuneErosionFailureMechanismProperties; using RegistrationStateFailureMechanismProperties = Riskeer.DuneErosion.Forms.PropertyClasses.RegistrationState.DuneErosionFailureMechanismProperties; +using HydraulicLoadsStateFailureMechanismView = Riskeer.DuneErosion.Forms.Views.HydraulicLoadsState.DuneErosionFailureMechanismView; +using RegistrationStateFailureMechanismView = Riskeer.DuneErosion.Forms.Views.RegistrationState.DuneErosionFailureMechanismView; using RiskeerCommonDataResources = Riskeer.Common.Data.Properties.Resources; using RiskeerCommonFormsResources = Riskeer.Common.Forms.Properties.Resources; using RiskeerCommonPluginResources = Riskeer.Common.Plugin.Properties.Resources; @@ -185,18 +185,18 @@ DuneErosionFailureMechanismAssemblyFactory.AssembleFailureMechanism) }; - yield return new RiskeerViewInfo(() => Gui) + yield return new RiskeerViewInfo(() => Gui) { GetViewName = (view, context) => context.WrappedData.Name, - CreateInstance = context => new DuneErosionFailureMechanismView(context.WrappedData, context.Parent) + CreateInstance = context => new HydraulicLoadsStateFailureMechanismView(context.WrappedData, context.Parent) }; - yield return new RiskeerViewInfo(() => Gui) + yield return new RiskeerViewInfo(() => Gui) { GetViewName = (view, context) => context.WrappedData.Name, AdditionalDataCheck = context => context.WrappedData.InAssembly, - CreateInstance = context => new DuneErosionFailurePathView(context.WrappedData, context.Parent), - CloseForData = CloseFailurePathViewForData + CreateInstance = context => new RegistrationStateFailureMechanismView(context.WrappedData, context.Parent), + CloseForData = CloseFailureMechanismViewForData }; yield return new RiskeerViewInfo, DuneLocationCalculationsView>(() => Gui) @@ -327,7 +327,7 @@ #region ViewInfos - private static bool CloseFailurePathViewForData(DuneErosionFailurePathView view, object dataToCloseFor) + private static bool CloseFailureMechanismViewForData(RegistrationStateFailureMechanismView view, object dataToCloseFor) { var assessmentSection = dataToCloseFor as IAssessmentSection; var failureMechanism = dataToCloseFor as DuneErosionFailureMechanism; Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/RegistrationState/DuneErosionFailureMechanismViewTest.cs =================================================================== diff -u --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/RegistrationState/DuneErosionFailureMechanismViewTest.cs (revision 0) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/RegistrationState/DuneErosionFailureMechanismViewTest.cs (revision 8ae7522403830ec33cc3543de6dd89f4490cc402) @@ -0,0 +1,355 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer 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 System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Windows.Forms; +using Core.Common.Base; +using Core.Common.Base.Geometry; +using Core.Components.Gis.Data; +using Core.Components.Gis.Forms; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.AssemblyTool.KernelWrapper.Calculators; +using Riskeer.AssemblyTool.KernelWrapper.TestUtil.Calculators; +using Riskeer.AssemblyTool.KernelWrapper.TestUtil.Calculators.Assembly; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Data.TestUtil; +using Riskeer.Common.Forms.TestUtil; +using Riskeer.Common.Forms.Views; +using Riskeer.DuneErosion.Data; +using Riskeer.DuneErosion.Data.TestUtil; +using Riskeer.DuneErosion.Forms.TestUtil; +using Riskeer.DuneErosion.Forms.Views.RegistrationState; +using HydraulicLoadsStateFailureMechanismView = Riskeer.DuneErosion.Forms.Views.HydraulicLoadsState.DuneErosionFailureMechanismView; + +namespace Riskeer.DuneErosion.Forms.Test.Views.RegistrationState +{ + [TestFixture] + public class DuneErosionFailureMechanismViewTest + { + private const int referenceLineIndex = 0; + private const int sectionsCollectionIndex = 1; + private const int assemblyResultsIndex = 2; + private const int duneLocationsIndex = 3; + + private const int sectionsIndex = 0; + private const int sectionsStartPointIndex = 1; + private const int sectionsEndPointIndex = 2; + + private const int sectionsObserverIndex = 0; + private const int sectionsStartPointObserverIndex = 1; + private const int sectionsEndPointObserverIndex = 2; + + private Form testForm; + + [SetUp] + public void Setup() + { + testForm = new Form(); + } + + [TearDown] + public void TearDown() + { + testForm.Dispose(); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void Constructor_ExpectedValues() + { + // Setup + var failureMechanism = new DuneErosionFailureMechanism(); + var assessmentSection = new AssessmentSectionStub(); + + // Call + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); + + // Assert + Assert.IsInstanceOf(view); + Assert.IsNull(view.Data); + Assert.AreSame(failureMechanism, view.FailureMechanism); + Assert.AreSame(assessmentSection, view.AssessmentSection); + AssertEmptyMapData(view.Map.Data); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void Constructor_WithAllData_DataUpdatedToCollectionOfFilledMapData() + { + // Setup + var random = new Random(39); + + var assessmentSection = new AssessmentSectionStub + { + ReferenceLine = new ReferenceLine() + }; + assessmentSection.ReferenceLine.SetGeometry(new[] + { + new Point2D(1.0, 2.0), + new Point2D(2.0, 1.0) + }); + + var geometryPoints = new[] + { + new Point2D(0.0, 0.0), + new Point2D(2.0, 0.0), + new Point2D(4.0, 4.0), + new Point2D(6.0, 4.0) + }; + + var failureMechanism = new DuneErosionFailureMechanism(); + failureMechanism.SetDuneLocations(new[] + { + new TestDuneLocation() + }); + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + new FailureMechanismSection("A", geometryPoints.Take(2)), + new FailureMechanismSection("B", geometryPoints.Skip(1).Take(2)), + new FailureMechanismSection("C", geometryPoints.Skip(2).Take(2)) + }); + + using (new AssemblyToolCalculatorFactoryConfig()) + { + // Call + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + // Assert + MapDataCollection mapData = map.Data; + Assert.IsInstanceOf(mapData); + + List mapDataList = mapData.Collection.ToList(); + Assert.AreEqual(4, mapDataList.Count); + MapDataTestHelper.AssertReferenceLineMapData(assessmentSection.ReferenceLine, mapDataList[referenceLineIndex]); + + IEnumerable sectionsCollection = ((MapDataCollection) mapDataList[sectionsCollectionIndex]).Collection; + MapDataTestHelper.AssertFailureMechanismSectionsMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsIndex)); + MapDataTestHelper.AssertFailureMechanismSectionsStartPointMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsStartPointIndex)); + MapDataTestHelper.AssertFailureMechanismSectionsEndPointMapData(failureMechanism.Sections, sectionsCollection.ElementAt(sectionsEndPointIndex)); + + AssertDuneLocationsMapData(failureMechanism, mapDataList[duneLocationsIndex]); + + var calculatorFactory = (TestAssemblyToolCalculatorFactory) AssemblyToolCalculatorFactory.Instance; + FailureMechanismSectionAssemblyCalculatorStub calculator = calculatorFactory.LastCreatedFailureMechanismSectionAssemblyCalculator; + MapDataTestHelper.AssertAssemblyMapData(failureMechanism, calculator.FailureMechanismSectionAssemblyResultOutput, mapDataList[assemblyResultsIndex]); + } + } + + [Test] + [Apartment(ApartmentState.STA)] + public void GivenViewWithFailureMechanismSectionsData_WhenFailureMechanismUpdatedAndNotified_ThenMapDataUpdated() + { + // Given + var failureMechanism = new DuneErosionFailureMechanism(); + + DuneErosionFailureMechanismView view = CreateView(failureMechanism, new AssessmentSectionStub()); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + IEnumerable sectionsCollection = ((MapDataCollection) map.Data.Collection.ElementAt(sectionsCollectionIndex)).Collection; + var sectionMapData = (MapLineData) sectionsCollection.ElementAt(sectionsIndex); + var sectionStartsMapData = (MapPointData) sectionsCollection.ElementAt(sectionsStartPointIndex); + var sectionsEndsMapData = (MapPointData) sectionsCollection.ElementAt(sectionsEndPointIndex); + + var mocks = new MockRepository(); + IObserver[] observers = AttachMapDataObservers(mocks, map.Data.Collection); + observers[sectionsObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[sectionsStartPointObserverIndex].Expect(obs => obs.UpdateObserver()); + observers[sectionsEndPointObserverIndex].Expect(obs => obs.UpdateObserver()); + mocks.ReplayAll(); + + // When + FailureMechanismTestHelper.SetSections(failureMechanism, new[] + { + new FailureMechanismSection(string.Empty, new[] + { + new Point2D(1, 2), + new Point2D(1, 2) + }) + }); + failureMechanism.NotifyObservers(); + + // Then + MapDataTestHelper.AssertFailureMechanismSectionsMapData(failureMechanism.Sections, sectionMapData); + MapDataTestHelper.AssertFailureMechanismSectionsStartPointMapData(failureMechanism.Sections, sectionStartsMapData); + MapDataTestHelper.AssertFailureMechanismSectionsEndPointMapData(failureMechanism.Sections, sectionsEndsMapData); + mocks.VerifyAll(); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void UpdateObserver_DataUpdated_MapLayersSameOrder() + { + // Setup + const int updatedReferenceLineLayerIndex = referenceLineIndex + 3; + const int updatedSectionsLayerIndex = sectionsCollectionIndex - 1; + const int updatedAssemblyResultsCollectionIndex = assemblyResultsIndex - 1; + const int updatedDuneLocationsLayerIndex = duneLocationsIndex - 1; + + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + DuneErosionFailureMechanismView view = CreateView(failureMechanism, assessmentSection); + + IMapControl map = ((RiskeerMapControl) view.Controls[0]).MapControl; + + MapDataCollection mapData = map.Data; + + var dataToMove = (MapLineData) map.Data.Collection.ElementAt(referenceLineIndex); + mapData.Remove(dataToMove); + mapData.Add(dataToMove); + + IEnumerable mapDataCollection = mapData.Collection; + + // Precondition + var referenceLineData = (MapLineData) mapDataCollection.ElementAt(updatedReferenceLineLayerIndex); + Assert.AreEqual("Referentielijn", referenceLineData.Name); + + var sectionsData = (MapDataCollection) mapDataCollection.ElementAt(updatedSectionsLayerIndex); + Assert.AreEqual("Vakindeling", sectionsData.Name); + + var assemblyResultsData = (MapLineData) mapDataCollection.ElementAt(updatedAssemblyResultsCollectionIndex); + Assert.AreEqual("Duidingsklasse per vak", assemblyResultsData.Name); + + var duneLocationsData = (MapPointData) mapDataCollection.ElementAt(updatedDuneLocationsLayerIndex); + Assert.AreEqual("Hydraulische belastingen", duneLocationsData.Name); + + var points = new List + { + new Point2D(2.0, 5.0), + new Point2D(4.0, 3.0) + }; + var referenceLine = new ReferenceLine(); + referenceLine.SetGeometry(points); + assessmentSection.ReferenceLine = referenceLine; + + // Call + assessmentSection.NotifyObservers(); + + // Assert + var actualReferenceLineData = (MapLineData) mapDataCollection.ElementAt(updatedReferenceLineLayerIndex); + Assert.AreEqual("Referentielijn", actualReferenceLineData.Name); + + var actualSectionsData = (MapDataCollection) mapDataCollection.ElementAt(updatedSectionsLayerIndex); + Assert.AreEqual("Vakindeling", actualSectionsData.Name); + + var actualAssemblyResultsData = (MapLineData) mapDataCollection.ElementAt(updatedAssemblyResultsCollectionIndex); + Assert.AreEqual("Duidingsklasse per vak", actualAssemblyResultsData.Name); + + var actualDuneLocationsData = (MapPointData) mapDataCollection.ElementAt(updatedDuneLocationsLayerIndex); + Assert.AreEqual("Hydraulische belastingen", actualDuneLocationsData.Name); + } + + private DuneErosionFailureMechanismView CreateView(DuneErosionFailureMechanism failureMechanism, IAssessmentSection assessmentSection) + { + var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection); + + testForm.Controls.Add(view); + testForm.Show(); + + return view; + } + + private static void AssertEmptyMapData(MapDataCollection mapDataCollection) + { + Assert.AreEqual("Duinafslag", mapDataCollection.Name); + + List mapDataList = mapDataCollection.Collection.ToList(); + + Assert.AreEqual(4, mapDataList.Count); + + var referenceLineMapData = (MapLineData) mapDataList[referenceLineIndex]; + var assemblyResultsMapData = (MapLineData) mapDataList[assemblyResultsIndex]; + var hydraulicBoundaryLocationsMapData = (MapPointData) mapDataList[duneLocationsIndex]; + + CollectionAssert.IsEmpty(referenceLineMapData.Features); + CollectionAssert.IsEmpty(assemblyResultsMapData.Features); + CollectionAssert.IsEmpty(hydraulicBoundaryLocationsMapData.Features); + + Assert.AreEqual("Referentielijn", referenceLineMapData.Name); + Assert.AreEqual("Duidingsklasse per vak", assemblyResultsMapData.Name); + Assert.AreEqual("Hydraulische belastingen", hydraulicBoundaryLocationsMapData.Name); + + var sectionsMapDataCollection = (MapDataCollection) mapDataList[sectionsCollectionIndex]; + Assert.AreEqual("Vakindeling", sectionsMapDataCollection.Name); + List sectionsDataList = sectionsMapDataCollection.Collection.ToList(); + Assert.AreEqual(3, sectionsDataList.Count); + + var sectionsMapData = (MapLineData) sectionsDataList[sectionsIndex]; + var sectionsStartPointMapData = (MapPointData) sectionsDataList[sectionsStartPointIndex]; + var sectionsEndPointMapData = (MapPointData) sectionsDataList[sectionsEndPointIndex]; + + CollectionAssert.IsEmpty(sectionsEndPointMapData.Features); + CollectionAssert.IsEmpty(sectionsStartPointMapData.Features); + CollectionAssert.IsEmpty(sectionsMapData.Features); + + Assert.AreEqual("Vakindeling (eindpunten)", sectionsEndPointMapData.Name); + Assert.AreEqual("Vakindeling (startpunten)", sectionsStartPointMapData.Name); + Assert.AreEqual("Vakindeling", sectionsMapData.Name); + } + + /// + /// Attaches mocked observers to all map data components. + /// + /// The . + /// The map data collection containing the + /// elements. + /// An array of mocked observers attached to the data in . + private static IObserver[] AttachMapDataObservers(MockRepository mocks, IEnumerable mapData) + { + MapData[] mapDataArray = mapData.ToArray(); + + MapData[] sectionsCollection = ((MapDataCollection) mapDataArray[sectionsCollectionIndex]).Collection.ToArray(); + var sectionsMapDataObserver = mocks.StrictMock(); + sectionsCollection[sectionsIndex].Attach(sectionsMapDataObserver); + + var sectionsStartPointMapDataObserver = mocks.StrictMock(); + sectionsCollection[sectionsStartPointIndex].Attach(sectionsStartPointMapDataObserver); + + var sectionsEndPointMapDataObserver = mocks.StrictMock(); + sectionsCollection[sectionsEndPointIndex].Attach(sectionsEndPointMapDataObserver); + + return new[] + { + sectionsMapDataObserver, + sectionsStartPointMapDataObserver, + sectionsEndPointMapDataObserver + }; + } + + private static void AssertDuneLocationsMapData(DuneErosionFailureMechanism failureMechanism, + MapData mapData) + { + Assert.IsInstanceOf(mapData); + Assert.AreEqual("Hydraulische belastingen", mapData.Name); + + var duneLocationsMapData = (MapPointData) mapData; + DuneErosionMapFeaturesTestHelper.AssertDuneLocationFeaturesData(failureMechanism, duneLocationsMapData.Features); + } + } +} \ No newline at end of file Fisheye: Tag 8ae7522403830ec33cc3543de6dd89f4490cc402 refers to a dead (removed) revision in file `Riskeer/DuneErosion/test/Riskeer.DuneErosion.Forms.Test/Views/RegistrationState/DuneErosionFailurePathViewTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/DuneErosionPluginTest.cs =================================================================== diff -u -r1e9842d882c96a9bdde40560b7facfb8cf3db468 -r8ae7522403830ec33cc3543de6dd89f4490cc402 --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/DuneErosionPluginTest.cs (.../DuneErosionPluginTest.cs) (revision 1e9842d882c96a9bdde40560b7facfb8cf3db468) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/DuneErosionPluginTest.cs (.../DuneErosionPluginTest.cs) (revision 8ae7522403830ec33cc3543de6dd89f4490cc402) @@ -44,10 +44,10 @@ using Riskeer.DuneErosion.Forms.PresentationObjects; using Riskeer.DuneErosion.Forms.PropertyClasses; using Riskeer.DuneErosion.Forms.Views; -using Riskeer.DuneErosion.Forms.Views.HydraulicLoadsState; -using Riskeer.DuneErosion.Forms.Views.RegistrationState; using HydraulicLoadsStateFailureMechanismProperties = Riskeer.DuneErosion.Forms.PropertyClasses.HydraulicLoadsState.DuneErosionFailureMechanismProperties; using RegistrationStateFailureMechanismProperties = Riskeer.DuneErosion.Forms.PropertyClasses.RegistrationState.DuneErosionFailureMechanismProperties; +using HydraulicLoadsStateFailureMechanismView = Riskeer.DuneErosion.Forms.Views.HydraulicLoadsState.DuneErosionFailureMechanismView; +using RegistrationStateFailureMechanismView = Riskeer.DuneErosion.Forms.Views.RegistrationState.DuneErosionFailureMechanismView; namespace Riskeer.DuneErosion.Plugin.Test { @@ -163,12 +163,12 @@ PluginTestHelper.AssertViewInfoDefined( viewInfos, typeof(DuneErosionHydraulicLoadsContext), - typeof(DuneErosionFailureMechanismView)); + typeof(HydraulicLoadsStateFailureMechanismView)); PluginTestHelper.AssertViewInfoDefined( viewInfos, typeof(DuneErosionFailurePathContext), - typeof(DuneErosionFailurePathView)); + typeof(RegistrationStateFailureMechanismView)); PluginTestHelper.AssertViewInfoDefined( viewInfos, Index: Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/RegistrationState/DuneErosionFailureMechanismViewInfoTest.cs =================================================================== diff -u --- Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/RegistrationState/DuneErosionFailureMechanismViewInfoTest.cs (revision 0) +++ Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/RegistrationState/DuneErosionFailureMechanismViewInfoTest.cs (revision 8ae7522403830ec33cc3543de6dd89f4490cc402) @@ -0,0 +1,201 @@ +// Copyright (C) Stichting Deltares 2021. All rights reserved. +// +// This file is part of Riskeer. +// +// Riskeer 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.Linq; +using System.Threading; +using System.Windows.Forms; +using Core.Gui.Plugin; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.TestUtil; +using Riskeer.DuneErosion.Data; +using Riskeer.DuneErosion.Forms.PresentationObjects; +using Riskeer.DuneErosion.Forms.Views.RegistrationState; + +namespace Riskeer.DuneErosion.Plugin.Test.ViewInfos.RegistrationState +{ + [TestFixture] + public class DuneErosionFailureMechanismViewInfoTest + { + private MockRepository mocks; + private DuneErosionPlugin plugin; + private ViewInfo info; + + [SetUp] + public void SetUp() + { + mocks = new MockRepository(); + plugin = new DuneErosionPlugin(); + info = plugin.GetViewInfos().First(tni => tni.ViewType == typeof(DuneErosionFailureMechanismView)); + } + + [TearDown] + public void TearDown() + { + plugin.Dispose(); + } + + [Test] + public void Initialized_Always_ExpectedPropertiesSet() + { + // Assert + Assert.AreEqual(typeof(DuneErosionFailurePathContext), info.DataType); + Assert.AreEqual(typeof(DuneErosionFailurePathContext), info.ViewDataType); + } + + [Test] + public void GetViewName_WithContext_ReturnsNameOfFailureMechanism() + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new DuneErosionFailureMechanism(); + var context = new DuneErosionFailurePathContext(failureMechanism, assessmentSection); + + // Call + string viewName = info.GetViewName(null, context); + + // Assert + Assert.AreEqual(failureMechanism.Name, viewName); + mocks.VerifyAll(); + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void AdditionalDataCheck_Always_ReturnTrueOnlyIfFailureMechanismInAssembly(bool inAssembly) + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new DuneErosionFailureMechanism + { + InAssembly = inAssembly + }; + + var context = new DuneErosionFailurePathContext(failureMechanism, assessmentSection); + + // Call + bool result = info.AdditionalDataCheck(context); + + // Assert + Assert.AreEqual(inAssembly, result); + mocks.VerifyAll(); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void CreateInstance_WithContext_ReturnDuneFailureMechanismView() + { + // Setup + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var context = new DuneErosionFailurePathContext(failureMechanism, assessmentSection); + + using (var testForm = new Form()) + { + // Call + var view = info.CreateInstance(context) as DuneErosionFailureMechanismView; + + testForm.Controls.Add(view); + testForm.Show(); + + // Assert + Assert.AreSame(failureMechanism, view.FailureMechanism); + Assert.AreSame(assessmentSection, view.AssessmentSection); + } + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedAssessmentSection_ReturnsFalse() + { + // Setup + var assessmentSection = new AssessmentSectionStub(); + var otherAssessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new DuneErosionFailureMechanism(); + + var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection); + + // Call + bool closeForData = info.CloseForData(view, otherAssessmentSection); + + // Assert + Assert.IsFalse(closeForData); + + mocks.VerifyAll(); + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedAssessmentSection_ReturnsTrue() + { + // Setup + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection); + + // Call + bool closeForData = info.CloseForData(view, assessmentSection); + + // Assert + Assert.IsTrue(closeForData); + } + + [Test] + public void CloseForData_ViewNotCorrespondingToRemovedFailureMechanism_ReturnsFalse() + { + // Setup + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + var otherFailureMechanism = new DuneErosionFailureMechanism(); + + var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection); + + // Call + bool closeForData = info.CloseForData(view, otherFailureMechanism); + + // Assert + Assert.IsFalse(closeForData); + } + + [Test] + public void CloseForData_ViewCorrespondingToRemovedFailureMechanism_ReturnsTrue() + { + // Setup + var assessmentSection = new AssessmentSectionStub(); + var failureMechanism = new DuneErosionFailureMechanism(); + + var view = new DuneErosionFailureMechanismView(failureMechanism, assessmentSection); + + // Call + bool closeForData = info.CloseForData(view, failureMechanism); + + // Assert + Assert.IsTrue(closeForData); + } + } +} \ No newline at end of file Fisheye: Tag 8ae7522403830ec33cc3543de6dd89f4490cc402 refers to a dead (removed) revision in file `Riskeer/DuneErosion/test/Riskeer.DuneErosion.Plugin.Test/ViewInfos/RegistrationState/DuneErosionFailurePathViewInfoTest.cs'. Fisheye: No comparison available. Pass `N' to diff?