Index: Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailureMechanismProperties.cs =================================================================== diff -u -r6be63037d71c6270dc24c31ca132f9bc612e4519 -rb9d0b7e52e1f2990800ee7f76e77ce9e2add50dd --- Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailureMechanismProperties.cs (.../WaveImpactAsphaltCoverFailureMechanismProperties.cs) (revision 6be63037d71c6270dc24c31ca132f9bc612e4519) +++ Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailureMechanismProperties.cs (.../WaveImpactAsphaltCoverFailureMechanismProperties.cs) (revision b9d0b7e52e1f2990800ee7f76e77ce9e2add50dd) @@ -49,6 +49,11 @@ throw new ArgumentNullException(nameof(data)); } + if (constructionProperties == null) + { + throw new ArgumentNullException(nameof(constructionProperties)); + } + Data = data; propertyIndexLookup = new Dictionary Index: Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailurePathProperties.cs =================================================================== diff -u -r6be63037d71c6270dc24c31ca132f9bc612e4519 -rb9d0b7e52e1f2990800ee7f76e77ce9e2add50dd --- Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailurePathProperties.cs (.../WaveImpactAsphaltCoverFailurePathProperties.cs) (revision 6be63037d71c6270dc24c31ca132f9bc612e4519) +++ Riskeer/WaveImpactAsphaltCover/src/Riskeer.WaveImpactAsphaltCover.Forms/PropertyClasses/WaveImpactAsphaltCoverFailurePathProperties.cs (.../WaveImpactAsphaltCoverFailurePathProperties.cs) (revision b9d0b7e52e1f2990800ee7f76e77ce9e2add50dd) @@ -47,15 +47,19 @@ /// /// The instance to show the properties of. /// - /// Thrown when - /// is null. + /// Thrown when any parameter is null. public WaveImpactAsphaltCoverFailurePathProperties(WaveImpactAsphaltCoverFailureMechanism data, IAssessmentSection assessmentSection) : base(data, new ConstructionProperties { NamePropertyIndex = namePropertyIndex, CodePropertyIndex = codePropertyIndex, GroupPropertyIndex = groupPropertyIndex }) { + if (assessmentSection == null) + { + throw new ArgumentNullException(nameof(assessmentSection)); + } + this.assessmentSection = assessmentSection; } Index: Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverCalculationsPropertiesTest.cs =================================================================== diff -u -r0827e575f2beb2522460055a91717ce8803678f6 -rb9d0b7e52e1f2990800ee7f76e77ce9e2add50dd --- Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverCalculationsPropertiesTest.cs (.../WaveImpactAsphaltCoverCalculationsPropertiesTest.cs) (revision 0827e575f2beb2522460055a91717ce8803678f6) +++ Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverCalculationsPropertiesTest.cs (.../WaveImpactAsphaltCoverCalculationsPropertiesTest.cs) (revision b9d0b7e52e1f2990800ee7f76e77ce9e2add50dd) @@ -51,7 +51,7 @@ } [Test] - public void Constructor_WithData_ExpectedValues() + public void Constructor_ExpectedValues() { // Setup var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); @@ -60,6 +60,7 @@ var properties = new WaveImpactAsphaltCoverCalculationsProperties(failureMechanism); // Assert + Assert.IsInstanceOf(properties); Assert.AreSame(failureMechanism, properties.Data); Assert.AreEqual(failureMechanism.Name, properties.Name); Assert.AreEqual(failureMechanism.Code, properties.Code); Fisheye: Tag 7502d6e9482a2489bf1b44680d8940adfe06a796 refers to a dead (removed) revision in file `Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailureMechanismPropertiesTest.cs'. Fisheye: No comparison available. Pass `N' to diff? Index: Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailurePathPropertiesTest.cs =================================================================== diff -u --- Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailurePathPropertiesTest.cs (revision 0) +++ Riskeer/WaveImpactAsphaltCover/test/Riskeer.WaveImpactAsphaltCover.Forms.Test/PropertyClasses/WaveImpactAsphaltCoverFailurePathPropertiesTest.cs (revision b9d0b7e52e1f2990800ee7f76e77ce9e2add50dd) @@ -0,0 +1,221 @@ +using System; +using System.ComponentModel; +using Core.Common.Base; +using Core.Common.Base.Data; +using Core.Common.TestUtil; +using Core.Gui.TestUtil; +using NUnit.Framework; +using Rhino.Mocks; +using Riskeer.Common.Data.AssessmentSection; +using Riskeer.Common.Data.TestUtil; +using Riskeer.WaveImpactAsphaltCover.Data; +using Riskeer.WaveImpactAsphaltCover.Forms.PropertyClasses; + +namespace Riskeer.WaveImpactAsphaltCover.Forms.Test.PropertyClasses +{ + public class WaveImpactAsphaltCoverFailurePathPropertiesTest + { + private const int namePropertyIndex = 0; + private const int codePropertyIndex = 1; + private const int groupPropertyIndex = 2; + private const int contributionPropertyIndex = 3; + private const int sectionLengthPropertyIndex = 4; + private const int deltaLPropertyIndex = 5; + private const int nPropertyIndex = 6; + private MockRepository mocks; + + [SetUp] + public void SetUp() + { + mocks = new MockRepository(); + } + + [TearDown] + public void TearDown() + { + mocks.VerifyAll(); + } + + [Test] + public void Constructor_DataNull_ThrowsArgumentNullException() + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + // Call + void Call() => new WaveImpactAsphaltCoverFailurePathProperties(null, assessmentSection); + + // Assert + string paramName = Assert.Throws(Call).ParamName; + Assert.AreEqual("data", paramName); + } + + [Test] + public void Constructor_AssessmentSectionNull_ThrowsArgumentNullException() + { + // Call + void Call() => new WaveImpactAsphaltCoverFailurePathProperties(new WaveImpactAsphaltCoverFailureMechanism(), null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("assessmentSection", exception.ParamName); + } + + [Test] + public void Constructor_ExpectedValues() + { + // Setup + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + + // Call + var properties = new WaveImpactAsphaltCoverFailurePathProperties(failureMechanism, assessmentSection); + + // Assert + Assert.IsInstanceOf(properties); + Assert.AreSame(failureMechanism, properties.Data); + Assert.AreEqual(failureMechanism.Name, properties.Name); + Assert.AreEqual(failureMechanism.Code, properties.Code); + Assert.AreEqual(failureMechanism.Group, properties.Group); + Assert.AreEqual(failureMechanism.Contribution, properties.Contribution); + + Assert.AreEqual(2, properties.SectionLength.NumberOfDecimalPlaces); + Assert.AreEqual(assessmentSection.ReferenceLine.Length, + properties.SectionLength, + properties.SectionLength.GetAccuracy()); + + GeneralWaveImpactAsphaltCoverInput generalWaveImpactAsphaltCoverInput = failureMechanism.GeneralWaveImpactAsphaltCoverInput; + Assert.AreEqual(2, properties.DeltaL.NumberOfDecimalPlaces); + Assert.AreEqual(generalWaveImpactAsphaltCoverInput.DeltaL, + properties.DeltaL, + properties.DeltaL.GetAccuracy()); + + Assert.AreEqual(2, properties.N.NumberOfDecimalPlaces); + Assert.AreEqual(generalWaveImpactAsphaltCoverInput.GetN(assessmentSection.ReferenceLine.Length), + properties.N, + properties.N.GetAccuracy()); + } + + [Test] + public void Constructor_Always_PropertiesHaveExpectedAttributesValues() + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + // Call + var properties = new WaveImpactAsphaltCoverFailurePathProperties(new WaveImpactAsphaltCoverFailureMechanism(), assessmentSection); + + // Assert + PropertyDescriptorCollection dynamicProperties = PropertiesTestHelper.GetAllVisiblePropertyDescriptors(properties); + Assert.AreEqual(7, dynamicProperties.Count); + + const string generalCategory = "Algemeen"; + const string lengthEffectCategory = "Lengte-effect parameters"; + + PropertyDescriptor nameProperty = dynamicProperties[namePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nameProperty, + generalCategory, + "Naam", + "De naam van het toetsspoor.", + true); + + PropertyDescriptor codeProperty = dynamicProperties[codePropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(codeProperty, + generalCategory, + "Label", + "Het label van het toetsspoor.", + true); + + PropertyDescriptor groupProperty = dynamicProperties[groupPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(groupProperty, + generalCategory, + "Groep", + "De groep waar het toetsspoor toe behoort.", + true); + + PropertyDescriptor contributionProperty = dynamicProperties[contributionPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(contributionProperty, + generalCategory, + "Faalkansbijdrage [%]", + "Procentuele bijdrage van dit toetsspoor aan de totale overstromingskans van het traject.", + true); + + PropertyDescriptor sectionLength = dynamicProperties[sectionLengthPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(sectionLength, + lengthEffectCategory, + "Lengte* [m]", + "Totale lengte van het traject in meters (afgerond).", + true); + + PropertyDescriptor deltaLProperty = dynamicProperties[deltaLPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(deltaLProperty, + lengthEffectCategory, + "ΔL [m]", + "Lengte van onafhankelijke dijkstrekkingen voor dit toetsspoor."); + + PropertyDescriptor nProperty = dynamicProperties[nPropertyIndex]; + PropertiesTestHelper.AssertRequiredPropertyDescriptorProperties(nProperty, + lengthEffectCategory, + "N* [-]", + "De parameter 'N' die gebruikt wordt om het lengte-effect " + + "mee te nemen in de beoordeling (afgerond).", + true); + } + + [Test] + [SetCulture("nl-NL")] + [TestCase(0.0)] + [TestCase(-1.0)] + [TestCase(-20.0)] + public void DeltaL_SetInvalidValue_ThrowsArgumentOutOfRangeExceptionNoNotifications(double newN) + { + // Setup + var assessmentSection = mocks.Stub(); + mocks.ReplayAll(); + + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + + var properties = new WaveImpactAsphaltCoverFailurePathProperties( + failureMechanism, + assessmentSection); + + // Call + void Call() => properties.DeltaL = (RoundedDouble) newN; + + // Assert + const string expectedMessage = "De waarde voor 'ΔL' moet groter zijn dan 0."; + TestHelper.AssertThrowsArgumentExceptionAndTestMessage(Call, expectedMessage); + } + + [Test] + [TestCase(1.0)] + [TestCase(10.0)] + [TestCase(20.0)] + public void DeltaL_SetValidValue_UpdateDataAndNotifyObservers(double newN) + { + // Setup + var assessmentSection = mocks.Stub(); + var observer = mocks.StrictMock(); + observer.Expect(o => o.UpdateObserver()); + mocks.ReplayAll(); + + var failureMechanism = new WaveImpactAsphaltCoverFailureMechanism(); + failureMechanism.Attach(observer); + + var properties = new WaveImpactAsphaltCoverFailurePathProperties( + failureMechanism, + assessmentSection); + + // Call + properties.DeltaL = (RoundedDouble) newN; + + // Assert + Assert.AreEqual(newN, failureMechanism.GeneralWaveImpactAsphaltCoverInput.DeltaL); + } + } +} \ No newline at end of file