Index: Riskeer/Common/src/Riskeer.Common.Forms/Helpers/FailureMechanismSectionPresentationHelper.cs =================================================================== diff -u -r6e3bc0437167a40cf4a79f0f04e31dc61ef4407f -r62d9d51394ec9ac00cb96558f1920a7af914d29b --- Riskeer/Common/src/Riskeer.Common.Forms/Helpers/FailureMechanismSectionPresentationHelper.cs (.../FailureMechanismSectionPresentationHelper.cs) (revision 6e3bc0437167a40cf4a79f0f04e31dc61ef4407f) +++ Riskeer/Common/src/Riskeer.Common.Forms/Helpers/FailureMechanismSectionPresentationHelper.cs (.../FailureMechanismSectionPresentationHelper.cs) (revision 62d9d51394ec9ac00cb96558f1920a7af914d29b) @@ -26,7 +26,7 @@ namespace Riskeer.Common.Forms.Helpers { /// - /// Helper class for displaying . + /// Helper class for displaying failure mechanism sections. /// public static class FailureMechanismSectionPresentationHelper { @@ -47,8 +47,7 @@ /// /// /// The created presentation objects. - /// Thrown when or - /// is null. + /// Thrown when any parameter is null. public static T[] CreatePresentableFailureMechanismSections(IEnumerable failureMechanismSections, Func createPresentableFailureMechanismSectionFunc) { @@ -62,15 +61,59 @@ throw new ArgumentNullException(nameof(createPresentableFailureMechanismSectionFunc)); } + return CreatePresentableFailureMechanismSections(failureMechanismSections, section => section.Length, createPresentableFailureMechanismSectionFunc); + } + + /// + /// Creates presentation objects for the provided , + /// taking into account the start and the end of the sections in relation to the beginning of + /// the reference line. + /// + /// The type of the presentation objects. + /// The type of failure mechanism section configuration. + /// The failure mechanism section configurations to create presentation + /// objects for. + /// + /// for creating the presentation objects of type , in which: + /// + /// T1 represents the failure mechanism section configuration at stake; + /// T2 represents the start of the section in relation to the beginning of the reference line; + /// T3 represents the end of the section in relation to the beginning of the reference line. + /// + /// + /// The created presentation objects. + /// Thrown when any parameter is null. + public static T[] CreatePresentableFailureMechanismSectionConfigurations( + IEnumerable failureMechanismSectionConfigurations, + Func createPresentableFailureMechanismSectionConfigurationFunc) + where TFailureMechanismSectionConfiguration : FailureMechanismSectionConfiguration + { + if (failureMechanismSectionConfigurations == null) + { + throw new ArgumentNullException(nameof(failureMechanismSectionConfigurations)); + } + + if (createPresentableFailureMechanismSectionConfigurationFunc == null) + { + throw new ArgumentNullException(nameof(createPresentableFailureMechanismSectionConfigurationFunc)); + } + + return CreatePresentableFailureMechanismSections(failureMechanismSectionConfigurations, configuration => configuration.Section.Length, createPresentableFailureMechanismSectionConfigurationFunc); + } + + private static T[] CreatePresentableFailureMechanismSections(IEnumerable sections, + Func getSectionLengthFunc, + Func createPresentableFailureMechanismSectionFunc) + { double start = 0; var presentableFailureMechanismSections = new List(); - foreach (FailureMechanismSection failureMechanismSection in failureMechanismSections) + foreach (TSection section in sections) { - double end = start + failureMechanismSection.Length; + double end = start + getSectionLengthFunc(section); - presentableFailureMechanismSections.Add(createPresentableFailureMechanismSectionFunc(failureMechanismSection, start, end)); + presentableFailureMechanismSections.Add(createPresentableFailureMechanismSectionFunc(section, start, end)); start = end; } Index: Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismSectionConfigurationsView.cs =================================================================== diff -u -rc2773b1a9fbca12088ad0f7657ccf0b348d3a631 -r62d9d51394ec9ac00cb96558f1920a7af914d29b --- Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismSectionConfigurationsView.cs (.../FailureMechanismSectionConfigurationsView.cs) (revision c2773b1a9fbca12088ad0f7657ccf0b348d3a631) +++ Riskeer/Common/src/Riskeer.Common.Forms/Views/FailureMechanismSectionConfigurationsView.cs (.../FailureMechanismSectionConfigurationsView.cs) (revision 62d9d51394ec9ac00cb96558f1920a7af914d29b) @@ -24,6 +24,7 @@ using System.Linq; using Core.Common.Base; using Riskeer.Common.Data.FailureMechanism; +using Riskeer.Common.Forms.Helpers; using Riskeer.Common.Forms.Properties; namespace Riskeer.Common.Forms.Views @@ -78,7 +79,9 @@ protected override void SetDataGridViewControlData() { - failureMechanismSectionsDataGridViewControl.SetDataSource(CreateRows()); + failureMechanismSectionsDataGridViewControl.SetDataSource(FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSectionConfigurations( + sectionConfigurations, + createRowFunc)); } protected override void Dispose(bool disposing) @@ -91,24 +94,5 @@ { failureMechanismSectionsDataGridViewControl.Refresh(); } - - private IEnumerable CreateRows() - { - double start = 0; - - var presentableFailureMechanismSections = new List(); - - foreach (TFailureMechanismSectionConfiguration sectionConfiguration in sectionConfigurations) - { - double end = start + sectionConfiguration.Section.Length; - - TFailureMechanismSectionConfigurationRow failureMechanismSectionConfigurationRow = createRowFunc(sectionConfiguration, start, end); - presentableFailureMechanismSections.Add(failureMechanismSectionConfigurationRow); - - start = end; - } - - return presentableFailureMechanismSections.ToArray(); - } } } \ No newline at end of file Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/Helpers/FailureMechanismSectionPresentationHelperTest.cs =================================================================== diff -u -r6e3bc0437167a40cf4a79f0f04e31dc61ef4407f -r62d9d51394ec9ac00cb96558f1920a7af914d29b --- Riskeer/Common/test/Riskeer.Common.Forms.Test/Helpers/FailureMechanismSectionPresentationHelperTest.cs (.../FailureMechanismSectionPresentationHelperTest.cs) (revision 6e3bc0437167a40cf4a79f0f04e31dc61ef4407f) +++ Riskeer/Common/test/Riskeer.Common.Forms.Test/Helpers/FailureMechanismSectionPresentationHelperTest.cs (.../FailureMechanismSectionPresentationHelperTest.cs) (revision 62d9d51394ec9ac00cb96558f1920a7af914d29b) @@ -20,8 +20,10 @@ // All rights reserved. using System; +using System.Collections.Generic; using System.Linq; using Core.Common.Base.Geometry; +using Core.Common.TestUtil; using NUnit.Framework; using Riskeer.Common.Data.FailureMechanism; using Riskeer.Common.Data.TestUtil; @@ -36,21 +38,21 @@ public void CreatePresentableFailureMechanismSections_FailureMechanismSectionsNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSections(null, (section, start, end) => new object()); + void Call() => FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSections(null, (section, start, end) => new object()); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("failureMechanismSections", exception.ParamName); } [Test] public void CreatePresentableFailureMechanismSections_CreatePresentableFailureMechanismSectionFuncNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSections(Enumerable.Empty(), null); + void Call() => FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSections(Enumerable.Empty(), null); // Assert - var exception = Assert.Throws(call); + var exception = Assert.Throws(Call); Assert.AreEqual("createPresentableFailureMechanismSectionFunc", exception.ParamName); } @@ -83,7 +85,65 @@ Assert.AreEqual(sectionOffset, presentationObjects[i].SectionEnd); } } + + [Test] + public void CreatePresentableFailureMechanismSectionConfigurations_FailureMechanismSectionsNull_ThrowsArgumentNullException() + { + // Call + void Call() => FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSectionConfigurations( + null, (section, start, end) => new object()); + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("failureMechanismSectionConfigurations", exception.ParamName); + } + + [Test] + public void CreatePresentableFailureMechanismSectionConfigurations_CreatePresentableFailureMechanismSectionConfigurationFuncNull_ThrowsArgumentNullException() + { + // Call + void Call() => FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSectionConfigurations( + Enumerable.Empty(), null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("createPresentableFailureMechanismSectionConfigurationFunc", exception.ParamName); + } + + [Test] + public void CreatePresentableFailureMechanismSectionConfigurations_ValidInputParameters_ReturnsExpectedPresentationObjects() + { + // Setup + FailureMechanismSection[] failureMechanismSections = + { + CreateFailureMechanismSection(0.0, 0.0, 1.0, 1.0), + CreateFailureMechanismSection(1.0, 1.0, 2.0, 2.0), + CreateFailureMechanismSection(2.0, 2.0, 5.0, 5.0) + }; + + var random = new Random(21); + IEnumerable failureMechanismSectionConfigurations = + failureMechanismSections.Select(s => new TestFailureMechanismSectionConfiguration(s, random.NextRoundedDouble())); + + // Call + TestPresentableFailureMechanismSection[] presentationObjects = FailureMechanismSectionPresentationHelper.CreatePresentableFailureMechanismSectionConfigurations( + failureMechanismSectionConfigurations, + (configuration, start, end) => new TestPresentableFailureMechanismSection(configuration.Section, start, end)); + + // Assert + Assert.AreEqual(failureMechanismSections.Length, presentationObjects.Length); + + double sectionOffset = 0; + + for (var i = 0; i < presentationObjects.Length; i++) + { + Assert.AreSame(failureMechanismSections[i], presentationObjects[i].Section); + Assert.AreEqual(sectionOffset, presentationObjects[i].SectionStart); + sectionOffset += failureMechanismSections[i].Length; + Assert.AreEqual(sectionOffset, presentationObjects[i].SectionEnd); + } + } + private static FailureMechanismSection CreateFailureMechanismSection(double x1, double y1, double x2, double y2) { return FailureMechanismSectionTestFactory.CreateFailureMechanismSection(new[]