Index: src/Deltares.DSoilModel.Tests/DSoilModelProjectTest.cs =================================================================== diff -u -r7 -r87 --- src/Deltares.DSoilModel.Tests/DSoilModelProjectTest.cs (.../DSoilModelProjectTest.cs) (revision 7) +++ src/Deltares.DSoilModel.Tests/DSoilModelProjectTest.cs (.../DSoilModelProjectTest.cs) (revision 87) @@ -20,7 +20,97 @@ [TestFixture] public class DSoilModelProjectTest { + private object geographicHelper; + + [TestFixtureSetUp] + public void FixtureSetup() + { + oldIsDataEventPublishStopped = DataEventPublisher.IsDataEventPublishStopped; + DataEventPublisher.IsDataEventPublishStopped = true; + + geographicHelper = GeographicHelper.Instance; + GeographicHelper.Instance = new DotSpatialGeographicHelper(); + } + + [TestFixtureTearDown] + public void FixtureTearDown() + { + DataEventPublisher.IsDataEventPublishStopped = oldIsDataEventPublishStopped; + GeographicHelper.Instance = geographicHelper as GeographicHelper; + } + [Test] + public void TestLinkCptsAndBoringsToNearestSoilSegment() + { + var project = (DSoilModelProject) DSoilModelIO.OpenSoilDatabase(@"..\..\..\data\TestData\SosDataPlusBorings.soil"); + var selection = new List(); + + // a combination of Cpts, Borings and Segments to link with are selected + selection.AddRange(project.SoilSegments.Where(x => x.Name.StartsWith("36009_"))); + selection.AddRange(project.SoilSegments.Where(x => x.Name.StartsWith("36010_"))); + + // none of the segments are linked + Assert.IsFalse(project.SoilSegments.Any(s => s.Cpts.Count > 0 || s.Borings.Count > 0)); + + // 36009_Piping & 36009_Stability & 36010_Piping & 36010_Stability + Assert.AreEqual(4, selection.Count); + + // CPT's along these segments + selection.Add(project.CPTs.First(x => x.Name == "S45E00003")); + selection.Add(project.CPTs.First(x => x.Name == "S39G00196")); + selection.Add(project.CPTs.First(x => x.Name == "S39G00042")); + selection.Add(project.CPTs.First(x => x.Name == "S45F00115")); + selection.Add(project.CPTs.First(x => x.Name == "S45F00080")); + selection.Add(project.CPTs.First(x => x.Name == "S45F00128")); + + // dummy borings, only 2 in this project + selection.AddRange(project.Borings); + + Assert.AreEqual(12, selection.Count); + + // call + project.LinkCptsAndBoringsToNearestSegment(selection.ToArray()); + + // assert (see the map in D-Soil Model for reference) + Assert.AreEqual(4, project.SoilSegments.Count(s => s.Cpts.Count > 0 || s.Borings.Count > 0)); + Assert.AreEqual(2, project.SoilSegments.Count(s => s.Borings.Count > 0)); + + // the 2 segments on the west side both get the same 3 Cpts, 2 Borings + var segment = project.SoilSegments.First(s => s.Name == "36009_Piping"); + Assert.AreEqual(3, segment.Cpts.Count); + Assert.AreEqual(2, segment.Borings.Count); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45E00003")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S39G00196")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S39G00042")); + Assert.IsTrue(segment.Borings.Any(b => b.Boring.Name == "TestBoring1")); + Assert.IsTrue(segment.Borings.Any(b => b.Boring.Name == "TestBoring2")); + + segment = project.SoilSegments.First(s => s.Name == "36009_Stability"); + Assert.AreEqual(3, segment.Cpts.Count); + Assert.AreEqual(2, segment.Borings.Count); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45E00003")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S39G00196")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S39G00042")); + Assert.IsTrue(segment.Borings.Any(b => b.Boring.Name == "TestBoring1")); + Assert.IsTrue(segment.Borings.Any(b => b.Boring.Name == "TestBoring2")); + + // the 2 segments on the east side both get the same 3 Cpts, no Borings + segment = project.SoilSegments.First(s => s.Name == "36010_Piping"); + Assert.AreEqual(3, segment.Cpts.Count); + Assert.AreEqual(0, segment.Borings.Count); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45F00115")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45F00080")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45F00128")); + + segment = project.SoilSegments.First(s => s.Name == "36010_Stability"); + Assert.AreEqual(3, segment.Cpts.Count); + Assert.AreEqual(0, segment.Borings.Count); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45F00115")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45F00080")); + Assert.IsTrue(segment.Cpts.Any(c => c.ConePenetrationTestData.Name == "S45F00128")); + } + + [Test] public void TestSplitSimpleSoilSegment() { var project = new DSoilModelProject(); @@ -589,19 +679,6 @@ private bool oldIsDataEventPublishStopped; - [TestFixtureSetUp] - public void FixtureSetup() - { - oldIsDataEventPublishStopped = DataEventPublisher.IsDataEventPublishStopped; - DataEventPublisher.IsDataEventPublishStopped = true; - } - - [TestFixtureTearDown] - public void FixtureTearDown() - { - DataEventPublisher.IsDataEventPublishStopped = oldIsDataEventPublishStopped; - } - private static Soil CreateTestSoil(bool defineStressTables = true) { Soil.Mechanisms = new[]