Index: Riskeer/Common/src/Riskeer.Common.Forms/UpdateInfos/RiskeerUpdateInfoFactory.cs =================================================================== diff -u -rd07611d7e455e358e7255b2807447412ac56f9c6 -r42e20ff940bd2953e4abdb72b0c941bcc299c948 --- Riskeer/Common/src/Riskeer.Common.Forms/UpdateInfos/RiskeerUpdateInfoFactory.cs (.../RiskeerUpdateInfoFactory.cs) (revision d07611d7e455e358e7255b2807447412ac56f9c6) +++ Riskeer/Common/src/Riskeer.Common.Forms/UpdateInfos/RiskeerUpdateInfoFactory.cs (.../RiskeerUpdateInfoFactory.cs) (revision 42e20ff940bd2953e4abdb72b0c941bcc299c948) @@ -20,8 +20,8 @@ // All rights reserved. using System; -using Core.Gui.Plugin; using Core.Common.Util; +using Core.Gui.Plugin; using Riskeer.Common.Data.FailureMechanism; using Riskeer.Common.Forms.PresentationObjects; using Riskeer.Common.Forms.Properties; @@ -79,5 +79,52 @@ new UpdateMessageProvider()) }; } + + /// + /// Creates a object for a . + /// + /// The type of the failure mechanism sections context + /// to create the for. + /// The type of the failure mechanism to create + /// the for. + /// /// The type of the old failure mechanism section result + /// to create the for. + /// The type of the failure mechanism section result + /// to create the for. + /// The + /// to use for the created . + /// An object. + /// Thrown when + /// is null. + public static UpdateInfo CreateFailureMechanismSectionsUpdateInfo( + IFailureMechanismSectionResultUpdateStrategy sectionResultUpdateStrategy) + where TSectionContext : FailureMechanismSectionsContext + where TFailureMechanism : IHasSectionResults + where TSectionResultOld : FailureMechanismSectionResultOld + where TSectionResult : FailureMechanismSectionResult + { + if (sectionResultUpdateStrategy == null) + { + throw new ArgumentNullException(nameof(sectionResultUpdateStrategy)); + } + + return new UpdateInfo + { + Name = Resources.FailureMechanismSections_DisplayName, + Category = Resources.Riskeer_Category, + Image = Resources.SectionsIcon, + FileFilterGenerator = new FileFilterGenerator(RiskeerCommonIOResources.Shape_file_filter_Extension, + RiskeerCommonIOResources.Shape_file_filter_Description), + IsEnabled = context => context.WrappedData.FailureMechanismSectionSourcePath != null, + CurrentPath = context => context.WrappedData.FailureMechanismSectionSourcePath, + CreateFileImporter = (context, filePath) => new FailureMechanismSectionsImporter( + context.WrappedData, + context.AssessmentSection.ReferenceLine, + filePath, + new FailureMechanismSectionUpdateStrategy( + (TFailureMechanism) context.WrappedData, sectionResultUpdateStrategy), + new UpdateMessageProvider()) + }; + } } } \ No newline at end of file Index: Riskeer/Common/test/Riskeer.Common.Forms.Test/UpdateInfos/RiskeerUpdateInfoFactoryTest.cs =================================================================== diff -u -rd07611d7e455e358e7255b2807447412ac56f9c6 -r42e20ff940bd2953e4abdb72b0c941bcc299c948 --- Riskeer/Common/test/Riskeer.Common.Forms.Test/UpdateInfos/RiskeerUpdateInfoFactoryTest.cs (.../RiskeerUpdateInfoFactoryTest.cs) (revision d07611d7e455e358e7255b2807447412ac56f9c6) +++ Riskeer/Common/test/Riskeer.Common.Forms.Test/UpdateInfos/RiskeerUpdateInfoFactoryTest.cs (.../RiskeerUpdateInfoFactoryTest.cs) (revision 42e20ff940bd2953e4abdb72b0c941bcc299c948) @@ -21,9 +21,9 @@ using System; using System.Linq; -using Core.Gui.Plugin; using Core.Common.TestUtil; using Core.Common.Util; +using Core.Gui.Plugin; using NUnit.Framework; using Rhino.Mocks; using Riskeer.Common.Data.AssessmentSection; @@ -40,20 +40,19 @@ public class RiskeerUpdateInfoFactoryTest { [Test] - public void CreateFailureMechanismSectionsUpdateInfo_SectionResultUpdateStrategyNull_ThrowsArgumentNullException() + public void OldCreateFailureMechanismSectionsUpdateInfo_SectionResultUpdateStrategyNull_ThrowsArgumentNullException() { // Call - TestDelegate call = () => RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + void Call() => RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld>(null); // Assert - // Assert - string paramName = Assert.Throws(call).ParamName; - Assert.AreEqual("sectionResultUpdateStrategy", paramName); + var exception = Assert.Throws(Call); + Assert.AreEqual("sectionResultUpdateStrategy", exception.ParamName); } [Test] - public void CreateFailureMechanismSectionsUpdateInfo_WithArguments_ExpectedPropertiesSet() + public void OldCreateFailureMechanismSectionsUpdateInfo_WithArguments_ExpectedPropertiesSet() { // Setup var mocks = new MockRepository(); @@ -80,7 +79,7 @@ } [Test] - public void CreateFailureMechanismSectionsUpdateInfo_WithArguments_ReturnsExpectedCreatedFileImporter() + public void OldCreateFailureMechanismSectionsUpdateInfo_WithArguments_ReturnsExpectedCreatedFileImporter() { // Setup var mocks = new MockRepository(); @@ -101,7 +100,7 @@ } [Test] - public void CreateFailureMechanismSectionsUpdateInfo_WithSourcePath_ReturnsIsEnabledTrue() + public void OldCreateFailureMechanismSectionsUpdateInfo_WithSourcePath_ReturnsIsEnabledTrue() { // Setup var mocks = new MockRepository(); @@ -123,7 +122,7 @@ } [Test] - public void CreateFailureMechanismSectionsUpdateInfo_WithSourcePath_ReturnsSourcePath() + public void OldCreateFailureMechanismSectionsUpdateInfo_WithSourcePath_ReturnsSourcePath() { // Setup var mocks = new MockRepository(); @@ -146,7 +145,7 @@ } [Test] - public void CreateFailureMechanismSectionsUpdateInfo_WithoutSourcePath_ReturnsIsEnabledFalse() + public void OldCreateFailureMechanismSectionsUpdateInfo_WithoutSourcePath_ReturnsIsEnabledFalse() { // Setup var mocks = new MockRepository(); @@ -166,7 +165,7 @@ } [Test] - public void CreateFailureMechanismSectionsUpdateInfo_WithoutSourcePath_ReturnsNullPath() + public void OldCreateFailureMechanismSectionsUpdateInfo_WithoutSourcePath_ReturnsNullPath() { // Setup var mocks = new MockRepository(); @@ -184,5 +183,150 @@ Assert.IsNull(updateInfo.CurrentPath(failureMechanismSectionsContext)); mocks.VerifyAll(); } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_SectionResultUpdateStrategyNull_ThrowsArgumentNullException() + { + // Call + void Call() => RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(null); + + // Assert + var exception = Assert.Throws(Call); + Assert.AreEqual("sectionResultUpdateStrategy", exception.ParamName); + } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_WithArguments_ExpectedPropertiesSet() + { + // Setup + var mocks = new MockRepository(); + var sectionResultUpdateStrategy = mocks.Stub>(); + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + // Call + UpdateInfo updateInfo = RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(sectionResultUpdateStrategy); + + // Assert + Assert.AreEqual("Vakindeling", updateInfo.Name); + Assert.AreEqual("Algemeen", updateInfo.Category); + + FileFilterGenerator fileFilterGenerator = updateInfo.FileFilterGenerator; + Assert.AreEqual("Shapebestand (*.shp)|*.shp", fileFilterGenerator.Filter); + + TestHelper.AssertImagesAreEqual(Resources.SectionsIcon, updateInfo.Image); + Assert.IsNull(updateInfo.VerifyUpdates); + + mocks.VerifyAll(); + } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_WithArguments_ReturnsExpectedCreatedFileImporter() + { + // Setup + var mocks = new MockRepository(); + var sectionResultUpdateStrategy = mocks.Stub>(); + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + // Call + UpdateInfo updateInfo = RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(sectionResultUpdateStrategy); + + // Assert + var failureMechanismSectionsContext = new FailureMechanismSectionsContext(new TestFailureMechanism(), assessmentSection); + Assert.IsInstanceOf(updateInfo.CreateFileImporter(failureMechanismSectionsContext, "")); + + mocks.VerifyAll(); + } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_WithSourcePath_ReturnsIsEnabledTrue() + { + // Setup + var mocks = new MockRepository(); + var sectionResultUpdateStrategy = mocks.Stub>(); + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + // Call + UpdateInfo updateInfo = RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(sectionResultUpdateStrategy); + + // Assert + var testFailureMechanism = new TestFailureMechanism(); + testFailureMechanism.SetSections(Enumerable.Empty(), "path/to/sections"); + var failureMechanismSectionsContext = new FailureMechanismSectionsContext(testFailureMechanism, assessmentSection); + Assert.IsTrue(updateInfo.IsEnabled(failureMechanismSectionsContext)); + mocks.VerifyAll(); + } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_WithSourcePath_ReturnsSourcePath() + { + // Setup + var mocks = new MockRepository(); + var sectionResultUpdateStrategy = mocks.Stub>(); + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + // Call + UpdateInfo updateInfo = RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(sectionResultUpdateStrategy); + + // Assert + var testFailureMechanism = new TestFailureMechanism(); + testFailureMechanism.SetSections(Enumerable.Empty(), "path/to/sections"); + var failureMechanismSectionsContext = new FailureMechanismSectionsContext(testFailureMechanism, assessmentSection); + Assert.AreEqual(testFailureMechanism.FailureMechanismSectionSourcePath, + updateInfo.CurrentPath(failureMechanismSectionsContext)); + mocks.VerifyAll(); + } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_WithoutSourcePath_ReturnsIsEnabledFalse() + { + // Setup + var mocks = new MockRepository(); + var sectionResultUpdateStrategy = mocks.Stub>(); + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + // Call + UpdateInfo updateInfo = RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(sectionResultUpdateStrategy); + + // Assert + var failureMechanismSectionsContext = new FailureMechanismSectionsContext(new TestFailureMechanism(), assessmentSection); + Assert.IsFalse(updateInfo.IsEnabled(failureMechanismSectionsContext)); + mocks.VerifyAll(); + } + + [Test] + public void CreateFailureMechanismSectionsUpdateInfo_WithoutSourcePath_ReturnsNullPath() + { + // Setup + var mocks = new MockRepository(); + var sectionResultUpdateStrategy = mocks.Stub>(); + var assessmentSection = mocks.Stub(); + assessmentSection.Stub(a => a.ReferenceLine).Return(new ReferenceLine()); + mocks.ReplayAll(); + + // Call + UpdateInfo updateInfo = RiskeerUpdateInfoFactory.CreateFailureMechanismSectionsUpdateInfo< + FailureMechanismSectionsContext, TestFailureMechanism, FailureMechanismSectionResultOld, FailureMechanismSectionResult>(sectionResultUpdateStrategy); + + // Assert + var failureMechanismSectionsContext = new FailureMechanismSectionsContext(new TestFailureMechanism(), assessmentSection); + Assert.IsNull(updateInfo.CurrentPath(failureMechanismSectionsContext)); + mocks.VerifyAll(); + } } } \ No newline at end of file