/// <summary> /// Validates a <see cref="BalancedFieldLengthCalculation"/>. /// </summary> /// <param name="calculation">The calculation to validate.</param> /// <returns>A collection of validation messages if the validation failed, empty otherwise.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="calculation"/> /// is <c>null</c>.</exception> public IEnumerable <string> Validate(BalancedFieldLengthCalculation calculation) { if (calculation == null) { throw new ArgumentNullException(nameof(calculation)); } try { EngineData engineData = calculation.EngineData; GeneralSimulationSettingsData generalSimulationSettings = calculation.SimulationSettings; AircraftData aircraftData = AircraftDataFactory.Create(calculation.AircraftData, engineData); KernelValidationError validationResult = kernel.Validate(aircraftData, generalSimulationSettings.Density, generalSimulationSettings.GravitationalAcceleration, engineData.NrOfFailedEngines); var messages = new List <string>(); if (generalSimulationSettings.EndFailureVelocity < 1) { messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_End_failure_velocity_must_be_larger_than_Zero); } if (validationResult.HasFlag(KernelValidationError.InvalidDensity)) { messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_Invalid_Density); } if (validationResult.HasFlag(KernelValidationError.InvalidGravitationalAcceleration)) { messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_Invalid_GravitationalAcceleration); } if (validationResult.HasFlag(KernelValidationError.InvalidNrOfFailedEngines)) { messages.Add(Resources.BalancedFieldLengthCalculationModule_ValidationMessage_Invalid_NrOfFailedEngines); } return(messages); } catch (CreateKernelDataException e) { return(new[] { e.Message }); } }
public void Validate_AllDataInvalid_ReturnsExpectedValidationResult() { // Setup AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); var kernel = new AggregatedDistanceCalculatorKernel(); // Call KernelValidationError result = kernel.Validate(aircraftData, 0, 0, aircraftData.NrOfEngines + 1); // Assert const KernelValidationError expectedResult = KernelValidationError.InvalidDensity | KernelValidationError.InvalidGravitationalAcceleration | KernelValidationError.InvalidNrOfFailedEngines; Assert.AreEqual(expectedResult, result); }
public void Validate_WithValidData_ReturnsExpectedValidationResult() { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); double density = random.NextDouble(); double gravitationalAcceleration = random.NextDouble(); var kernel = new AggregatedDistanceCalculatorKernel(); // Call KernelValidationError result = kernel.Validate(aircraftData, density, gravitationalAcceleration, aircraftData.NrOfEngines - 1); // Assert Assert.AreEqual(KernelValidationError.None, result); }
public void Validate_DensityInvalid_ReturnsExpectedValidationResult(double density) { // Setup var random = new Random(21); AircraftData aircraftData = AircraftDataTestFactory.CreateRandomAircraftData(); double gravitationalAcceleration = random.NextDouble(); var kernel = new AggregatedDistanceCalculatorKernel(); // Call KernelValidationError result = kernel.Validate(aircraftData, density, gravitationalAcceleration, aircraftData.NrOfEngines - 1); // Assert Assert.IsTrue(result.HasFlag(KernelValidationError.InvalidDensity)); Assert.IsFalse(result.HasFlag(KernelValidationError.InvalidGravitationalAcceleration)); Assert.IsFalse(result.HasFlag(KernelValidationError.InvalidNrOfFailedEngines)); }
public void Validate_WithArgumentAndKernelValidationErrorOccurs_ReturnsErrorMessages(KernelValidationError error, string expectedMessage) { // Setup var calculation = new BalancedFieldLengthCalculation(); SetValidAircraftData(calculation.AircraftData); SetEngineData(calculation.EngineData); SetSimulationSettingsData(calculation.SimulationSettings); var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>(); kernel.Validate(Arg.Any <KernelAircraftData>(), Arg.Any <double>(), Arg.Any <double>(), Arg.Any <int>()) .ReturnsForAnyArgs(error); var testFactory = new TestKernelFactory(kernel); using (new BalancedFieldLengthKernelFactoryConfig(testFactory)) { var module = new BalancedFieldLengthCalculationModule(); // Call IEnumerable <string> messages = module.Validate(calculation); // Assert CollectionAssert.AreEqual(new[] { expectedMessage }, messages); } }