public void GivenInvalidAircraftDataCausingException_WhenCallingValidate_ReturnsErrorMessages()
        {
            // Setup
            var calculation = new BalancedFieldLengthCalculation();

            SetValidAircraftData(calculation.AircraftData);
            SetEngineData(calculation.EngineData);

            calculation.AircraftData.AspectRatio = double.NaN;

            var kernel      = Substitute.For <IAggregatedDistanceCalculatorKernel>();
            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                IEnumerable <string> messages = module.Validate(calculation);

                // Assert
                CollectionAssert.AreEqual(new[]
                {
                    "aspectRatio must be a concrete number and cannot be NaN or Infinity."
                }, messages);
            }
        }
        public void Validate_InvalidEndFailureSpeed_ReturnsValidationMessage(int invalidEndFailureSpeed)
        {
            // Setup
            var calculation = new BalancedFieldLengthCalculation();

            SetValidAircraftData(calculation.AircraftData);
            SetEngineData(calculation.EngineData);
            SetSimulationSettingsData(calculation.SimulationSettings);

            calculation.SimulationSettings.EndFailureVelocity = invalidEndFailureSpeed;

            var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();

            kernel.Validate(Arg.Any <KernelAircraftData>(),
                            Arg.Any <double>(),
                            Arg.Any <double>(),
                            Arg.Any <int>())
            .ReturnsForAnyArgs(KernelValidationError.None);

            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                IEnumerable <string> messages = module.Validate(calculation);

                // Assert
                CollectionAssert.AreEqual(new[]
                {
                    "End failure velocity must be larger than 0."
                }, messages);
            }
        }
        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);
            }
        }
        public void Validate_WithArgumentAndNoErrorOccurs_ReturnsNoErrorMessages()
        {
            // Setup
            var random            = new Random(21);
            int nrOfFailedEngines = random.Next();

            var calculation = new BalancedFieldLengthCalculation();

            SetValidAircraftData(calculation.AircraftData);
            SetEngineData(calculation.EngineData);
            SetSimulationSettingsData(calculation.SimulationSettings);

            calculation.EngineData.NrOfFailedEngines = nrOfFailedEngines;

            var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();

            kernel.Validate(Arg.Any <KernelAircraftData>(),
                            Arg.Any <double>(),
                            Arg.Any <double>(),
                            Arg.Any <int>())
            .ReturnsForAnyArgs(KernelValidationError.None);

            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                IEnumerable <string> messages = module.Validate(calculation);

                // Assert
                CollectionAssert.IsEmpty(messages);
            }
        }
        public void Calculate_WithValidArgumentsAndResult_ReturnsExpectedOutput()
        {
            // Setup
            var    random                    = new Random(21);
            int    nrOfFailedEngines         = random.Next();
            double density                   = random.NextDouble();
            double gravitationalAcceleration = random.NextDouble();

            var calculation = new BalancedFieldLengthCalculation();

            SetValidAircraftData(calculation.AircraftData);
            SetEngineData(calculation.EngineData);
            SetSimulationSettingsData(calculation.SimulationSettings);

            calculation.SimulationSettings.Density = density;
            calculation.SimulationSettings.GravitationalAcceleration = gravitationalAcceleration;
            calculation.SimulationSettings.EndFailureVelocity        = 3;

            calculation.EngineData.NrOfFailedEngines = nrOfFailedEngines;

            const double expectedVelocity = 11;
            const double expectedDistance = 20;
            var          outputs          = new[]
            {
                new AggregatedDistanceOutput(10, 10, 30),
                new AggregatedDistanceOutput(expectedVelocity, expectedDistance, 20),
                new AggregatedDistanceOutput(12, 30, 10)
            };

            var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();

            kernel.Calculate(Arg.Any <KernelAircraftData>(),
                             Arg.Any <EulerIntegrator>(),
                             Arg.Any <int>(),
                             Arg.Any <double>(),
                             Arg.Any <double>(),
                             Arg.Any <CalculationSettings>())
            .Returns(outputs[0], outputs[1], outputs[2]);

            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                BalancedFieldLengthOutput output = module.Calculate(calculation);

                // Assert
                Assert.That(output.Velocity, Is.EqualTo(expectedVelocity));
                Assert.That(output.Distance, Is.EqualTo(expectedDistance));

                ICall[] calls = kernel.ReceivedCalls().ToArray();
                Assert.That(calls.Length, Is.EqualTo(3));
                AssertCalculateCall(calls[0], calculation, 0);
                AssertCalculateCall(calls[1], calculation, 1);
                AssertCalculateCall(calls[2], calculation, 2);
            }
        }
Exemplo n.º 6
0
        public void Constructor_ExpectedValues()
        {
            // Setup
            var testKernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();

            // Call
            var factory = new TestKernelFactory(testKernel);

            // Assert
            Assert.That(factory, Is.InstanceOf <IBalancedFieldLengthKernelFactory>());
        }
Exemplo n.º 7
0
        public void CreateDistanceCalculatorKernel_Always_ReturnsExpectedKernel()
        {
            // Setup
            var testKernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();
            var factory    = new TestKernelFactory(testKernel);

            // Call
            IAggregatedDistanceCalculatorKernel kernel = factory.CreateDistanceCalculatorKernel();

            // Assert
            Assert.That(kernel, Is.SameAs(testKernel));
        }
        public void Validate_Always_FactoryReceiveCorrectData()
        {
            // 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(KernelValidationError.None);

            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                module.Validate(calculation);

                // Assert
                ICall    calls     = kernel.ReceivedCalls().Single();
                object[] arguments = calls.GetArguments();
                AircraftDataTestHelper.AssertAircraftData(calculation.AircraftData,
                                                          calculation.EngineData,
                                                          (KernelAircraftData)arguments[0]);

                GeneralSimulationSettingsData simulationSettings = calculation.SimulationSettings;
                Assert.That(arguments[1], Is.EqualTo(simulationSettings.Density));
                Assert.That(arguments[2], Is.EqualTo(simulationSettings.GravitationalAcceleration));
                Assert.That(arguments[3], Is.EqualTo(calculation.EngineData.NrOfFailedEngines));
            }
        }
        public void Calculate_CalculatorThrowsCalculateException_ThrowsKernelCalculateException()
        {
            // Setup
            var calculation = new BalancedFieldLengthCalculation();

            SetValidAircraftData(calculation.AircraftData);
            SetEngineData(calculation.EngineData);
            SetSimulationSettingsData(calculation.SimulationSettings);

            calculation.SimulationSettings.EndFailureVelocity = 1;

            var kernel = Substitute.For <IAggregatedDistanceCalculatorKernel>();
            var calculatorException = new CalculatorException("Can't calculate this.");

            kernel.Calculate(Arg.Any <KernelAircraftData>(),
                             Arg.Any <EulerIntegrator>(),
                             Arg.Any <int>(),
                             Arg.Any <double>(),
                             Arg.Any <double>(),
                             Arg.Any <CalculationSettings>())
            .ThrowsForAnyArgs(calculatorException);

            var testFactory = new TestKernelFactory(kernel);

            using (new BalancedFieldLengthKernelFactoryConfig(testFactory))
            {
                var module = new BalancedFieldLengthCalculationModule();

                // Call
                TestDelegate call = () => module.Calculate(calculation);

                // Assert
                var exception = Assert.Throws <KernelCalculationException>(call);
                Assert.That(exception.InnerException, Is.SameAs(calculatorException));
                Assert.That(exception.Message, Is.EqualTo(calculatorException.Message));
            }
        }