public void HandleClockTickTest()
        {
            var arg = new OnClockTickEventArgs {
                Maker = this.Maker
            };
            Action act = () => OvenManager.HandleClockTick(null, arg);

            act.Should().NotThrow();

            this.Maker.FirstOven.State.Should().Be(OvenState.Off);
            this.Maker.FirstOven.CurrentTemperature.Should().Be(22);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// The handle clock tick.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        public void HandleClockTick(object sender, OnClockTickEventArgs e)
        {
            var canPulse = (e.Maker.FirstSwitch.State == SwitchState.On && e.Maker.FirstOven.IsWorkingTemperature) ||
                           (e.Maker.FirstSwitch.State == SwitchState.Off && e.Maker.FirstConveyor.HasBiscuits);

            if (!canPulse)
            {
                return;
            }

            for (var i = 0; i < e.Maker.Settings.RevolutionsPerTick; i++)
            {
                this.Pulse(e.Maker);
            }
        }
        public void HandleHeatingBorderTickTest()
        {
            OvenManager.SetState(this.Maker, 232, OvenState.Heating);
            Switcher.SetSwitch(this.Maker, SwitchState.On);

            var arg = new OnClockTickEventArgs {
                Maker = this.Maker
            };
            Action act = () => OvenManager.HandleClockTick(null, arg);

            act.Should().NotThrow();

            this.Maker.FirstOven.State.Should().Be(OvenState.Cooling);
            this.Maker.FirstOven.CurrentTemperature.Should().Be(240);
        }
        public void HandleOffBiscuitHeatingTickTest()
        {
            this.Maker.FirstConveyor.Belt.Add(Biscuit.Create(true, true, false));
            OvenManager.SetState(this.Maker, 235, OvenState.Heating);
            Switcher.SetSwitch(this.Maker, SwitchState.Off);

            var arg = new OnClockTickEventArgs {
                Maker = this.Maker
            };
            Action act = () => OvenManager.HandleClockTick(null, arg);

            act.Should().NotThrow();

            this.Maker.FirstOven.State.Should().Be(OvenState.Cooling);
            this.Maker.FirstOven.CurrentTemperature.Should().Be(240);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// The handle clock tick.
        /// </summary>
        /// <param name="sender">
        /// The sender.
        /// </param>
        /// <param name="e">
        /// The e.
        /// </param>
        /// <exception cref="ArgumentException">
        /// If unknown state is presented. Should not happen
        /// </exception>
        public static void HandleClockTick(object sender, OnClockTickEventArgs e)
        {
            var settings = e.Maker.Settings;
            var oven     = e.Maker.FirstOven;
            var button   = e.Maker.FirstSwitch;
            var conveyor = e.Maker.FirstConveyor;

            var newTemperature = 0;
            var heatPeak       = 0;
            var state          = button.State == SwitchState.Off && !conveyor.HasBiscuits ? OvenState.Off : oven.State;
            var newState       = oven.State;

            switch (state)
            {
            case OvenState.Heating:
                heatPeak       = oven.CurrentTemperature + settings.OvenHeatingRate;
                newTemperature = Math.Min(heatPeak, settings.OvenMaxTemp);

                if (heatPeak >= settings.OvenMaxTemp)
                {
                    newState = OvenState.Cooling;
                }

                break;

            case OvenState.Cooling:
                heatPeak       = oven.CurrentTemperature - settings.OvenCoolingRate;
                newTemperature = Math.Max(heatPeak, settings.OvenMinTemp);

                if (heatPeak <= settings.OvenMinTemp)
                {
                    newState = OvenState.Heating;
                }
                break;

            case OvenState.Off:
                heatPeak       = oven.CurrentTemperature - settings.OvenCoolingRate;
                newTemperature = Math.Max(heatPeak, settings.RoomTemperature);
                newState       = OvenState.Off;
                break;

            default:
                throw new ArgumentException("Unknown Oven State");
            }

            OvenManager.SetState(e.Maker, newTemperature, newState);
        }
Ejemplo n.º 6
0
        public void HandleOnInWorkTempClockTickTest()
        {
            Switcher.SetSwitch(this.Maker, SwitchState.On);
            OvenManager.SetState(this.Maker, 220, OvenState.Heating);

            var hasPulsed = false;
            var motor     = new Motor();
            var arg       = new OnClockTickEventArgs {
                Maker = this.Maker
            };

            motor.RaisePulse += (s, e) => hasPulsed = true;

            Action act = () => motor.HandleClockTick(null, arg);

            act.Should().NotThrow();

            hasPulsed.Should().BeTrue();
        }
Ejemplo n.º 7
0
        public void HandleOffWithBiscuitClockTickTest()
        {
            Switcher.SetSwitch(this.Maker, SwitchState.Off);
            OvenManager.SetState(this.Maker, 220, OvenState.Heating);
            this.Maker.FirstConveyor.Belt.Add(Biscuit.Create(true, true, false));

            var hasPulsed = false;
            var motor     = new Motor();
            var arg       = new OnClockTickEventArgs {
                Maker = this.Maker
            };

            motor.RaisePulse += (s, e) => hasPulsed = true;

            Action act = () => motor.HandleClockTick(null, arg);

            act.Should().NotThrow();

            hasPulsed.Should().BeTrue();
        }