Index: Core/Common/src/Core.Common.Gui/Plugin/ExportInfo.cs =================================================================== diff -u -rc4956adaabe6d54f55069ef05be2fbde323de015 -r7262d57d1c71168248d6779269d425773b9624fc --- Core/Common/src/Core.Common.Gui/Plugin/ExportInfo.cs (.../ExportInfo.cs) (revision c4956adaabe6d54f55069ef05be2fbde323de015) +++ Core/Common/src/Core.Common.Gui/Plugin/ExportInfo.cs (.../ExportInfo.cs) (revision 7262d57d1c71168248d6779269d425773b9624fc) @@ -163,7 +163,7 @@ Category = exportInfo.Category, Image = exportInfo.Image, FileFilterGenerator = exportInfo.FileFilterGenerator, - GetExportPath = (fileFilter) => exportInfo.GetExportPath?.Invoke(fileFilter) + GetExportPath = fileFilter => exportInfo.GetExportPath?.Invoke(fileFilter) }; } } Index: Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Plugin/MacroStabilityInwardsPlugin.cs =================================================================== diff -u -re9b8aa3e972b9f07a3201f143c26de0e3f082d49 -r7262d57d1c71168248d6779269d425773b9624fc --- Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Plugin/MacroStabilityInwardsPlugin.cs (.../MacroStabilityInwardsPlugin.cs) (revision e9b8aa3e972b9f07a3201f143c26de0e3f082d49) +++ Riskeer/MacroStabilityInwards/src/Riskeer.MacroStabilityInwards.Plugin/MacroStabilityInwardsPlugin.cs (.../MacroStabilityInwardsPlugin.cs) (revision 7262d57d1c71168248d6779269d425773b9624fc) @@ -71,6 +71,8 @@ /// public class MacroStabilityInwardsPlugin : PluginBase { + private IInquiryHelper inquiryHelper; + public override IEnumerable GetPropertyInfos() { yield return new PropertyInfo @@ -168,19 +170,19 @@ yield return new ExportInfo { Name = Resources.MacroStabilityInwardsCalculationExporter_DisplayName, - FileFilterGenerator = new FileFilterGenerator(Resources.Stix_file_filter_extension, - Resources.Stix_file_filter_description), + FileFilterGenerator = new FileFilterGenerator(Resources.Stix_file_filter_extension, Resources.Stix_file_filter_description), CreateFileExporter = (context, filePath) => new MacroStabilityInwardsCalculationExporter(context.WrappedData, filePath), - IsEnabled = context => context.WrappedData.HasOutput + IsEnabled = context => context.WrappedData.HasOutput, + GetExportPath = fileFilter => ExportHelper.GetFilePath(InquiryHelper, fileFilter) }; yield return new ExportInfo { Name = Resources.MacroStabilityInwardsCalculationExporter_DisplayName, - FileFilterGenerator = new FileFilterGenerator(Resources.Stix_file_filter_extension, - Resources.Stix_file_filter_description), + FileFilterGenerator = new FileFilterGenerator(Resources.Stix_file_filter_extension, Resources.Stix_file_filter_description), CreateFileExporter = (context, filePath) => new MacroStabilityInwardsCalculationGroupExporter(context.WrappedData, filePath), - IsEnabled = context => context.WrappedData.HasOutput() + IsEnabled = context => context.WrappedData.HasOutput(), + GetExportPath = fileFilter => ExportHelper.GetFolderPath(InquiryHelper) }; } @@ -439,8 +441,7 @@ private bool VerifyStochasticSoilModelUpdates(MacroStabilityInwardsStochasticSoilModelCollectionContext context, string query) { var changeHandler = new FailureMechanismCalculationChangeHandler(context.FailureMechanism, - query, - new DialogBasedInquiryHelper(Gui.MainWindow)); + query, InquiryHelper); return !changeHandler.RequireConfirmation() || changeHandler.InquireConfirmation(); } @@ -1003,12 +1004,13 @@ private bool VerifySurfaceLineUpdates(MacroStabilityInwardsSurfaceLinesContext context, string query) { var changeHandler = new FailureMechanismCalculationChangeHandler(context.FailureMechanism, - query, - new DialogBasedInquiryHelper(Gui.MainWindow)); + query, InquiryHelper); return !changeHandler.RequireConfirmation() || changeHandler.InquireConfirmation(); } #endregion + + private IInquiryHelper InquiryHelper => inquiryHelper ?? (inquiryHelper = new DialogBasedInquiryHelper(Gui.MainWindow)); } } \ No newline at end of file Index: Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Plugin.Test/ExportInfos/MacroStabilityInwardsCalculationContextExportInfoTest.cs =================================================================== diff -u -r6fac6e4d8695e93e234b09e16cf60e0ff82f8484 -r7262d57d1c71168248d6779269d425773b9624fc --- Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Plugin.Test/ExportInfos/MacroStabilityInwardsCalculationContextExportInfoTest.cs (.../MacroStabilityInwardsCalculationContextExportInfoTest.cs) (revision 6fac6e4d8695e93e234b09e16cf60e0ff82f8484) +++ Riskeer/MacroStabilityInwards/test/Riskeer.MacroStabilityInwards.Plugin.Test/ExportInfos/MacroStabilityInwardsCalculationContextExportInfoTest.cs (.../MacroStabilityInwardsCalculationContextExportInfoTest.cs) (revision 7262d57d1c71168248d6779269d425773b9624fc) @@ -1,9 +1,15 @@ -using System.Linq; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Threading; using Core.Common.Base.IO; +using Core.Common.Gui; +using Core.Common.Gui.Forms.MainWindow; using Core.Common.Gui.Plugin; using Core.Common.Gui.Properties; using Core.Common.TestUtil; using Core.Common.Util; +using NUnit.Extensions.Forms; using NUnit.Framework; using Rhino.Mocks; using Riskeer.Common.Data.AssessmentSection; @@ -18,7 +24,7 @@ namespace Riskeer.MacroStabilityInwards.Plugin.Test.ExportInfos { [TestFixture] - public class MacroStabilityInwardsCalculationContextExportInfoTest + public class MacroStabilityInwardsCalculationContextExportInfoTest : NUnitFormTest { [Test] public void Initialized_Always_ExpectedPropertiesSet() @@ -36,6 +42,7 @@ Assert.AreEqual("Algemeen", info.Category); TestHelper.AssertImagesAreEqual(Resources.ExportIcon, info.Image); Assert.IsNotNull(info.FileFilterGenerator); + Assert.IsNotNull(info.GetExportPath); } } @@ -147,6 +154,40 @@ mocks.VerifyAll(); } + [Test] + [Apartment(ApartmentState.STA)] + public void GetExportPath_Always_ReturnsFilePath() + { + // Setup + var mocks = new MockRepository(); + var mainWindow = mocks.Stub(); + var gui = mocks.Stub(); + gui.Stub(g => g.MainWindow).Return(mainWindow); + mocks.ReplayAll(); + + string expectedFilePath = Path.Combine(TestHelper.GetScratchPadPath(), "Test"); + + DialogBoxHandler = (name, wnd) => + { + var tester = new SaveFileDialogTester(wnd); + tester.SaveFile(expectedFilePath); + }; + + using (var plugin = new MacroStabilityInwardsPlugin()) + { + plugin.Gui = gui; + ExportInfo info = GetExportInfo(plugin); + + // Call + string path = info.GetExportPath(new FileFilterGenerator()); + + // Assert + Assert.AreEqual(expectedFilePath, path); + } + + mocks.VerifyAll(); + } + private static ExportInfo GetExportInfo(MacroStabilityInwardsPlugin plugin) { return plugin.GetExportInfos().First(ei => ei.DataType == typeof(MacroStabilityInwardsCalculationScenarioContext)