Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikeAssessmentSectionEntityPersistorTest.cs =================================================================== diff -u -r8b53cc5e5753875d94f76359c6916ef6da38fe3c -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikeAssessmentSectionEntityPersistorTest.cs (.../DikeAssessmentSectionEntityPersistorTest.cs) (revision 8b53cc5e5753875d94f76359c6916ef6da38fe3c) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikeAssessmentSectionEntityPersistorTest.cs (.../DikeAssessmentSectionEntityPersistorTest.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -1,4 +1,25 @@ -using System; +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; @@ -106,7 +127,7 @@ { new HydraulicLocationEntity { - Name = hydraulicDatabaseLocationName, DesignWaterLevel = hydraulicDatabaseLocationDesignWaterLevel, HydraulicLocationEntityId = hydraulicDatabaseLocationStorageId, + Name = hydraulicDatabaseLocationName, DesignWaterLevel = hydraulicDatabaseLocationDesignWaterLevel, HydraulicLocationEntityId = hydraulicDatabaseLocationStorageId, LocationId = hydraulicDatabaseLocationLocationId, LocationX = hydraulicDatabaseLocationX, LocationY = hydraulicDatabaseLocationY, }, new HydraulicLocationEntity Index: Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikesPipingFailureMechanismEntityPersistorTest.cs =================================================================== diff -u -rd242e89e13ef602facae6a1ef91660242bcef340 -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikesPipingFailureMechanismEntityPersistorTest.cs (.../DikesPipingFailureMechanismEntityPersistorTest.cs) (revision d242e89e13ef602facae6a1ef91660242bcef340) +++ Application/Ringtoets/test/Application.Ringtoets.Storage.Test/Persistors/DikesPipingFailureMechanismEntityPersistorTest.cs (.../DikesPipingFailureMechanismEntityPersistorTest.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -1,4 +1,25 @@ -using System; +// Copyright (C) Stichting Deltares 2016. All rights reserved. +// +// This file is part of Ringtoets. +// +// Ringtoets is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// All names, logos, and references to "Deltares" are registered trademarks of +// Stichting Deltares and remain full property of Stichting Deltares at all times. +// All rights reserved. + +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; Index: Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanism.cs =================================================================== diff -u -re4c1ee9fe5170ccf7794006d572461d3f88e7740 -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanism.cs (.../PipingFailureMechanism.cs) (revision e4c1ee9fe5170ccf7794006d572461d3f88e7740) +++ Ringtoets/Piping/src/Ringtoets.Piping.Data/PipingFailureMechanism.cs (.../PipingFailureMechanism.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -83,7 +83,7 @@ { get { - return StochasticSoilModels.SelectMany(ssm => ssm.StochasticSoilProfiles.Select(ssp => ssp.SoilProfile)).ToList(); + return StochasticSoilModels.SelectMany(ssm => ssm.StochasticSoilProfiles.Select(ssp => ssp.SoilProfile)).Distinct().ToList(); } } Index: Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/PipingSoilProfileReader.cs =================================================================== diff -u -r045bb1ffbe520f780522bd6b4f6afe06c096d34c -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/PipingSoilProfileReader.cs (.../PipingSoilProfileReader.cs) (revision 045bb1ffbe520f780522bd6b4f6afe06c096d34c) +++ Ringtoets/Piping/src/Ringtoets.Piping.IO/SoilProfile/PipingSoilProfileReader.cs (.../PipingSoilProfileReader.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -324,7 +324,7 @@ "JOIN SoilLayer2D as l USING(SP2D_ID)", "LEFT JOIN {11}", "LEFT JOIN {12}", - "WHERE m.ME_Name = @ME_Name", + "WHERE m.{13} = @{13}", "ORDER BY ProfileName;"), SoilProfileDatabaseColumns.Dimension, SoilProfileDatabaseColumns.ProfileName, @@ -338,7 +338,8 @@ SoilProfileDatabaseColumns.SoilProfileId, layer2DCountQuery, materialPropertiesQuery, - layer2DPropertiesQuery); + layer2DPropertiesQuery, + MechanismDatabaseColumns.MechanismName); dataReader = CreateDataReader(countQuery + query2D + query1D, new SQLiteParameter { Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/PipingSoilProfilesImporter.cs =================================================================== diff -u -r0c4e4faf0839d9ad90af4ff556357fc27c1f333a -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/PipingSoilProfilesImporter.cs (.../PipingSoilProfilesImporter.cs) (revision 0c4e4faf0839d9ad90af4ff556357fc27c1f333a) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/FileImporter/PipingSoilProfilesImporter.cs (.../PipingSoilProfilesImporter.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -118,6 +118,12 @@ CheckIfAllProfilesAreUsed(importSoilProfileResult.ImportedItems, importStochasticSoilModelResult.ImportedItems); + if (ImportIsCancelled) + { + HandleUserCancellingImport(); + return false; + } + AddImportedDataToModel(surfaceLinesContext, importStochasticSoilModelResult.ImportedItems); return true; } @@ -139,6 +145,7 @@ private void CheckIfAllProfilesAreUsed(ICollection soilProfiles, ICollection stochasticSoilModels) { + NotifyProgress(RingtoetsPluginResources.PipingSoilProfilesImporter_CheckIfAllProfilesAreUsed_Start_checking_soil_profiles, 1, 1); foreach (var soilProfile in soilProfiles.Where(soilProfile => !PipingSoilProfileIsUsed(soilProfile, stochasticSoilModels))) { log.WarnFormat(RingtoetsPluginResources.PipingSoilProfilesImporter_CheckIfAllProfilesAreUsed_SoilProfile_0_is_not_used_in_any_stochastic_soil_model, soilProfile.Name); Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/Properties/Resources.Designer.cs =================================================================== diff -u -r0c4e4faf0839d9ad90af4ff556357fc27c1f333a -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 0c4e4faf0839d9ad90af4ff556357fc27c1f333a) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -80,7 +80,7 @@ } /// - /// Looks up a localized string similar to Geïmporteerde data toevoegen aan faalmechanisme. + /// Looks up a localized string similar to Geïmporteerde data toevoegen aan faalmechanisme.. /// public static string PipingSoilProfilesImporter_Adding_imported_data_to_model { get { @@ -89,7 +89,7 @@ } /// - /// Looks up a localized string similar to Het uitgelezen profiel '{0}' niet wordt niet gebruikt in een van de stochastische ondergrondmodellen.. + /// Looks up a localized string similar to Het uitgelezen profiel '{0}' wordt niet gebruikt in een van de stochastische ondergrondmodellen.. /// public static string PipingSoilProfilesImporter_CheckIfAllProfilesAreUsed_SoilProfile_0_is_not_used_in_any_stochastic_soil_model { get { @@ -99,6 +99,16 @@ } /// + /// Looks up a localized string similar to Controleren van ondergrondprofielen.. + /// + public static string PipingSoilProfilesImporter_CheckIfAllProfilesAreUsed_Start_checking_soil_profiles { + get { + return ResourceManager.GetString("PipingSoilProfilesImporter_CheckIfAllProfilesAreUsed_Start_checking_soil_profiles" + + "", resourceCulture); + } + } + + /// /// Looks up a localized string similar to {0} ///Het bestand wordt overgeslagen.. /// @@ -147,7 +157,7 @@ } /// - /// Looks up a localized string similar to Inlezen van de D-Soil Model database. + /// Looks up a localized string similar to Inlezen van de D-Soil Model database.. /// public static string PipingSoilProfilesImporter_Reading_database { get { @@ -156,7 +166,7 @@ } /// - /// Looks up a localized string similar to Inlezen van de ondergrondschematisering uit de D-Soil Model database. + /// Looks up a localized string similar to Inlezen van de ondergrondschematisering uit de D-Soil Model database.. /// public static string PipingSoilProfilesImporter_ReadingSoilProfiles { get { Index: Ringtoets/Piping/src/Ringtoets.Piping.Plugin/Properties/Resources.resx =================================================================== diff -u -r0c4e4faf0839d9ad90af4ff556357fc27c1f333a -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/src/Ringtoets.Piping.Plugin/Properties/Resources.resx (.../Resources.resx) (revision 0c4e4faf0839d9ad90af4ff556357fc27c1f333a) +++ Ringtoets/Piping/src/Ringtoets.Piping.Plugin/Properties/Resources.resx (.../Resources.resx) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -141,13 +141,13 @@ Deze profielmeting wordt overgeslagen. - Geïmporteerde data toevoegen aan faalmechanisme + Geïmporteerde data toevoegen aan faalmechanisme. Ondergrondschematiseringen importeren afgebroken. Geen data ingelezen. - Inlezen van de D-Soil Model database + Inlezen van de D-Soil Model database. {0} @@ -158,7 +158,7 @@ Deze ondergrondschematisering wordt overgeslagen. - Inlezen van de ondergrondschematisering uit de D-Soil Model database + Inlezen van de ondergrondschematisering uit de D-Soil Model database. Profielmeting {0} bevat aaneengesloten dubbele geometrie punten, welke zijn genegeerd. @@ -216,7 +216,7 @@ Het stochastisch ondergrondmodel '{0}' bestaat al in het faalmechanisme. - Het uitgelezen profiel '{0}' niet wordt niet gebruikt in een van de stochastische ondergrondmodellen. + Het uitgelezen profiel '{0}' wordt niet gebruikt in een van de stochastische ondergrondmodellen. Er is geen referentielijn beschikbaar. Geen data ingelezen. @@ -233,4 +233,7 @@ {0} Dit stochastisch ondergrondmodel wordt overgeslagen. + + Controleren van ondergrondprofielen. + \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismTest.cs =================================================================== diff -u -r17651988db014bcbf2059c03ba0aef438f79bec4 -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismTest.cs (.../PipingFailureMechanismTest.cs) (revision 17651988db014bcbf2059c03ba0aef438f79bec4) +++ Ringtoets/Piping/test/Ringtoets.Piping.Data.Test/PipingFailureMechanismTest.cs (.../PipingFailureMechanismTest.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -3,6 +3,7 @@ using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Data; +using Ringtoets.Piping.KernelWrapper.TestUtil; using Ringtoets.Piping.Primitives; namespace Ringtoets.Piping.Data.Test @@ -193,5 +194,41 @@ // Assert CollectionAssert.DoesNotContain(failureMechanism.CalculationsGroup.Children, folder); } + + [Test] + public void SoilProfiles_StochasticSoilModelsWithDuplicateProfiles_ReturnsDistinctProfiles() + { + // Setup + var failureMechanism = new PipingFailureMechanism(); + PipingSoilProfile profile = new TestPipingSoilProfile(); + StochasticSoilProfile stochasticProfile = new StochasticSoilProfile(0, SoilProfileType.SoilProfile1D, 0) + { + SoilProfile = profile + }; + failureMechanism.StochasticSoilModels.AddRange(new[] + { + new StochasticSoilModel(0, string.Empty, string.Empty) + { + StochasticSoilProfiles = + { + stochasticProfile + } + }, + new StochasticSoilModel(0, string.Empty, string.Empty) + { + StochasticSoilProfiles = + { + stochasticProfile + } + } + }); + + // Call + var profiles = failureMechanism.SoilProfiles; + + // Assert + Assert.AreEqual(1, profiles.Count); + Assert.AreSame(profile, profiles.First()); + } } } \ No newline at end of file Index: Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfile/PipingSoilProfileReaderTest.cs =================================================================== diff -u -r045bb1ffbe520f780522bd6b4f6afe06c096d34c -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfile/PipingSoilProfileReaderTest.cs (.../PipingSoilProfileReaderTest.cs) (revision 045bb1ffbe520f780522bd6b4f6afe06c096d34c) +++ Ringtoets/Piping/test/Ringtoets.Piping.IO.Test/SoilProfile/PipingSoilProfileReaderTest.cs (.../PipingSoilProfileReaderTest.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -189,7 +189,7 @@ } [Test] - public void ReadProfile_DatabaseWith1DAndOrphan1D_ReturnOneProfile() + public void ReadProfile_DatabaseWith1DAnd1DSoilProfileWithoutSoilLayers_ReturnOneProfile() { // Setup var testFile = "1dprofileWithEmpty1d.soil"; Index: Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/PipingSoilProfilesImporterTest.cs =================================================================== diff -u -r0c4e4faf0839d9ad90af4ff556357fc27c1f333a -r220a073b3d2066d57af048325e3ba37bb1340d0d --- Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/PipingSoilProfilesImporterTest.cs (.../PipingSoilProfilesImporterTest.cs) (revision 0c4e4faf0839d9ad90af4ff556357fc27c1f333a) +++ Ringtoets/Piping/test/Ringtoets.Piping.Plugin.Test/FileImporter/PipingSoilProfilesImporterTest.cs (.../PipingSoilProfilesImporterTest.cs) (revision 220a073b3d2066d57af048325e3ba37bb1340d0d) @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using Core.Common.Base; @@ -149,7 +150,6 @@ var failureMechanism = new PipingFailureMechanism(); mockRepository.ReplayAll(); - var expectedMessage = "Er is geen referentielijn beschikbaar. Geen data ingelezen."; var context = new StochasticSoilModelContext(failureMechanism, assessmentSection); context.Attach(observer); @@ -166,6 +166,7 @@ Action call = () => importResult = importer.Import(context, invalidFilePath); // Assert + var expectedMessage = "Er is geen referentielijn beschikbaar. Geen data ingelezen."; TestHelper.AssertLogMessageIsGenerated(call, expectedMessage, 1); Assert.IsFalse(importResult); CollectionAssert.IsEmpty(context.FailureMechanism.StochasticSoilModels); @@ -186,9 +187,10 @@ assessmentSection.ReferenceLine = new ReferenceLine(); mockRepository.ReplayAll(); + var progressChangeNotifications = new List(); var importer = new PipingSoilProfilesImporter { - ProgressChanged = IncrementProgress + ProgressChanged = (description, step, steps) => { progressChangeNotifications.Add(new ProgressNotification(description, step, steps)); } }; var context = new StochasticSoilModelContext(pipingFailureMechanism, assessmentSection); @@ -199,8 +201,37 @@ // Assert Assert.IsTrue(importResult); - Assert.AreEqual(34, progress); + var expectedProfiles = 26; + var expectedModels = 3; + var expectedProgressMessages = new List + { + new ProgressNotification("Inlezen van de D-Soil Model database.", 1, 1) + }; + for (var i = 1; i <= expectedProfiles; i++) + { + expectedProgressMessages.Add(new ProgressNotification("Inlezen van de ondergrondschematisering uit de D-Soil Model database.", i, expectedProfiles)); + } + expectedProgressMessages.Add(new ProgressNotification("Inlezen van de D-Soil Model database.", 1, 1)); + for (var i = 1; i <= expectedModels; i++) + { + expectedProgressMessages.Add(new ProgressNotification("Inlezen van de stochastische ondergrondmodellen.", i, expectedModels)); + } + expectedProgressMessages.Add(new ProgressNotification("Controleren van ondergrondprofielen.", 1, 1)); + for (var i = 1; i <= expectedModels; i++) + { + expectedProgressMessages.Add(new ProgressNotification("Geïmporteerde data toevoegen aan faalmechanisme.", i, expectedModels)); + } + Assert.AreEqual(expectedProgressMessages.Count, progressChangeNotifications.Count); + for (var i = 0; i < expectedProgressMessages.Count; i++) + { + var notification = expectedProgressMessages[i]; + var actualNotification = progressChangeNotifications[i]; + Assert.AreEqual(notification.Text, actualNotification.Text); + Assert.AreEqual(notification.CurrentStep, actualNotification.CurrentStep); + Assert.AreEqual(notification.TotalSteps, actualNotification.TotalSteps); + } + mockRepository.VerifyAll(); } @@ -228,17 +259,18 @@ // Precondition importer.Import(context, validFilePath); var names = context.FailureMechanism.StochasticSoilModels.Select(ssm => ssm.Name); - var expectedLogMessages = names.Select(name => string.Format("Het stochastisch ondergrondmodel '{0}' bestaat al in het faalmechanisme.", name)).ToList(); - expectedLogMessages.Add(String.Format("Het uitgelezen profiel '{0}' niet wordt niet gebruikt in een van de stochastische ondergrondmodellen.", "Segment_36005_1D2")); - expectedLogMessages.Add(String.Format("Het uitgelezen profiel '{0}' niet wordt niet gebruikt in een van de stochastische ondergrondmodellen.", "Segment_36005_1D3")); // Call Action call = () => importResult = importer.Import(context, validFilePath); - TestHelper.AssertLogMessagesAreGenerated(call, expectedLogMessages, expectedLogMessages.Count); // Assert + var expectedLogMessages = names.Select(name => string.Format("Het stochastisch ondergrondmodel '{0}' bestaat al in het faalmechanisme.", name)).ToList(); + expectedLogMessages.Add(String.Format("Het uitgelezen profiel '{0}' wordt niet gebruikt in een van de stochastische ondergrondmodellen.", "Segment_36005_1D2")); + expectedLogMessages.Add(String.Format("Het uitgelezen profiel '{0}' wordt niet gebruikt in een van de stochastische ondergrondmodellen.", "Segment_36005_1D3")); + TestHelper.AssertLogMessagesAreGenerated(call, expectedLogMessages, expectedLogMessages.Count); + Assert.IsTrue(importResult); - Assert.AreEqual(34*2, progress); + Assert.AreEqual(35*2, progress); mockRepository.VerifyAll(); } @@ -319,7 +351,7 @@ // Assert Assert.IsTrue(importResult); - Assert.AreEqual(35, progress); + Assert.AreEqual(36, progress); } [Test] @@ -382,6 +414,10 @@ var importResult = false; + // Call + Action call = () => importResult = importer.Import(context, corruptPath); + + // Assert var internalErrorMessage = new FileReaderErrorMessageBuilder(corruptPath) .WithSubject("ondergrondschematisering 'Profile'") .Build(string.Format(RingtoetsIOResources.PipingSoilProfileReader_Profile_has_invalid_value_on_Column_0_, @@ -392,16 +428,11 @@ internalErrorMessage), string.Format("Er zijn geen profielen gevonden in het stochastich ondersgrondmodel '{0}', deze wordt overgeslagen.", "Name") }; - - // Call - Action call = () => importResult = importer.Import(context, corruptPath); - - // Assert TestHelper.AssertLogMessagesAreGenerated(call, expectedLogMessages, 2); Assert.IsTrue(importResult); Assert.AreEqual(0, context.FailureMechanism.StochasticSoilModels.Count); - Assert.AreEqual(6, progress); + Assert.AreEqual(7, progress); mockRepository.VerifyAll(); // Ensure there are no calls to UpdateObserver } @@ -455,14 +486,14 @@ ProgressChanged = IncrementProgress }; - var expectedLogMessage = String.Format("Fout bij het lezen van bestand '{0}': Het stochastisch ondergrondprofiel bevat geen geldige waarde." + - " Dit stochastisch ondergrondmodel wordt overgeslagen.", validFilePath); var importResult = false; // Call Action call = () => importResult = importer.Import(context, validFilePath); // Assert + var expectedLogMessage = String.Format("Fout bij het lezen van bestand '{0}': Het stochastisch ondergrondprofiel bevat geen geldige waarde." + + " Dit stochastisch ondergrondmodel wordt overgeslagen.", validFilePath); TestHelper.AssertLogMessageIsGenerated(call, expectedLogMessage, 1); Assert.AreEqual(0, failureMechanism.StochasticSoilModels.Count); Assert.IsTrue(importResult); @@ -490,18 +521,17 @@ ProgressChanged = IncrementProgress }; - var expectedLogMessages = new[] - { - "Het uitgelezen profiel 'Profile' niet wordt niet gebruikt in een van de stochastische ondergrondmodellen.", - "De som van de kans van voorkomen in het stochastich ondergrondmodel 'Name' is niet gelijk aan 100%." - }; - var importResult = false; // Call Action call = () => importResult = importer.Import(context, validFilePath); // Assert + var expectedLogMessages = new[] + { + "Het uitgelezen profiel 'Profile' wordt niet gebruikt in een van de stochastische ondergrondmodellen.", + "De som van de kans van voorkomen in het stochastich ondergrondmodel 'Name' is niet gelijk aan 100%." + }; TestHelper.AssertLogMessagesAreGenerated(call, expectedLogMessages, 2); Assert.AreEqual(1, failureMechanism.StochasticSoilModels.Count); Assert.IsTrue(importResult); @@ -513,5 +543,19 @@ { progress++; } + + private class ProgressNotification + { + public ProgressNotification(string description, int currentStep, int totalSteps) + { + Text = description; + CurrentStep = currentStep; + TotalSteps = totalSteps; + } + + public string Text { get; private set; } + public int CurrentStep { get; private set; } + public int TotalSteps { get; private set; } + } } } \ No newline at end of file