// Copyright (C) Stichting Deltares 2017. 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.ComponentModel; using Assembly.Kernel.Exceptions; using Assembly.Kernel.Model; using Assembly.Kernel.Model.AssessmentResultTypes; using Assembly.Kernel.Model.FmSectionTypes; using Core.Common.TestUtil; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.AssemblyTool.Data; using Ringtoets.AssemblyTool.KernelWrapper.Calculators; using Ringtoets.AssemblyTool.KernelWrapper.Calculators.Assembly; using Ringtoets.AssemblyTool.KernelWrapper.Creators; using Ringtoets.AssemblyTool.KernelWrapper.Kernels; using Ringtoets.AssemblyTool.KernelWrapper.TestUtil; using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Kernels; using Ringtoets.AssemblyTool.KernelWrapper.TestUtil.Kernels.Assembly; using Ringtoets.Common.Primitives; namespace Ringtoets.AssemblyTool.KernelWrapper.Test.Calculators.Assembly { [TestFixture] public class FailureMechanismSectionAssemblyCalculatorTest { [Test] public void Constructor_ExpectedValues() { // Setup var mocks = new MockRepository(); var kernelFactory = mocks.Stub(); mocks.ReplayAll(); // Call var calculator = new FailureMechanismSectionAssemblyCalculator(kernelFactory); // Assert Assert.IsInstanceOf(calculator); mocks.VerifyAll(); } [Test] public void Constructor_FactoryNull_ThrowsArgumentNullException() { // Call TestDelegate call = () => new FailureMechanismSectionAssemblyCalculator(null); // Assert var exception = Assert.Throws(call); Assert.AreEqual("factory", exception.ParamName); } private static void AssertCalculatorOutput(FmSectionAssemblyDirectResult original, FailureMechanismSectionAssembly actual) { Assert.AreEqual(AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(original.Result), actual.Group); Assert.AreEqual(original.FailureProbability, actual.Probability); } private static void AssertAssemblyCategoriesInput(AssemblyCategoriesInput assemblyCategoriesInput, FailureMechanismSectionAssemblyKernelStub kernel) { Assert.AreEqual(assemblyCategoriesInput.N, kernel.FailureMechanismInput.LengthEffectFactor); Assert.AreEqual(assemblyCategoriesInput.FailureMechanismContribution, kernel.FailureMechanismInput.FailureProbabilityMarginFactor); Assert.AreEqual(assemblyCategoriesInput.LowerLimitNorm, kernel.AssessmentSectionInput.FailureProbabilityLowerLimit); Assert.AreEqual(assemblyCategoriesInput.SignalingNorm, kernel.AssessmentSectionInput.FailureProbabilitySignallingLimit); } private static AssemblyCategoriesInput CreateAssemblyCategoriesInput() { var random = new Random(39); return new AssemblyCategoriesInput(random.NextDouble(1.0, 5.0), random.NextDouble(), random.NextDouble(0.0, 0.5), random.NextDouble(0.5, 1.0)); } #region Simple Assessment [Test] public void AssembleSimpleAssessment_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment((SimpleAssessmentResultType) 99); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleSimpleAssessment_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var assessmentResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleSimpleAssessment(assessmentResult); // Assert EAssessmentResultTypeE1 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE1(assessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeE1Input); } } [Test] public void AssembleSimpleAssessment_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleSimpleAssessment_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleSimpleAssessment_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleSimpleAssessment_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleSimpleAssessmentValidityOnly_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment((SimpleAssessmentValidityOnlyResultType) 99); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleSimpleAssessmentValidityOnly_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var assessmentResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleSimpleAssessment(assessmentResult); // Assert EAssessmentResultTypeE2 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeE2(assessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeE2Input); } } [Test] public void AssembleSimpleAssessmentValidityOnly_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleSimpleAssessmentValidityOnly_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleSimpleAssessmentValidityOnly_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsNotNull(exception.InnerException); Assert.AreEqual(exception.InnerException.Message, exception.Message); } } [Test] public void AssembleSimpleAssessmentValidityOnly_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleSimpleAssessment(random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } #endregion #region Detailed Assessment [Test] public void AssembleDetailedAssessmentWithResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment((DetailedAssessmentResultType) 99); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithResult_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var detailedAssessmentResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleDetailedAssessment(detailedAssessmentResult); // Assert EAssessmentResultTypeG1 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG1(detailedAssessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeG1Input); } } [Test] public void AssembleDetailedAssessmentWithResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); var detailedAssessmentResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment(detailedAssessmentResult); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment( random.NextEnumValue()); // Assert FailureMechanismSectionAssemblyCategoryGroup expectedResult = AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup( kernel.FailureMechanismSectionDirectResult.Result); Assert.AreEqual(expectedResult, assembly); } } [Test] public void AssembleDetailedAssessmentWithResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithResult_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleDetailedAssessmentWithProbability_WithInvalidEnumInput_ThrowInvalidEnumArgumentException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( (DetailedAssessmentProbabilityOnlyResultType) 99, random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithProbability_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double probability = random.NextDouble(); var detailedAssessment = random.NextEnumValue(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleDetailedAssessment( detailedAssessment, probability, assemblyCategoriesInput); // Assert EAssessmentResultTypeG2 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG2(detailedAssessment); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeG2Input); Assert.AreEqual(probability, kernel.FailureProbabilityInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleDetailedAssessmentWithProbability_WithProbabilityResultAndNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleDetailedAssessment( DetailedAssessmentProbabilityOnlyResultType.Probability, double.NaN, assemblyCategoriesInput); // Assert Assert.IsNaN(kernel.FailureProbabilityInput); Assert.AreEqual(EAssessmentResultTypeG2.Gr, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleDetailedAssessmentWithProbability_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleDetailedAssessmentWithProbability_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithProbability_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithProbability_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_WithInvalidEnumInput_ThrowInvalidEnumArgumentException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( (DetailedAssessmentProbabilityOnlyResultType) 99, random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double probability = random.NextDouble(); double n = random.NextDouble(); var detailedAssessment = random.NextEnumValue(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleDetailedAssessment( detailedAssessment, probability, n, assemblyCategoriesInput); // Assert Assert.AreEqual(probability, kernel.FailureProbabilityInput); Assert.AreEqual(n, kernel.LengthEffectFactorInput); EAssessmentResultTypeG2 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeG2(detailedAssessment); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_WithProbabilityResultAndNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double n = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleDetailedAssessment( DetailedAssessmentProbabilityOnlyResultType.Probability, double.NaN, n, assemblyCategoriesInput); // Assert Assert.IsNaN(kernel.FailureProbabilityInput); Assert.AreEqual(n, kernel.LengthEffectFactorInput); Assert.AreEqual(EAssessmentResultTypeG2.Gr, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithLengthEffect_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleDetailedAssessmentWithCategoryResults_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( (DetailedAssessmentResultType) 99, random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithCategoryResults_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var detailedAssessmentResultForFactorizedSignalingNorm = random.NextEnumValue(); var detailedAssessmentResultForSignalingNorm = random.NextEnumValue(); var detailedAssessmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(); var detailedAssessmentResultForLowerLimitNorm = random.NextEnumValue(); var detailedAssessmentResultForFactorizedLowerLimitNorm = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleDetailedAssessment(detailedAssessmentResultForFactorizedSignalingNorm, detailedAssessmentResultForSignalingNorm, detailedAssessmentResultForMechanismSpecificLowerLimitNorm, detailedAssessmentResultForLowerLimitNorm, detailedAssessmentResultForFactorizedLowerLimitNorm); // Assert Dictionary results = kernel.CategoryCompliancyResultsInput.GetCompliancyResults(); Assert.AreEqual(GetCategoryCompliance(detailedAssessmentResultForFactorizedSignalingNorm), results[EFmSectionCategory.Iv]); Assert.AreEqual(GetCategoryCompliance(detailedAssessmentResultForSignalingNorm), results[EFmSectionCategory.IIv]); Assert.AreEqual(GetCategoryCompliance(detailedAssessmentResultForMechanismSpecificLowerLimitNorm), results[EFmSectionCategory.IIIv]); Assert.AreEqual(GetCategoryCompliance(detailedAssessmentResultForLowerLimitNorm), results[EFmSectionCategory.IVv]); Assert.AreEqual(GetCategoryCompliance(detailedAssessmentResultForFactorizedLowerLimitNorm), results[EFmSectionCategory.Vv]); } } [Test] public void AssembleDetailedAssessmentWithCategoryResults_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); var detailedAssessmentResultForFactorizedSignalingNorm = random.NextEnumValue(); var detailedAssessmentResultForSignalingNorm = random.NextEnumValue(); var detailedAssessmentResultForMechanismSpecificLowerLimitNorm = random.NextEnumValue(); var detailedAssessmentResultForLowerLimitNorm = random.NextEnumValue(); var detailedAssessmentResultForFactorizedLowerLimitNorm = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( detailedAssessmentResultForFactorizedSignalingNorm, detailedAssessmentResultForSignalingNorm, detailedAssessmentResultForMechanismSpecificLowerLimitNorm, detailedAssessmentResultForLowerLimitNorm, detailedAssessmentResultForFactorizedLowerLimitNorm); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithCategoryResults_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert FailureMechanismSectionAssemblyCategoryGroup expectedResult = AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup( kernel.FailureMechanismSectionDirectResult.Result); Assert.AreEqual(expectedResult, assembly); } } [Test] public void AssembleDetailedAssessmentWithCategoryResults_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleDetailedAssessmentWithCategoryResults_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleDetailedAssessment( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } private static ECategoryCompliancy GetCategoryCompliance(DetailedAssessmentResultType detailedAssessmentResult) { switch (detailedAssessmentResult) { case DetailedAssessmentResultType.None: return ECategoryCompliancy.NoResult; case DetailedAssessmentResultType.Sufficient: return ECategoryCompliancy.Complies; case DetailedAssessmentResultType.Insufficient: return ECategoryCompliancy.DoesNotComply; case DetailedAssessmentResultType.NotAssessed: return ECategoryCompliancy.Ngo; default: throw new NotSupportedException(); } } #endregion #region Tailor Made Assessment [Test] public void AssembleTailorMadeAssessmentWithResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment((TailorMadeAssessmentResultType) 99); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithResult_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var tailorMadeAssessmentResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult); // Assert EAssessmentResultTypeT1 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT1(tailorMadeAssessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeT1Input); } } [Test] public void AssembleTailorMadeAssessmentWithResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); var tailorMadeAssessmentResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert FailureMechanismSectionAssemblyCategoryGroup expectedResult = AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup( kernel.FailureMechanismSectionDirectResult.Result); Assert.AreEqual(expectedResult, assembly); } } [Test] public void AssembleTailorMadeAssessmentWithResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithResult_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( (TailorMadeAssessmentProbabilityAndDetailedCalculationResultType) 99, random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var tailorMadeAssessmentResult = random.NextEnumValue(); double probability = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult, probability, assemblyCategoriesInput); // Assert EAssessmentResultTypeT4 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT4(tailorMadeAssessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeT4Input); Assert.AreEqual(probability, kernel.FailureProbabilityInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_WithProbabilityResultAndNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityAndDetailedCalculationResultType.Probability, double.NaN, assemblyCategoriesInput); // Assert Assert.AreEqual(EAssessmentResultTypeT4.Gr, kernel.AssessmentResultTypeT4Input); Assert.IsNaN(kernel.FailureProbabilityInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityAndDetailedCalculationResult_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( (TailorMadeAssessmentProbabilityCalculationResultType) 99, random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var tailorMadeAssessmentResult = random.NextEnumValue(); double probability = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult, probability, assemblyCategoriesInput); // Assert EAssessmentResultTypeT3 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3(tailorMadeAssessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeT3Input); Assert.AreEqual(probability, kernel.FailureProbabilityInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_WithProbabilityResultAndNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType.Probability, double.NaN, assemblyCategoriesInput); // Assert Assert.AreEqual(EAssessmentResultTypeT3.Gr, kernel.AssessmentResultTypeT3Input); Assert.IsNaN(kernel.FailureProbabilityInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithProbabilityCalculationResult_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( (TailorMadeAssessmentProbabilityCalculationResultType) 99, random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var tailorMadeAssessmentResult = random.NextEnumValue(); double probability = random.NextDouble(); double n = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(tailorMadeAssessmentResult, probability, n, assemblyCategoriesInput); // Assert EAssessmentResultTypeT3 expectedResultType = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3(tailorMadeAssessmentResult); Assert.AreEqual(expectedResultType, kernel.AssessmentResultTypeT3Input); Assert.AreEqual(probability, kernel.FailureProbabilityInput); Assert.AreEqual(n, kernel.LengthEffectFactorInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_WithProbabilityResultAndNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double n = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(TailorMadeAssessmentProbabilityCalculationResultType.Probability, double.NaN, n, assemblyCategoriesInput); // Assert Assert.AreEqual(EAssessmentResultTypeT3.Gr, kernel.AssessmentResultTypeT3Input); Assert.IsNaN(kernel.FailureProbabilityInput); Assert.AreEqual(n, kernel.LengthEffectFactorInput); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithLengthEffect_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue(), random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleTailorMadeAssessmentWithCategoryResult_WithInvalidAssessmentResultTypeEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment((TailorMadeAssessmentCategoryGroupResultType) 99); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithCategoryResult_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var categoryGroupResult = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleTailorMadeAssessment(categoryGroupResult); // Assert Tuple expectedInput = FailureMechanismSectionAssemblyCalculatorInputCreator.CreateAssessmentResultTypeT3WithCategoryGroupResult(categoryGroupResult); Assert.AreEqual(expectedInput.Item1, kernel.AssessmentResultTypeT3Input); Assert.AreEqual(expectedInput.Item2, kernel.SectionCategoryInput); } } [Test] public void AssembleTailorMadeAssessmentWithCategoryResult_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssemblyCategoryGroup assembly = calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert FailureMechanismSectionAssemblyCategoryGroup expectedResult = AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup( kernel.FailureMechanismSectionDirectResult.Result); Assert.AreEqual(expectedResult, assembly); } } [Test] public void AssembleTailorMadeAssessmentWithCategoryResult_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithCategoryResult_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleTailorMadeAssessmentWithCategoryResult_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleTailorMadeAssessment( random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } #endregion #region Combined Assembly [Test] public void AssembleCombinedWithProbabilities_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( new FailureMechanismSectionAssembly(random.NextDouble(), (FailureMechanismSectionAssemblyCategoryGroup) 99), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleCombinedWithProbabilities_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var simpleAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), FailureMechanismSectionAssemblyCategoryGroup.None); var detailedAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); var tailorMadeAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly); // Assert AssertAssembly(simpleAssembly, kernel.SimpleAssessmentResultInput); AssertAssembly(detailedAssembly, kernel.DetailedAssessmentResultInput); AssertAssembly(tailorMadeAssembly, kernel.TailorMadeAssessmentResultInput); } } [Test] [TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable)] [TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv)] public void AssembleCombinedWithProbabilities_WithSimpleAssemblyNotApplicableOrCategoryIv_InputCorrectlySetToKernel( FailureMechanismSectionAssemblyCategoryGroup category) { // Setup var random = new Random(39); var simpleAssembly = new FailureMechanismSectionAssembly(double.NaN, category); var detailedAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); var tailorMadeAssembly = new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly); // Assert AssertAssembly(simpleAssembly, kernel.SimpleAssessmentResultInput); Assert.IsNull(kernel.DetailedAssessmentResultInput); Assert.IsNull(kernel.TailorMadeAssessmentResultInput); } } [Test] public void AssembleCombinedWithProbabilities_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleCombined( new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleCombinedWithProbabilities_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleCombinedWithProbabilities_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleCombinedWithProbabilities_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue()), new FailureMechanismSectionAssembly(random.NextDouble(), random.NextEnumValue())); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleCombined_WithInvalidEnumInput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined((FailureMechanismSectionAssemblyCategoryGroup) 99, random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleCombined_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); var simpleAssembly = FailureMechanismSectionAssemblyCategoryGroup.None; var detailedAssembly = random.NextEnumValue(); var tailorMadeAssembly = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly); // Assert Assert.AreEqual(simpleAssembly, AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(kernel.SimpleAssessmentResultInput.Result)); Assert.AreEqual(detailedAssembly, AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(kernel.DetailedAssessmentResultInput.Result)); Assert.AreEqual(tailorMadeAssembly, AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(kernel.TailorMadeAssessmentResultInput.Result)); } } [Test] [TestCase(FailureMechanismSectionAssemblyCategoryGroup.NotApplicable)] [TestCase(FailureMechanismSectionAssemblyCategoryGroup.Iv)] public void AssembleCombined_WithSimpleAssemblyNotApplicableOrCategoryIv_InputCorrectlySetToKernel( FailureMechanismSectionAssemblyCategoryGroup category) { // Setup var random = new Random(39); FailureMechanismSectionAssemblyCategoryGroup simpleAssembly = category; var detailedAssembly = random.NextEnumValue(); var tailorMadeAssembly = random.NextEnumValue(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleCombined(simpleAssembly, detailedAssembly, tailorMadeAssembly); // Assert Assert.AreEqual(simpleAssembly, AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(kernel.SimpleAssessmentResultInput.Result)); Assert.IsNull(kernel.DetailedAssessmentResultInput); Assert.IsNull(kernel.TailorMadeAssessmentResultInput); } } [Test] public void AssembleCombined_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssemblyCategoryGroup group = calculator.AssembleCombined( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert FailureMechanismSectionAssemblyCategoryGroup expectedResult = AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup( kernel.FailureMechanismSectionDirectResult.Result); Assert.AreEqual(expectedResult, group); } } [Test] public void AssembleCombined_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleCombined_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleCombined_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleCombined( random.NextEnumValue(), random.NextEnumValue(), random.NextEnumValue()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } private static void AssertAssembly(FailureMechanismSectionAssembly assembly, FmSectionAssemblyDirectResult kernelAssemblyResult) { Assert.AreEqual(assembly.Probability, kernelAssemblyResult.FailureProbability ?? double.NaN); Assert.AreEqual(assembly.Group, AssemblyCategoryAssert.GetFailureMechanismSectionCategoryGroup(kernelAssemblyResult.Result)); } #endregion #region Manual Assembly [Test] public void AssembleManualWithProbability_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double probability = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleManual(probability, assemblyCategoriesInput); // Assert Assert.AreEqual(probability, kernel.FailureProbabilityInput); Assert.AreEqual(EAssessmentResultTypeG2.ResultSpecified, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleManualWithProbability_WithNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleManual(double.NaN, assemblyCategoriesInput); // Assert Assert.IsNaN(kernel.FailureProbabilityInput); Assert.AreEqual(EAssessmentResultTypeG2.Gr, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleManualWithProbability_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleManual(random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleManualWithProbability_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleManual(random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleManualWithProbability_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleManual(random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleManualWithProbability_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleManual(random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } [Test] public void AssembleManualWithLengthEffect_WithValidInput_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double probability = random.NextDouble(); double n = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleManual( probability, n, assemblyCategoriesInput); // Assert Assert.AreEqual(probability, kernel.FailureProbabilityInput); Assert.AreEqual(n, kernel.LengthEffectFactorInput); Assert.AreEqual(EAssessmentResultTypeG2.ResultSpecified, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleManualWithLengthEffect_WithNaNValue_InputCorrectlySetToKernel() { // Setup var random = new Random(39); double n = random.NextDouble(); AssemblyCategoriesInput assemblyCategoriesInput = CreateAssemblyCategoriesInput(); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call calculator.AssembleManual(double.NaN, n, assemblyCategoriesInput); // Assert Assert.IsNaN(kernel.FailureProbabilityInput); Assert.AreEqual(n, kernel.LengthEffectFactorInput); Assert.AreEqual(EAssessmentResultTypeG2.Gr, kernel.AssessmentResultTypeG2Input); AssertAssemblyCategoriesInput(assemblyCategoriesInput, kernel); } } [Test] public void AssembleManualWithLengthEffect_KernelWithCompleteOutput_OutputCorrectlyReturnedByCalculator() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult(random.NextEnumValue(), random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call FailureMechanismSectionAssembly assembly = calculator.AssembleManual(random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert AssertCalculatorOutput(kernel.FailureMechanismSectionDirectResult, assembly); } } [Test] public void AssembleManualWithLengthEffect_KernelWithInvalidOutput_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.FailureMechanismSectionDirectResult = new FmSectionAssemblyDirectResult((EFmSectionCategory) 99, random.NextDouble()); var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleManual(random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsInstanceOf(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleManualWithLengthEffect_KernelThrowsException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleManual(random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Exception innerException = exception.InnerException; Assert.IsNotNull(innerException); Assert.AreEqual(innerException.Message, exception.Message); } } [Test] public void AssembleManualWithLengthEffect_KernelThrowsAssemblyException_ThrowFailureMechanismSectionAssemblyCalculatorException() { // Setup var random = new Random(39); using (new AssemblyToolKernelFactoryConfig()) { var factory = (TestAssemblyToolKernelFactory) AssemblyToolKernelFactory.Instance; FailureMechanismSectionAssemblyKernelStub kernel = factory.LastCreatedFailureMechanismSectionAssemblyKernel; kernel.ThrowAssemblyExceptionOnCalculate = true; var calculator = new FailureMechanismSectionAssemblyCalculator(factory); // Call TestDelegate test = () => calculator.AssembleManual(random.NextDouble(), random.NextDouble(), CreateAssemblyCategoriesInput()); // Assert var exception = Assert.Throws(test); Assert.IsInstanceOf(exception.InnerException); Assert.AreEqual(exception.Message, AssemblyErrorMessageTranslator.CreateErrorMessage(new[] { new AssemblyErrorMessage(string.Empty, EAssemblyErrors.CategoryLowerLimitOutOfRange) })); } } #endregion } }