// Copyright (C) Stichting Deltares 2017. 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.Collections.Generic; 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.Common.Data.Calculation; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.Common.Data.Structures; using Ringtoets.Common.Data.TestUtil; using Ringtoets.Common.Forms; using Ringtoets.HeightStructures.Data; using Ringtoets.HeightStructures.Data.TestUtil; using Ringtoets.HeightStructures.Forms.Views; namespace Ringtoets.HeightStructures.Forms.Test.Views { [TestFixture] public class HeightStructuresScenariosViewTest { private Form testForm; [SetUp] public void Setup() { testForm = new Form(); } [TearDown] public void TearDown() { testForm.Dispose(); } [Test] public void DefaultConstructor_DataGridViewCorrectlyInitialized() { // Call using (HeightStructuresScenariosView 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 (HeightStructuresScenariosView view = ShowScenariosView()) { var calculationGroup = new CalculationGroup(); // Call view.Data = calculationGroup; // Assert Assert.AreSame(calculationGroup, view.Data); } } [Test] public void FailureMechanism_ValidFailureMechanismSet_ValidFailureMechanism() { // Setup using (HeightStructuresScenariosView view = ShowScenariosView()) { var failureMechanism = new HeightStructuresFailureMechanism(); // Call view.FailureMechanism = failureMechanism; // Assert Assert.AreSame(failureMechanism, view.FailureMechanism); } } [Test] public void Data_WithFailureMechanism_UpdateScenarioControl() { // Setup using (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism 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 (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); view.FailureMechanism = failureMechanism; view.Data = failureMechanism.CalculationsGroup; // Call view.Data = null; // Assert AssertDataGridView(failureMechanism, true); } } [Test] public void FailureMechanism_FailureMechanismSetToNull_UpdateScenarioControl() { // Setup using (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism 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 (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); view.Data = failureMechanism.CalculationsGroup; view.FailureMechanism = failureMechanism; // Call view.FailureMechanism = null; // Assert AssertDataGridView(failureMechanism, true); } } [Test] public void NotifyFailureMechanism_SectionsUpdatedAfterFullInitialization_NewRowAddedToView() { // Setup using (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); view.Data = failureMechanism.CalculationsGroup; view.FailureMechanism = failureMechanism; List newSections = view.FailureMechanism.Sections.ToList(); newSections.Add(new FailureMechanismSection("SectionC", new[] { view.FailureMechanism.Sections.Last().EndPoint, new Point2D(30, 30) })); // Call failureMechanism.NotifyObservers(); // Assert AssertDataGridView(failureMechanism, false, new[] { new[] { "", "CalculationA" }, new[] { "", "CalculationB" }, new[] { "" } }); } } [Test] public void NotifyCalculation_CalculationChangedStructure_CalculationMovedToOtherSectionResultOptions() { // Setup using (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism 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 (HeightStructuresScenariosView view = ShowScenariosView()) { HeightStructuresFailureMechanism failureMechanism = CreateCompleteFailureMechanism(); view.Data = failureMechanism.CalculationsGroup; view.FailureMechanism = failureMechanism; var calculationB = (StructuresCalculation) failureMechanism.CalculationsGroup.Children[1]; var calculationC = new StructuresCalculation { Name = "CalculationC" }; failureMechanism.CalculationsGroup.Children.Add(calculationC); calculationC.InputParameters.Structure = calculationB.InputParameters.Structure; // Call failureMechanism.CalculationsGroup.NotifyObservers(); // Assert AssertDataGridView(failureMechanism, false, new[] { new[] { "", "CalculationA" }, new[] { "", "CalculationB", "CalculationC" } }); } } private static void AssertDataGridView( HeightStructuresFailureMechanism failureMechanism, bool shouldBeCleared, string[][] expectedComboBoxItemTexts = null) { var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject; int rowCount = dataGridView.RowCount; if (shouldBeCleared) { Assert.AreEqual(0, rowCount); } else { Assert.NotNull(expectedComboBoxItemTexts); var dataGridViewColumn = (DataGridViewComboBoxColumn) dataGridView.Columns[1]; Assert.AreEqual(failureMechanism.SectionResults.Count(), rowCount); Assert.AreEqual(failureMechanism.Calculations.Count(), dataGridViewColumn.Items.Count); for (var i = 0; i < rowCount; i++) { var cell = (DataGridViewComboBoxCell) dataGridView[1, i]; IEnumerable> items = cell.Items.OfType>(); Assert.AreEqual(expectedComboBoxItemTexts[i], items.Select(r => r.DisplayName)); } } } private HeightStructuresFailureMechanism CreateCompleteFailureMechanism() { var failureMechanism = new HeightStructuresFailureMechanism(); var matchingPointA = new Point2D(0, 0); var matchingPointB = new Point2D(20, 20); var calculationA = new StructuresCalculation { Name = "CalculationA", InputParameters = { Structure = new TestHeightStructure(matchingPointA) } }; var calculationB = new StructuresCalculation { Name = "CalculationB", InputParameters = { Structure = new TestHeightStructure(matchingPointB) } }; var 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); FailureMechanismTestHelper.SetSections(failureMechanism, new[] { failureMechanismSectionA, failureMechanismSectionB }); return failureMechanism; } private HeightStructuresScenariosView ShowScenariosView() { var scenariosView = new HeightStructuresScenariosView(); testForm.Controls.Add(scenariosView); testForm.Show(); return scenariosView; } } }