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);
}
}
}
}
}