Index: src/Deltares.DSoilModel.Data/Translations.xml =================================================================== diff -u -r631 -r639 --- src/Deltares.DSoilModel.Data/Translations.xml (.../Translations.xml) (revision 631) +++ src/Deltares.DSoilModel.Data/Translations.xml (.../Translations.xml) (revision 639) @@ -70,7 +70,7 @@ - + Index: src/Deltares.DSoilModel.Data.Tests/DSoilModelProjectTest.cs =================================================================== diff -u -r631 -r639 --- src/Deltares.DSoilModel.Data.Tests/DSoilModelProjectTest.cs (.../DSoilModelProjectTest.cs) (revision 631) +++ src/Deltares.DSoilModel.Data.Tests/DSoilModelProjectTest.cs (.../DSoilModelProjectTest.cs) (revision 639) @@ -47,6 +47,8 @@ [TestFixture] public class DSoilModelProjectTest { + private bool oldIsDataEventPublishStopped; + private IContext oldContext; private object geographicHelper; [TestFixtureSetUp] @@ -57,15 +59,34 @@ geographicHelper = GeographicHelper.Instance; GeographicHelper.Instance = new DotSpatialGeographicHelper(); + + oldContext = Context.CurrentContext; + Context.CurrentContext = new DSoilModelContext(); } [TestFixtureTearDown] public void FixtureTearDown() { DataEventPublisher.IsDataEventPublishStopped = oldIsDataEventPublishStopped; GeographicHelper.Instance = geographicHelper as GeographicHelper; + Context.CurrentContext = new DSoilModelContext(); } + [TestCase(ParameterViewSettings.ProbabilisticParameters, 9)] + [TestCase(ParameterViewSettings.AsIsParameters, 22)] + [TestCase(ParameterViewSettings.AllParameters, 31)] + public void TestValidationOfDefaultSoilProperties(ParameterViewSettings parameterView, int errorCount) + { + var project = new DSoilModelProject { ParameterView = parameterView }; + var context = (DSoilModelContext)Context.CurrentContext; + context.ParameterView = parameterView; + + project.Soils.Soils.Add(new Soil {Name = "TestSoil"} ); + var result = Validator.Validate(project); + + Assert.AreEqual(errorCount, result.Count(r => r.MessageType == ValidationResultType.Error)); + } + [TestCase("Boring_RDNAP.gef", true, false)] [TestCase("Boring_RDNAPParis.gef", true, true)] [TestCase("Boring_UserXYID.gef", false, false)] @@ -849,8 +870,6 @@ Soil.Mechanisms = oldMechanisms; } - private bool oldIsDataEventPublishStopped; - private static Soil CreateTestSoil(bool defineStressTables = true) { Soil.Mechanisms = new[] Index: src/Deltares.DSoilModel.Data/DSoilModelProject.cs =================================================================== diff -u -r631 -r639 --- src/Deltares.DSoilModel.Data/DSoilModelProject.cs (.../DSoilModelProject.cs) (revision 631) +++ src/Deltares.DSoilModel.Data/DSoilModelProject.cs (.../DSoilModelProject.cs) (revision 639) @@ -25,6 +25,7 @@ using System.ComponentModel; using System.IO; using System.Linq; +using System.Reflection; using Deltares.Geographic; using Deltares.Geometry; using Deltares.Geotechnics; @@ -734,6 +735,34 @@ } /// + /// Validation of soil properties that may not be empty (NaN). + /// + [Validate] + public ValidationResult[] ValidateSoilPropertiesSpecified() + { + // note, for Stochastic soil properties, DSL gives validation errors if the Stochast mean and/or other fields are empty (NaN) + // for other soil propertyies DSL does not check for empty cells unless the [NotClear] attribute was specified, which is not the cae for Soil class. + var result = new List(); + + // only check the non-stochastic public properties + var properties = typeof(Soil).GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.PropertyType == typeof(double)); + + foreach (var soil in Soils.Soils) + { + foreach (var property in properties) + { + if (Context.IsVisible(soil, property.Name) == true && double.NaN.Equals(property.GetValue(soil, null))) + { + var msg = String.Format(LocalizationManager.GetTranslatedText(this, "ValidationNoValue"), + LocalizationManager.GetTranslatedText(typeof(Soil), property.Name)); + result.Add(new ValidationResult(ValidationResultType.Error, msg, soil)); + } + } + } + return result.ToArray(); + } + + /// /// Validation for the specific mechanism point locations on soil profile 2D. /// [Validate]