示例#1
0
        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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
        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));
        }
示例#5
0
        /// <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);
        }