Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.Designer.cs =================================================================== diff -u -rc7814fa3fc22bf7efe81f387e9366a3582019469 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision c7814fa3fc22bf7efe81f387e9366a3582019469) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18444 +// Runtime Version:4.0.30319.34209 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -116,15 +116,6 @@ } /// - /// Looks up a localized string similar to Sellmeijer. - /// - public static string Categories_Sellmeijer { - get { - return ResourceManager.GetString("Categories_Sellmeijer", resourceCulture); - } - } - - /// /// Looks up a localized string similar to Modelinstellingen. /// public static string Categories_ModelSettings { @@ -143,20 +134,20 @@ } /// - /// Looks up a localized string similar to Semi-probabilistische parameters. + /// Looks up a localized string similar to Sellmeijer. /// - public static string Categories_SemiProbabilisticParameters { + public static string Categories_Sellmeijer { get { - return ResourceManager.GetString("Categories_SemiProbabilisticParameters", resourceCulture); + return ResourceManager.GetString("Categories_Sellmeijer", resourceCulture); } } /// - /// Looks up a localized string similar to Opbarsten. + /// Looks up a localized string similar to Semi-probabilistische parameters. /// - public static string Categories_Uplift { + public static string Categories_SemiProbabilisticParameters { get { - return ResourceManager.GetString("Categories_Uplift", resourceCulture); + return ResourceManager.GetString("Categories_SemiProbabilisticParameters", resourceCulture); } } @@ -170,6 +161,15 @@ } /// + /// Looks up a localized string similar to Opbarsten. + /// + public static string Categories_Uplift { + get { + return ResourceManager.GetString("Categories_Uplift", resourceCulture); + } + } + + /// /// Looks up a localized string similar to &Wis uitvoer.... /// public static string Clear_output { @@ -1111,26 +1111,6 @@ } /// - /// Looks up a localized string similar to Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer.. - /// - public static string PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer { - get { - return ResourceManager.GetString("PipingInputExtensions_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aqui" + - "fer_layer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Kan deklaagdikte niet afleiden op basis van de invoer.. - /// - public static string PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer { - get { - return ResourceManager.GetString("PipingInputExtensions_UpdateThicknessCoverageLayer_Cannot_determine_thickness_cov" + - "erage_layer", resourceCulture); - } - } - - /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// public static System.Drawing.Bitmap PipingInputIcon { Index: Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.resx =================================================================== diff -u -rc7814fa3fc22bf7efe81f387e9366a3582019469 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.resx (.../Resources.resx) (revision c7814fa3fc22bf7efe81f387e9366a3582019469) +++ Ringtoets/Piping/src/Ringtoets.Piping.Forms/Properties/Resources.resx (.../Resources.resx) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -568,9 +568,6 @@ Kan locatie '{0}' niet gebruiken als invoer. {1} - - Kan deklaagdikte niet afleiden op basis van de invoer. - De waarde van het L-coördinaat voor het intredepunt mag niet kleiner zijn dan 0. @@ -592,9 +589,6 @@ b - - Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer. - Toetspeil moet een geldige waarde hebben. Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs =================================================================== diff -u -rc0a3ced404197fd781c6fcbcfc21c6676592be57 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision c0a3ced404197fd781c6fcbcfc21c6676592be57) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingCalculationService.cs (.../PipingCalculationService.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -112,11 +112,10 @@ { return new PipingCalculator(CreateInputFromData(input), SubCalculatorFactory).CalculateThicknessCoverageLayer(); } - catch (PipingCalculatorException e) + catch (PipingCalculatorException) { - LogMessagesAsError(Resources.Error_in_thickness_coverage_calculation_0, e.Message); + return double.NaN; } - return double.NaN; } private static PipingCalculatorInput CreateInputFromData(PipingInput inputParameters) Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingInputSynchronizer.cs =================================================================== diff -u -rc0a3ced404197fd781c6fcbcfc21c6676592be57 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingInputSynchronizer.cs (.../PipingInputSynchronizer.cs) (revision c0a3ced404197fd781c6fcbcfc21c6676592be57) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/PipingInputSynchronizer.cs (.../PipingInputSynchronizer.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -1,12 +1,17 @@ using System; using Core.Common.Base; using Core.Common.Base.Data; +using Core.Common.Base.Properties; +using log4net; using Ringtoets.Piping.Data; +using Resources = Ringtoets.Piping.Service.Properties.Resources; namespace Ringtoets.Piping.Service { public class PipingInputSynchronizer : IObserver { + private static readonly ILog log = LogManager.GetLogger(typeof(PipingInputSynchronizer)); + private const double seepageLengthStandardDeviationFraction = 0.1; private readonly PipingInput input; @@ -52,23 +57,35 @@ RingtoetsPipingSurfaceLine surfaceLine = input.SurfaceLine; double exitPointL = input.ExitPointL; - double thicknessTopAquiferLayer = GetThicknessTopAquiferLayer(soilProfile, surfaceLine, exitPointL); - TrySetThicknessAquiferLayerMean(input, thicknessTopAquiferLayer); + if (soilProfile != null && surfaceLine != null && !double.IsNaN(exitPointL)) + { + double thicknessTopAquiferLayer = GetThicknessTopAquiferLayer(soilProfile, surfaceLine, exitPointL); + TrySetThicknessAquiferLayerMean(input, thicknessTopAquiferLayer); + + if (double.IsNaN(input.ThicknessAquiferLayer.Mean)) + { + log.Warn(Resources.PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer); + } + } + else + { + input.ThicknessAquiferLayer.Mean = (RoundedDouble) double.NaN; + } } - private static double GetThicknessTopAquiferLayer(PipingSoilProfile soilProfile, RingtoetsPipingSurfaceLine surfaceLine, double exitPointL) + private static void TrySetThicknessAquiferLayerMean(PipingInput input, double thicknessTopAquiferLayer) { - var thicknessTopAquiferLayer = double.NaN; - - if (soilProfile != null && surfaceLine != null && !double.IsNaN(exitPointL)) + try { - thicknessTopAquiferLayer = TryGetThicknessTopAquiferLayer(soilProfile, surfaceLine, exitPointL); + input.ThicknessAquiferLayer.Mean = (RoundedDouble) thicknessTopAquiferLayer; } - - return thicknessTopAquiferLayer; + catch (ArgumentOutOfRangeException) + { + input.ThicknessAquiferLayer.Mean = (RoundedDouble) double.NaN; + } } - private static double TryGetThicknessTopAquiferLayer(PipingSoilProfile soilProfile, RingtoetsPipingSurfaceLine surfaceLine, double exitPointL) + private static double GetThicknessTopAquiferLayer(PipingSoilProfile soilProfile, RingtoetsPipingSurfaceLine surfaceLine, double exitPointL) { try { @@ -81,27 +98,32 @@ } } - private static void TrySetThicknessAquiferLayerMean(PipingInput input, double thicknessTopAquiferLayer) + private void UpdateThicknessCoverageLayer() { - try + if (input.SurfaceLine != null && input.SoilProfile != null & !double.IsNaN(input.ExitPointL)) { - input.ThicknessAquiferLayer.Mean = (RoundedDouble) thicknessTopAquiferLayer; + TrySetThicknessCoverageLayer(); + + if (double.IsNaN(input.ThicknessCoverageLayer.Mean)) + { + log.Warn(Resources.PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer); + } } - catch (ArgumentOutOfRangeException) + else { - input.ThicknessAquiferLayer.Mean = (RoundedDouble) double.NaN; + input.ThicknessCoverageLayer.Mean = (RoundedDouble)double.NaN; } } - private void UpdateThicknessCoverageLayer() + private void TrySetThicknessCoverageLayer() { try { - input.ThicknessCoverageLayer.Mean = (RoundedDouble) PipingCalculationService.CalculateThicknessCoverageLayer(input); + input.ThicknessCoverageLayer.Mean = (RoundedDouble)PipingCalculationService.CalculateThicknessCoverageLayer(input); } catch (ArgumentOutOfRangeException) { - input.ThicknessCoverageLayer.Mean = (RoundedDouble) double.NaN; + input.ThicknessCoverageLayer.Mean = (RoundedDouble)double.NaN; } } Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/AssemblyInfo.cs =================================================================== diff -u -r4512af7782ee31b36941bb280b54d9da2953dd71 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/AssemblyInfo.cs (.../AssemblyInfo.cs) (revision 4512af7782ee31b36941bb280b54d9da2953dd71) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/AssemblyInfo.cs (.../AssemblyInfo.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -20,8 +20,10 @@ // All rights reserved. using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [assembly: AssemblyTitle("Ringtoets.Piping.Service")] [assembly: AssemblyProduct("Ringtoets.Piping.Service")] -[assembly: Guid("3ad44406-356a-4ad1-b911-510da20d5430")] \ No newline at end of file +[assembly: Guid("3ad44406-356a-4ad1-b911-510da20d5430")] +[assembly: InternalsVisibleTo("Ringtoets.Piping.Service.Test")] \ No newline at end of file Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.Designer.cs =================================================================== diff -u -r1069905ff1d4bb81d6acff6c130a4bed0b041b58 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 1069905ff1d4bb81d6acff6c130a4bed0b041b58) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -97,15 +97,26 @@ } /// - /// Looks up a localized string similar to Berekenen van de dikte van de deklaag niet gelukt: {0}. + /// Looks up a localized string similar to Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer.. /// - internal static string Error_in_thickness_coverage_calculation_0 { + internal static string PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer { get { - return ResourceManager.GetString("Error_in_thickness_coverage_calculation_0", resourceCulture); + return ResourceManager.GetString("PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aq" + + "uifer_layer", resourceCulture); } } /// + /// Looks up a localized string similar to Kan de dikte van de deklaag niet afleiden op basis van de invoer.. + /// + internal static string PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer { + get { + return ResourceManager.GetString("PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_c" + + "overage_layer", resourceCulture); + } + } + + /// /// Looks up a localized string similar to Validatie van '{0}' beëindigd om: {1}. /// internal static string Validation_Subject_0_ended_Time_1_ { Index: Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.resx =================================================================== diff -u -r1069905ff1d4bb81d6acff6c130a4bed0b041b58 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.resx (.../Resources.resx) (revision 1069905ff1d4bb81d6acff6c130a4bed0b041b58) +++ Ringtoets/Piping/src/Ringtoets.Piping.Service/Properties/Resources.resx (.../Resources.resx) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -129,13 +129,16 @@ Validatie mislukt: {0} - - Berekenen van de dikte van de deklaag niet gelukt: {0} - Validatie van '{0}' beëindigd om: {1} Validatie van '{0}' gestart om: {1} + + Kan de dikte van het watervoerend pakket niet afleiden op basis van de invoer. + + + Kan de dikte van de deklaag niet afleiden op basis van de invoer. + \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/PipingCalculatorTest.cs =================================================================== diff -u -rc0a3ced404197fd781c6fcbcfc21c6676592be57 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/PipingCalculatorTest.cs (.../PipingCalculatorTest.cs) (revision c0a3ced404197fd781c6fcbcfc21c6676592be57) +++ Ringtoets/Piping/test/Ringtoets.Piping.Calculation.Test/PipingCalculatorTest.cs (.../PipingCalculatorTest.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -3,6 +3,7 @@ using System.Linq; using Core.Common.Base.Data; +using Core.Common.Base.Geometry; using Core.Common.TestUtil; using NUnit.Framework; using Ringtoets.Piping.Calculation.SubCalculator; @@ -356,10 +357,31 @@ var result = calculation.CalculateThicknessCoverageLayer(); // Assert - Assert.IsFalse(double.IsNaN(result)); + Assert.AreEqual(1.0, result); } [Test] + public void CalculateThicknessCoverageLayer_WithValidInputWithAquiferAboveSurfaceLine_ReturnsNegativeThickness() + { + // Setup + PipingCalculatorInput input = new TestPipingInput().AsRealInput(); + input.SurfaceLine.SetGeometry(new [] + { + new Point3D(0, 0, 0.5), + new Point3D(1, 0, 1.5), + new Point3D(2, 0, -1) + }); + + var calculation = new PipingCalculator(input, new PipingSubCalculatorFactory()); + + // Call + var result = calculation.CalculateThicknessCoverageLayer(); + + // Assert + Assert.AreEqual(result, -3.0); + } + + [Test] public void CalculateThicknessCoverageLayer_WithExitPointLBeyondSurfaceLineInput_ReturnsNaN() { // Setup Index: Ringtoets/Piping/test/Ringtoets.Piping.Calculation.TestUtil/TestPipingInput.cs =================================================================== diff -u -rc0a3ced404197fd781c6fcbcfc21c6676592be57 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/test/Ringtoets.Piping.Calculation.TestUtil/TestPipingInput.cs (.../TestPipingInput.cs) (revision c0a3ced404197fd781c6fcbcfc21c6676592be57) +++ Ringtoets/Piping/test/Ringtoets.Piping.Calculation.TestUtil/TestPipingInput.cs (.../TestPipingInput.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -69,7 +69,8 @@ { return new PipingSoilProfile(String.Empty, -2, new [] { - new PipingSoilLayer(9) + new PipingSoilLayer(9), + new PipingSoilLayer(4) { IsAquifer = true }, Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs =================================================================== diff -u -rc0a3ced404197fd781c6fcbcfc21c6676592be57 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision c0a3ced404197fd781c6fcbcfc21c6676592be57) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingCalculationServiceTest.cs (.../PipingCalculationServiceTest.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -56,7 +56,7 @@ } [Test] - public void CalculateThicknessCoverageLayer_InValidPipingCalculationWithOutput_LogsError() + public void CalculateThicknessCoverageLayer_InValidPipingCalculationWithOutput_ReturnsNaN() { // Setup PipingCalculation invalidPipingCalculation = PipingCalculationFactory.CreateCalculationWithValidInput(); @@ -74,14 +74,10 @@ }); // Call - Action call = () => PipingCalculationService.CalculateThicknessCoverageLayer(invalidPipingCalculation.InputParameters); + var result = PipingCalculationService.CalculateThicknessCoverageLayer(invalidPipingCalculation.InputParameters); // Assert - TestHelper.AssertLogMessages(call, messages => - { - var msgs = messages.ToArray(); - StringAssert.StartsWith("Berekenen van de dikte van de deklaag niet gelukt: ", msgs[0]); - }); + Assert.IsNaN(result); } [Test] Index: Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingInputSynchronizerTest.cs =================================================================== diff -u -rc0a3ced404197fd781c6fcbcfc21c6676592be57 -r8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3 --- Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingInputSynchronizerTest.cs (.../PipingInputSynchronizerTest.cs) (revision c0a3ced404197fd781c6fcbcfc21c6676592be57) +++ Ringtoets/Piping/test/Ringtoets.Piping.Service.Test/PipingInputSynchronizerTest.cs (.../PipingInputSynchronizerTest.cs) (revision 8b85f978c7bbe5c29a6ada6509f14d0462b8b9c3) @@ -1,5 +1,4 @@ using System; -using Core.Common.Base; using Core.Common.Base.Data; using Core.Common.Base.Geometry; using Core.Common.TestUtil; @@ -186,26 +185,34 @@ PipingInputSynchronizer.Synchronize(input); // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + TestHelper.AssertLogMessagesCount(call, 0); Assert.IsNaN(input.ThicknessAquiferLayer.Mean); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] [TestCase(1e-6)] [TestCase(1)] - public void NotifyObservers_SoilProfileSingleAquiferAboveSurfaceLine_ThicknessAquiferLayerNaN(double deltaAboveSurfaceLine) + public void NotifyObservers_SoilProfileSingleAquiferAboveSurfaceLine_ThicknessCoverageLayerNaNAndLog(double deltaAboveSurfaceLine) { // Setup var input = CreateInputWithSingleAquiferLayerAboveSurfaceLine(deltaAboveSurfaceLine); PipingInputSynchronizer.Synchronize(input); // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + var messages = new[] + { + Properties.Resources.PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer, + Properties.Resources.PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer + }; + TestHelper.AssertLogMessagesAreGenerated(call, messages, 2); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } @@ -231,57 +238,57 @@ var input = CreateInputWithAquiferAndCoverageLayer(); input.ExitPointL = (RoundedDouble)double.NaN; PipingInputSynchronizer.Synchronize(input); - + // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + TestHelper.AssertLogMessagesCount(call, 0); Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void NotifyObservers_MeanSetSoilProfileSetToNull_ThicknessCoverageLayerNaN() + public void NotifyObservers_MeanSetExitPointSetBeyondSurfaceLine_ThicknessAquiferLayerNaNAndLog() { // Setup var input = CreateInputWithAquiferAndCoverageLayer(); + input.ExitPointL = (RoundedDouble)3.0; PipingInputSynchronizer.Synchronize(input); - input.ThicknessCoverageLayer.Mean = new RoundedDouble(2, new Random(21).NextDouble() + 1); // Call - input.SoilProfile= null; - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + var messages = new[] + { + Properties.Resources.PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer, + Properties.Resources.PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer + }; + TestHelper.AssertLogMessagesAreGenerated(call, messages, 2); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void NotifyObservers_AquiferLayerThicknessZero_ThicknessCoverageLayerNaN() + public void NotifyObservers_MeanSetSoilProfileSetToNull_ThicknessCoverageLayerNaN() { // Setup var input = CreateInputWithAquiferAndCoverageLayer(); PipingInputSynchronizer.Synchronize(input); - input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] - { - new PipingSoilLayer(2.0) - { - IsAquifer = true - }, - new PipingSoilLayer(2.0) - { - IsAquifer = false - } - }); + input.ThicknessCoverageLayer.Mean = new RoundedDouble(2, new Random(21).NextDouble() + 1); + input.SoilProfile = null; + // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + TestHelper.AssertLogMessagesCount(call, 0); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - public void NotifyObservers_ProfileWithoutAquiferLayer_ThicknessCoverageLayerNaN() + public void NotifyObservers_ProfileWithoutAquiferLayer_ThicknessCoverageLayerNaNAndLog() { // Setup var input = CreateInputWithAquiferAndCoverageLayer(); @@ -295,10 +302,17 @@ }); // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + var messages = new[] + { + Properties.Resources.PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer, + Properties.Resources.PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer + }; + TestHelper.AssertLogMessagesAreGenerated(call, messages, 2); Assert.IsNaN(input.ThicknessCoverageLayer.Mean); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] @@ -316,54 +330,65 @@ } [Test] - [TestCase(1e-6)] - [TestCase(1)] - public void SetSoilProfile_SoilProfileSingleAquiferAboveSurfaceLine_ThicknessAquiferLayerNaN(double deltaAboveSurfaceLine) + public void NotifyObservers_SoilProfileMultipleAquiferUnderSurfaceLine_MeanSetToTopAquiferThickness() { // Setup - var input = CreateInputWithSingleAquiferLayerAboveSurfaceLine(deltaAboveSurfaceLine); + double expectedThickness; + var input = CreateInputWithMultipleAquiferLayersUnderSurfaceLine(out expectedThickness); PipingInputSynchronizer.Synchronize(input); // Call input.NotifyObservers(); // Assert - Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + Assert.AreEqual(expectedThickness, input.ThicknessAquiferLayer.Mean, 1e-8); } [Test] - public void SetSoilProfile_SoilProfileMultipleAquiferUnderSurfaceLine_MeanSetToTopAquiferThickness() + public void NotifyObservers_MeanSetSoilProfileSetToNull_ThicknessAquiferLayerNaN() { // Setup - double expectedThickness; - var input = CreateInputWithMultipleAquiferLayersUnderSurfaceLine(out expectedThickness); + var input = CreateInputWithAquiferAndCoverageLayer(); PipingInputSynchronizer.Synchronize(input); + input.SoilProfile = null; + // Call input.NotifyObservers(); // Assert - Assert.AreEqual(expectedThickness, input.ThicknessAquiferLayer.Mean, 1e-8); + Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void SetSoilProfile_MeanSetSoilProfileSetToNull_ThicknessAquiferLayerNaN() + public void NotifyObservers_InputResultsInZeroAquiferThickness_ThicknessAquiferLayerNaNAndLog() { // Setup var input = CreateInputWithAquiferAndCoverageLayer(); PipingInputSynchronizer.Synchronize(input); + input.SoilProfile = new PipingSoilProfile(String.Empty, 0, new[] + { + new PipingSoilLayer(2.0) + { + IsAquifer = false + }, + new PipingSoilLayer(0.0) + { + IsAquifer = true + } + }); - input.SoilProfile = null; - // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert + var message = Properties.Resources.PipingInputSynchronizer_UpdateThicknessAquiferLayer_Cannot_determine_thickness_aquifer_layer; + TestHelper.AssertLogMessageIsGenerated(call, message, 1); Assert.IsNaN(input.ThicknessAquiferLayer.Mean); } [Test] - public void SetSoilProfile_InputResultsInZeroThickness_ThicknessAquiferLayerNaN() + public void NotifyObservers_InputResultsInZeroCoverageThickness_ThicknessCoverageLayerNaNAndLog() { // Setup var input = CreateInputWithAquiferAndCoverageLayer(); @@ -374,21 +399,23 @@ { IsAquifer = false }, - new PipingSoilLayer(0.0) + new PipingSoilLayer(2.0) { IsAquifer = true } }); // Call - input.NotifyObservers(); + Action call = () => input.NotifyObservers(); // Assert - Assert.IsNaN(input.ThicknessAquiferLayer.Mean); + var message = Properties.Resources.PipingInputSynchronizer_UpdateThicknessCoverageLayer_Cannot_determine_thickness_coverage_layer; + TestHelper.AssertLogMessageIsGenerated(call, message, 1); + Assert.IsNaN(input.ThicknessCoverageLayer.Mean); } [Test] - public void SetSoilProfile_SurfaceLineHalfWayProfileLayer_ThicknessSetToLayerHeightUnderSurfaceLine() + public void NotifyObservers_SurfaceLineHalfWayProfileLayer_ThicknessSetToLayerHeightUnderSurfaceLine() { // Setup var input = CreateInputWithAquiferAndCoverageLayer(); @@ -451,13 +478,17 @@ }); var soilProfile = new PipingSoilProfile(String.Empty, 0, new[] { - new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine) + new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine + 2) { IsAquifer = false }, new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine + 1) { IsAquifer = true + }, + new PipingSoilLayer(surfaceLineTopLevel + deltaAboveSurfaceLine) + { + IsAquifer = false } }); var input = new PipingInput(new GeneralPipingInput())