using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using Deltares.Geotechnics.IO.Importers; using Deltares.Geotechnics.Mechanisms; using Deltares.Standard.Language; using NUnit.Framework; namespace Deltares.Geotechnics.IO.Tests { /// /// Import soil segments Importer for both segments.csv and soilprofiles.csv (DAM style) /// [TestFixture] internal class SegmentsImporterTest { /// /// Test that the soil segments importer returns a warning message if the file is empty. /// [Test] public void EmptySegmentsFileResultsInWarningMessage() { // empty file (header only) var testFile = "TestFiles/empty_segments.csv"; File.WriteAllText(testFile, @"segment_id;soilprofile_id;probability;calculation_type", Encoding.ASCII); // setup importer, not using factory var importer = new SoilSegmentsImporter(); var soilProfiles = new List { new SoilProfile1D { Name = "Dummy1D" }, new SoilProfile2D { Name = "Dummy2D" } }; // error messages are returned as list of strings, which are to be logged etc. by the application Assert.AreEqual(0, importer.ErrorMessages.Count); importer.ReadSoilSegments(testFile, soilProfiles); Assert.Greater(importer.ErrorMessages.Count, 0); Assert.NotNull(importer.ErrorMessages.FirstOrDefault(m => m.Message.Contains( LocalizationManager.GetTranslatedText(typeof(SoilSegmentsImporter), "SegmentsCsvFileEmptyWarning").Replace("{0}","")))); File.Delete(testFile); } /// /// Test the read methods used in D-SoilModel /// [Test] public void ReadSoilSegmentsFromCsvFiles() { const string segmentfile = "segments.csv"; const string soilprofilefile = "soilprofiles.csv"; var dir = @"..\..\..\data\Dam\Waterboards\Delfland\regionaal\csv files\"; var soils = new SoilList(); var importer = new SoilProfilesImporter(); var profiles = importer.ReadSoilProfiles(dir + soilprofilefile, soils); var segmentsImporter = new SoilSegmentsImporter(); var profilesList = new List(profiles); var segments = segmentsImporter.ReadSoilSegments(dir + segmentfile, profilesList); checkProfiles(segments); } private void checkProfiles(List segments) { Assert.AreEqual(segments.Count, 10); Assert.AreEqual(segments.Count(s => s.Mechanism == Mechanism.Piping), 5); Assert.AreEqual(segments.Count(s => s.Mechanism == Mechanism.Stability), 5); Assert.AreEqual(segments.Count(s => s.SegmentId == "1"), 2); Assert.AreEqual(segments.Count(s => s.SegmentId == "2"), 2); Assert.AreEqual(segments.Count(s => s.SegmentId == "3"), 2); Assert.AreEqual(segments.Count(s => s.SegmentId == "4"), 2); Assert.AreEqual(segments.Count(s => s.SegmentId == "5"), 2); // check sum of probabilities foreach (var segment in segments) { double probability = 0; foreach (var profile in segment.StochasticSoilModel.StochasticSoilProfiles) { probability += profile.Probability; } Assert.AreEqual(probability, 1.0, 0.000001); } // check that all soilprofiles (1D) are assigned a value foreach (var segment in segments) { foreach (var profile in segment.StochasticSoilModel.StochasticSoilProfiles) { Assert.IsTrue(profile.Profile != null, "Stochastic SoilProfile is not assigned a value"); Assert.IsTrue(profile.Profile is SoilProfile1D, "Only 1D soilprofiles are expected in this test"); var profile1D = (SoilProfile1D) profile.Profile; Assert.IsTrue(profile1D.Layers.Count > 0); } } } } }