public void Garage_Returnera_Vehicle_With_this_Test() { // Assert.Pass(); // Arrange // expected Guid guid = Guid.NewGuid(); Garage <ICanBeParkedInGarage> garage = new Garage <ICanBeParkedInGarage>(guid, "Garage 1", 5); ICanBeParkedInGarage vehicle1 = new Car("AAA 111", "Röd", 4); ICanBeParkedInGarage vehicle2 = new Bus("BBB 222", "Grön", 50); garage.Add(vehicle1); garage.Add(vehicle2); // Act // actual ICanBeParkedInGarage actaulVehicle1 = garage[0]; Vehicle actualVec1 = actaulVehicle1 as Vehicle; ICanBeParkedInGarage actaulVehicle2 = garage[1]; Vehicle actualVec2 = actaulVehicle2 as Vehicle; // Assert Assert.AreEqual(actualVec1.Color, ((Vehicle)vehicle1).Color); Assert.AreEqual(actualVec2.Color, ((Vehicle)vehicle2).Color); Assert.AreEqual(actualVec1.RegistrationNumber, ((Vehicle)vehicle1).RegistrationNumber); Assert.AreEqual(actualVec2.RegistrationNumber, ((Vehicle)vehicle2).RegistrationNumber); }
/// <summary> /// Metoden parkerar ett fordon i garaget /// </summary> /// <param name="vehicle">Fordonet som skall parkeras i garaget</param> /// <returns>true om det gick parkera fordonet. Annars returneras false</returns> /// <exception cref="System.ArgumentNullException">Kastas om referensen till vehicle är null</exception> public bool ParkVehicle(ICanBeParkedInGarage vehicle) { if (vehicle == null) { throw new ArgumentNullException("ArgumentNullException. GarageHandler.ParkVehicle(ICanBeParkedInGarage vehicle). Referensen till vehicle är null"); } var tmpVehicle = vehicle as IVehicle; string strRegistrationNumber = tmpVehicle?.RegistrationNumber; bool bParkedVehicle = false; if (Garage.IsFull) { Ui.WriteLine($"Det går inte parkera fordon {vehicle.GetType().Name} med registreringsnummer {strRegistrationNumber}. {Garage.GarageName} är fullt"); } else {// Vi kan försöka att parkera fordonet bParkedVehicle = Garage.Add(vehicle); } if (bParkedVehicle) {// Vi har parkerat ett fordon. Skriv ut info om detta Ui.WriteLine($"Parkerar fordon {vehicle.GetType().Name} med registreringsnummer {strRegistrationNumber}"); } return(bParkedVehicle); }
/// <summary> /// Metoden skapar ett slumpmässigt fordon som kan parkeras i ett garage dvs. måste implemnetera interfacet ICanBeParkedInGarage /// </summary> /// <returns>Nytt fordon som kan parkeras i ett garage</returns> public ICanBeParkedInGarage CreateRandomVehicleForGarage() { ICanBeParkedInGarage vehicle = null; Random rand = new Random(); // Skapa ett nytt registreringsnummer som inte används string strRegistrationNumber = this.RegistrationNumberRegister.CreateRandomRegistrationNumber(); // Skapa en ny färg string strColor = this.CreateRandomColor(); // Vad skall vi har för typ av fordon int iRandomCarType = rand.Next(1, 4); switch (iRandomCarType) { case 1: // Car vehicle = CreateVehicle(Vehicle_Type.CAR, strRegistrationNumber, strColor, 4, 5); break; case 2: // Bus vehicle = CreateVehicle(Vehicle_Type.BUS, strRegistrationNumber, strColor, 4, rand.Next(20, 76)); break; case 3: // Motorcycle vehicle = CreateVehicle(Vehicle_Type.MOTORCYCLE, strRegistrationNumber, strColor, 2, 2); break; } return(vehicle); }
public void Garage_Remove_Vehicle_null_Test() { // Assert.Pass(); // Arrange // expected Guid guid = Guid.NewGuid(); Garage <ICanBeParkedInGarage> garage = new Garage <ICanBeParkedInGarage>(guid, "Garage 1", 5); ICanBeParkedInGarage vehicle1 = null; // Act // actual // Assert Assert.Throws <ArgumentNullException>(() => garage.Remove(vehicle1)); }
/// <summary> /// Metoden skapar önskat fordon /// </summary> /// <param name="enumVehicleType">Typ av fordon som skall skapas</param> /// <param name="strRegistrationNumber">Fordonets registreringsnummer</param> /// <param name="strColor">Fordonets färg. Om det inte finns någon färg komemr den defaulta färgen för fordonet väljas</param> /// <param name="iNumberOfWheels">Antal hjul</param> /// <param name="iNumberOfSeatedPassengers">Antal sittande passagerar</param> /// <returns>Nytt vehicle eller null</returns> /// <exception cref="System.ArgumentException">Undantaget kastas om det inte finns något registreringsnummer</exception> public ICanBeParkedInGarage CreateVehicle(Vehicle_Type enumVehicleType, string strRegistrationNumber, string strColor, int iNumberOfWheels, int iNumberOfSeatedPassengers) { if (String.IsNullOrWhiteSpace(strRegistrationNumber)) { throw new ArgumentException("ArgumentException. VehicleFactory.ICanBeParkedInGarage(...). Man måste ange registreringsnummer"); } ICanBeParkedInGarage vehicle = null; switch (enumVehicleType) { case Vehicle_Type.CAR: if (String.IsNullOrWhiteSpace(strColor)) { strColor = Car.DefaultColor; } vehicle = new Car(strRegistrationNumber.ToUpper(), strColor.ToUpper(), iNumberOfWheels, iNumberOfSeatedPassengers); break; case Vehicle_Type.BUS: if (String.IsNullOrWhiteSpace(strColor)) { strColor = Bus.DefaultColor; } vehicle = new Bus(strRegistrationNumber.ToUpper(), strColor.ToUpper(), iNumberOfWheels, iNumberOfSeatedPassengers); break; case Vehicle_Type.MOTORCYCLE: if (String.IsNullOrWhiteSpace(strColor)) { strColor = MotorCycle.DefaultColor; } vehicle = new MotorCycle(strRegistrationNumber.ToUpper(), strColor.ToUpper(), iNumberOfWheels, iNumberOfSeatedPassengers); break; } return(vehicle); }
/// <summary> /// Metoden parkerar fordonet i garaget /// </summary> /// <param name="vehicle">Vehicle som vi skall parkera i garaget</param> /// <returns>true om det gick parkera fordonet. Annars returneras false</returns> /// <exception cref="System.ArgumentNullException">Kastas om referensen till Vehicle är null</exception> private bool ParkVehicleInGarage(ICanBeParkedInGarage vehicle) { if (vehicle == null) { throw new ArgumentNullException("Exception. CreateAndParkVehicleMenu.ParkVehicleInGarage(). Referensen till vehicle är null"); } bool bParkedVehicle = false; // Hämta garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { if (garageHandler.ParkVehicle(vehicle)) {// Vi har parkerat fordonet i garaget bParkedVehicle = true; } } return(bParkedVehicle); }
/// <summary> /// Metoden tar bort ett parkerat fordon från garaget /// </summary> /// <param name="vehicle">Fordonet som skall tas bort från garaget</param> /// <returns>true om det gick radera fordonet. Annars returneras false</returns> /// <exception cref="System.ArgumentNullException">Kastas om referensen till vehicle är null</exception> public bool RemoveVehicle(ICanBeParkedInGarage vehicle) { if (vehicle == null) { throw new ArgumentNullException("ArgumentNullException. GarageHandler.RemoveVehicle(ICanBeParkedInGarage vehicle). Referensen till vehicle är null"); } var tmpVehicle = vehicle as IVehicle; string strRegistrationNumber = tmpVehicle?.RegistrationNumber; bool bRemovedVehicle = Garage.Remove(vehicle); if (bRemovedVehicle) { Ui.WriteLine($"Fordon {vehicle.GetType().Name} med registreringsnummer {strRegistrationNumber} har lämnat garaget"); } else { Ui.WriteLine($"Fordon {vehicle.GetType().Name} med registreringsnummer {strRegistrationNumber} kan inte lämna garaget. Bilen finns troligen inte i garaget"); } return(bRemovedVehicle); }
/// <summary> /// Metoden skapar och parkerar önskat antal fordon /// </summary> /// <param name="iNumberOfVehicle">Antal fordon som skall skapas</param> private void Simulering(int iNumberOfVehicle) { // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { Ui.WriteLine("Simulerar att fordon parkeras i garaget"); // Börja skapa lite fordon som parkeras i garaget IVehicleFactory vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister); ICanBeParkedInGarage vehicle = null; IVehicle tmpVehicle = null; for (int i = 0; i < iNumberOfVehicle; i++) { vehicle = vehicleFactory.CreateRandomVehicleForGarage(); if (garageHandler.ParkVehicle(vehicle)) {// Det gick parkera fordonet. Registrerar att registreringsnumret är upptaget tmpVehicle = vehicle as IVehicle; if (tmpVehicle != null) { this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber); } } } this.RegistrationNumberRegister.PrintRegister(this.Ui); garageHandler.PrintInformationAboutGarage(); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); // Nu vill jag simulera att fordon lämnar garaget // Hämta info om garaget var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo(); if (iNumberOfParkedVehicle > 1) {// Vi har minst ett parkerat fordon. Radera det första i arrayen try { vehicle = garageHandler.Garage[0]; if (vehicle != null) { Ui.WriteLine("Simulerar att ett fordon lämnar garaget"); tmpVehicle = vehicle as IVehicle; string strRegistrationNumber = String.Empty; if (tmpVehicle != null) { strRegistrationNumber = tmpVehicle.RegistrationNumber; } if (garageHandler.RemoveVehicle(0)) { this.RegistrationNumberRegister.RemoveRegistrationNumber(strRegistrationNumber); } this.RegistrationNumberRegister.PrintRegister(this.Ui); garageHandler.PrintInformationAboutGarage(); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } } catch (ArgumentOutOfRangeException) { } } } }
/// <summary> /// Metoden simulerar skapandet av ett garage. /// Skapande av bilar som parkerar och lämnar garaget /// Visar även vad som händer om garaget är full och någon vill parkera /// </summary> private void SimulateGarage() { // GetMainMenu Ui.WriteLine("Simulering av att skapa ett garage. Parkera fordon och fordon lämnar garaget"); // Skapa en factory där jag kan skapa garage GarageFactory garageFactory = new GarageFactory(); Guid guid = Guid.NewGuid(); // Skapa ett garage var garage = garageFactory.CreateGarage(guid, "Första garaget", 5); // Skapa en GarageHandler som hantera allt om ett garage this.GarageHandlers.Add(new GarageHandler.GarageHandler(garage, this.Ui)); Ui.WriteLine($"Har skapat ett nytt garage. " + garage); // Vid simuleringen har jag bara en garagehandler och ett garage. Hämta den handlern var garageHandlers = this.GarageHandlers; IGarageHandler garageHandler = garageHandlers[0]; // Börja skapa lite fordon som parkeras i garaget IVehicleFactory vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister); ICanBeParkedInGarage vehicle = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle); ICanBeParkedInGarage vehicle1 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle1); ICanBeParkedInGarage vehicle2 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle2); ICanBeParkedInGarage vehicle3 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle3); ICanBeParkedInGarage vehicle4 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle4); // Garaget är fullt, men vi försöker parkera ett fordon till ICanBeParkedInGarage vehicle5 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle5); garageHandler.PrintInformationAboutGarage(); // Ett fordon lämnar garaget garageHandler.RemoveVehicle(vehicle1); garageHandler.PrintInformationAboutGarage(); // Ett fordon som inte finns i garaget lämnar garageHandler.RemoveVehicle(vehicle5); garageHandler.PrintInformationAboutGarage(); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); }
/// <summary> /// Metoden skapar ett nytt fordon av typ car, bus eller motocycle /// </summary> /// <param name="enumVehicleType">Enum som bestämmer vilket fordon vi skall skapa</param> /// <returns>MenuInputResult och ny vehicle. Vehicle kan vara null. Då gick det inte skapa fordonet eller har användaren valt att återgå till menyn</returns> private (MenuInputResult menuInputResult, ICanBeParkedInGarage newVehicle) CreateVehicle(Vehicle_Type enumVehicleType) { MenuInputResult result = MenuInputResult.NA; ICanBeParkedInGarage newVehicle = null; IVehicleFactory vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister); string strRegistrationNumber = String.Empty; string strColor = String.Empty; int iNumberOfWheels = 0; int iNumberOfSeatedPassengers = 0; // Hämta defaulta värden för fordonet som vi skall skapa var(strDefaultColor, iDefaultNumberOfWheels, iDefaultNumberOfSeatedPassengers) = vehicleFactory.GetDefaultVehicleData(enumVehicleType); // Hämta registreringsnumret från användaren var(tmpResult, strTmpRegistrationNumber) = GetRegistrationNumber(); result = tmpResult; if (tmpResult == MenuInputResult.CONTINUE) {// Vi fortsätter och hämtar fordonets färg strRegistrationNumber = strTmpRegistrationNumber; // Hämta fordonets färg från användaren var(tmpResult1, strTmpColor) = GetColor(strDefaultColor); result = tmpResult1; if (tmpResult1 == MenuInputResult.CONTINUE) { strColor = strTmpColor; // Hämta antal hjul som finns på fordonet var(tmpResult2, iTmpNumberOfWheels) = GetNumberOfWheels(iDefaultNumberOfWheels); result = tmpResult2; if (tmpResult2 == MenuInputResult.CONTINUE) { iNumberOfWheels = iTmpNumberOfWheels; // Hämta antal sittande passagerare var(tmpResult3, iTmpNumberOfSeatedPassengers) = GetNumberOfSeatedPassengers(iDefaultNumberOfSeatedPassengers); result = tmpResult3; if (tmpResult3 == MenuInputResult.CONTINUE) { iNumberOfSeatedPassengers = iTmpNumberOfSeatedPassengers; newVehicle = vehicleFactory.CreateVehicle(enumVehicleType, strRegistrationNumber, strColor, iNumberOfWheels, iNumberOfSeatedPassengers); if (newVehicle != null) { result = MenuInputResult.CREATE_VEHICLE_FAILED; } else { result = MenuInputResult.TO_GARAGE_MENU; } } } } } return(result, newVehicle); }