Index: src/Deltares.DSoilModel.Data.Tests/DSoilModelDataSourceRedirectorTests.cs =================================================================== diff -u -r346 -r360 --- src/Deltares.DSoilModel.Data.Tests/DSoilModelDataSourceRedirectorTests.cs (.../DSoilModelDataSourceRedirectorTests.cs) (revision 346) +++ src/Deltares.DSoilModel.Data.Tests/DSoilModelDataSourceRedirectorTests.cs (.../DSoilModelDataSourceRedirectorTests.cs) (revision 360) @@ -1,5 +1,7 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using Deltares.Geotechnics; +using Deltares.Geotechnics.Mechanisms; using Deltares.Probabilistic; using Deltares.Standard; using Deltares.Standard.Reflection; @@ -28,29 +30,164 @@ Assert.Contains(pi, DSoilModelDataSourceRedirector.StochastProperties); } -// [TestCase("Name")] -// [TestCase("Deviation")] [TestCase("CohesionStochast")] - public void GetRedirectedDataSourcesTest_SourceSoil(string propertyName) + [TestCase("AbovePhreaticLevelStochast")] + public void GetRedirectedDataSourcesTest_SourceSoilStochast(string propertyName) { var redirector = new DSoilModelDataSourceRedirector(); var source = new Soil(); + var propertyInfo = PropertyInfoSupport.GetPropertyInfo(typeof(Soil), propertyName); + var stochast = (Stochast)propertyInfo.GetValue(source, null); // Enable the data source manager + DataSourceManager.DataSources = new List(); DataSourceManager.Active = true; DataSourceManager.StartListening(); - DataSourceManager.Redirector = new DSoilModelDataSourceRedirector(); - // Further changes from here on are user changes + // Set user as CurrentSource DataSourceManager.CurrentSource = DataSourceSystemType.User; + var dataSources = redirector.GetRedirectedDataSources(source, propertyName).ToList(); + + // As there are no datasources in the manager, source and property must not be redirected + Assert.IsNotNull(dataSources); + Assert.AreEqual(1, dataSources.Count); + Assert.AreEqual(source, dataSources[0].Source); + Assert.AreEqual(propertyName, dataSources[0].Property); + + // Add redirection info + var listdsi = new List(); + var dsi1 = new DataSourceInfo + { + Source = stochast //source.CohesionStochast + }; + dsi1.AddChangedProperty(propertyName, DataSourceSystemType.User); + listdsi.Add(dsi1); + + DataSourceManager.DataSources = listdsi; + dataSources = redirector.GetRedirectedDataSources(source, propertyName).ToList(); + + // source/property must now be found and return the subproperties of the stochast + Assert.IsNotNull(dataSources); + Assert.AreEqual(7, dataSources.Count); + Assert.AreEqual("DistributionType", dataSources[0].Property); + Assert.AreEqual("Mean", dataSources[1].Property); + Assert.AreEqual("Deviation", dataSources[2].Property); + Assert.AreEqual("Variation", dataSources[3].Property); + Assert.AreEqual("DeviationType", dataSources[4].Property); + Assert.AreEqual("Shift", dataSources[5].Property); + Assert.AreEqual(propertyName, dataSources[6].Property); + + // Changing CurrentSource should not matter + DataSourceManager.CurrentSource = DataSourceSystemType.MGeobase; + dataSources = redirector.GetRedirectedDataSources(source, propertyName).ToList(); + Assert.IsNotNull(dataSources); + Assert.AreEqual(7, dataSources.Count); + Assert.AreEqual("DistributionType", dataSources[0].Property); + Assert.AreEqual("Mean", dataSources[1].Property); + Assert.AreEqual("Deviation", dataSources[2].Property); + Assert.AreEqual("Variation", dataSources[3].Property); + Assert.AreEqual("DeviationType", dataSources[4].Property); + Assert.AreEqual("Shift", dataSources[5].Property); + Assert.AreEqual(propertyName, dataSources[6].Property); + } + + [TestCase("Cohesion")] + [TestCase("AbovePhreaticLevel")] + public void GetRedirectedDataSourcesTest_SourceSoilNonStochastWithAssociatedStochast(string propertyName) + { + var redirector = new DSoilModelDataSourceRedirector(); + var source = new Soil(); + // Empty mechanisms for Soil + Soil.Mechanisms = new Mechanism[0]; + var propertyInfo = PropertyInfoSupport.GetPropertyInfo(typeof(Soil), propertyName + "Stochast"); + var stochast = (Stochast)propertyInfo.GetValue(source, null); + // Enable the data source manager + DataSourceManager.Active = true; + DataSourceManager.StartListening(); + DataSourceManager.Redirector = new DSoilModelDataSourceRedirector(); + + // Set user as CurrentSource + DataSourceManager.CurrentSource = DataSourceSystemType.User; var dataSources = redirector.GetRedirectedDataSources(source, propertyName).ToList(); - // test count??? 1? even in default + // As there are no stochasts visible in a default soil without mechanisms, source and property must not be redirected + Assert.IsNotNull(dataSources); + Assert.AreEqual(1, dataSources.Count); + Assert.AreEqual(source, dataSources[0].Source); + Assert.AreEqual(propertyName, dataSources[0].Property); + + // Set mechanism for Soil so the stochasts become visible + Soil.Mechanisms = new[] + { + Mechanism.None + }; + + // Now the redirection must take place + dataSources = redirector.GetRedirectedDataSources(source, propertyName).ToList(); + Assert.IsNotNull(dataSources); + Assert.AreEqual(2, dataSources.Count); + Assert.AreEqual(stochast, dataSources[0].Source); + Assert.AreEqual("ActualValue", dataSources[0].Property); + Assert.AreEqual(source, dataSources[1].Source); + Assert.AreEqual(propertyName, dataSources[1].Property); + } + + [TestCase("Variation")] + [TestCase("DeviationVariation")] + public void GetRedirectedDataSourcesTest_SourceStochastVariations(string propertyName) + { + var redirector = new DSoilModelDataSourceRedirector(); + var source = new Soil(); + + // Enable the data source manager + DataSourceManager.Active = true; + DataSourceManager.StartListening(); + DataSourceManager.Redirector = new DSoilModelDataSourceRedirector(); + + // Set user as CurrentSource + DataSourceManager.CurrentSource = DataSourceSystemType.User; + var dataSources = redirector.GetRedirectedDataSources(source.CohesionStochast, propertyName).ToList(); + // property must be redirected to deviation Assert.IsNotNull(dataSources); + Assert.AreEqual("Deviation", dataSources[0].Property); + + DataSourceManager.CurrentSource = DataSourceSystemType.Csv; + dataSources = redirector.GetRedirectedDataSources(source.CohesionStochast, propertyName).ToList(); + + // property must always be redirected as it is independend of the CurrentSource + Assert.IsNotNull(dataSources); + Assert.AreEqual("Deviation", dataSources[0].Property); } + [Test] + public void GetRedirectedDataSourcesTest_SourceStochastDeviationType() + { + string propertyName = "DeviationTypeString"; + var redirector = new DSoilModelDataSourceRedirector(); + var source = new Soil(); + + // Enable the data source manager + DataSourceManager.Active = true; + DataSourceManager.StartListening(); + DataSourceManager.Redirector = new DSoilModelDataSourceRedirector(); + + // Set user as CurrentSource + DataSourceManager.CurrentSource = DataSourceSystemType.User; + var dataSources = redirector.GetRedirectedDataSources(source.CohesionStochast, propertyName).ToList(); + + // property must be redirected to deviation + Assert.IsNotNull(dataSources); + Assert.AreEqual("DeviationType", dataSources[0].Property); + + DataSourceManager.CurrentSource = DataSourceSystemType.Csv; + dataSources = redirector.GetRedirectedDataSources(source.CohesionStochast, propertyName).ToList(); + + // property must always be redirected as it is independend of the CurrentSource + Assert.IsNotNull(dataSources); + Assert.AreEqual("DeviationType", dataSources[0].Property); + } } }