public void EmergencyException() { HALProvider halProvider = new HALProvider(); IElevatorCageIO elevator = halProvider.ElevatorCageIO; elevator.Initialize(); Assert.Throws <EmergencyException>(() => elevator.MoveUp()); }
private void Cage_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { IElevatorCageIO cageInterface = sender as IElevatorCageIO; m_Logger.Debug($"Elevator state {cageInterface.EngineStatus}"); if (cageInterface.EngineStatus != EngineStatusEnum.Idle && cageInterface.AtFloor.HasValue) { CageMoveLogic(cageInterface); } }
private void ElevatorCageIO_PropertyChangedActOnMovingUp(object sender, System.ComponentModel.PropertyChangedEventArgs e) { IElevatorCageIO cageInterface = sender as IElevatorCageIO; m_Logger.Debug($"Elevator state {cageInterface.EngineStatus}"); if (cageInterface.AtFloor.HasValue) { m_Logger.Debug($"Elevator reached a floor"); cageInterface.Stop(); } else { } }
public void MoveUpHappyFlow() { HALProvider halProvider = new HALProvider(); IElevatorCageIO elevator = halProvider.ElevatorCageIO; elevator.PropertyChanged += ElevatorCageIO_PropertyChangedActOnMovingUp; elevator.Initialize(); elevator.MoveUp(); Assert.That(elevator.AtFloor == 1); elevator.MoveUp(); Assert.That(elevator.AtFloor == 2); }
private void ElevatorCageIO_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { IElevatorCageIO cageInterface = sender as IElevatorCageIO; string engineStatus = cageInterface.EngineStatus.ToString(); ElevatorModel.Cage.CageStatus = engineStatus; ElevatorModel.ElevatorFloorLevel_0.CageStatus = engineStatus; ElevatorModel.ElevatorFloorLevel_1.CageStatus = engineStatus; ElevatorModel.ElevatorFloorLevel_2.CageStatus = engineStatus; if (cageInterface.AtFloor != CageAtFloor) { CageAtFloor = cageInterface.AtFloor; } }
public void MoveUpAndDownHappyFlow() { HALProvider halProvider = new HALProvider(); IElevatorCageIO elevator = halProvider.ElevatorCageIO; elevator.Initialize(); elevator.PropertyChanged += Elevator_PropertyChangedHandleTwoFloorUp; elevator.MoveUp(); Assert.That(elevator.AtFloor == 2); elevator.PropertyChanged -= Elevator_PropertyChangedHandleTwoFloorUp; elevator.PropertyChanged += Elevator_PropertyChangedHandleTwoFloorDown; elevator.MoveDown(); Assert.That(elevator.AtFloor == 0); elevator.PropertyChanged -= Elevator_PropertyChangedHandleTwoFloorDown; }
private void CageMoveLogic(IElevatorCageIO cage) { int currentFloor = cage.AtFloor.Value; if (Context.TargetFloor < currentFloor) { cage.MoveDown(); } else if (Context.TargetFloor > currentFloor) { cage.MoveUp(); } else { cage.Stop(); m_Logger.Debug("Elevator already at floor."); m_CageAtFloor = true; } }
/// <summary> /// Executes the state logic. /// </summary> /// <exception cref="ElevatorException"></exception> public override void ExecuteStateLogic() { m_Logger.Debug($"Executing Go to floor "); IElevatorCageIO cage = Context.HAL.ElevatorCageIO; cage.PropertyChanged += Cage_PropertyChanged; if (cage.AtFloor.HasValue == false) { m_Logger.Error("ELevator is not at a floor"); throw new ElevatorException($"Elevator is not at a floor cannot execute"); } CageMoveLogic(cage); while (m_CageAtFloor == false) { Thread.Sleep(1); } cage.PropertyChanged -= Cage_PropertyChanged; }
private void Elevator_PropertyChangedHandleTwoFloorDown(object sender, System.ComponentModel.PropertyChangedEventArgs e) { IElevatorCageIO cageInterface = sender as IElevatorCageIO; m_Logger.Debug($"Elevator state {cageInterface.EngineStatus}"); if (cageInterface.AtFloor.HasValue) { switch (cageInterface.AtFloor.Value) { case 0: m_Logger.Debug($"Elevator Stop"); cageInterface.Stop(); break; case 1: m_Logger.Debug($"Elevator continue moving down"); cageInterface.MoveDown(); break; case 2: break; } } }