public void MacroCommandtest()
        {
            Remote remote = new Remote();

            Light light = new Light();
            Stero stero = new Stero();
            Fan   fan   = new Fan();

            LightOnCommand       lightOn = new LightOnCommand(light);
            SteroOnWithCDCommand steroOn = new SteroOnWithCDCommand(stero);
            FanHighCommand       fanOn   = new FanHighCommand(fan);

            LightOffCommand lightOff = new LightOffCommand(light);
            SteroOffCommand steroOff = new SteroOffCommand(stero);
            FanOffCommand   fanOff   = new FanOffCommand(fan);

            MacroCommand macroCommandOn  = new MacroCommand(new ICommand[] { lightOn, steroOn, fanOn });
            MacroCommand macroCommandOff = new MacroCommand(new ICommand[] { lightOff, steroOff, fanOff });

            remote.SetCommnd(0, macroCommandOn, macroCommandOff);
            remote.OnButtonPressed(0);

            Assert.AreEqual(Light.States.On, light.CurrentState);
            Assert.AreEqual(Stero.State.CD, stero.CurrentState);
            Assert.AreEqual((int)11, stero.Volume);
            Assert.AreEqual(Fan.Speed.High, fan.CurrentSpeed);

            remote.OffButtonPressed(0);
            Assert.AreEqual(Light.States.Off, light.CurrentState);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
        }
        public void RemoteTest()
        {
            Remote remote = new Remote();

            Light      livingRoomLight = new Light();
            Light      kitchenLight    = new Light();
            Fan        fan             = new Fan();
            GarageDoor door            = new GarageDoor();
            Stero      stero           = new Stero();

            LightOnCommand       livingRoomLightOn  = new LightOnCommand(livingRoomLight);
            LightOnCommand       kitchenLightOn     = new LightOnCommand(kitchenLight);
            LightOffCommand      livingRoomLightOff = new LightOffCommand(livingRoomLight);
            LightOffCommand      kitchenlightOff    = new LightOffCommand(kitchenLight);
            FanHighCommand       fanHighCommand     = new FanHighCommand(fan);
            FanOffCommand        fanOffCommand      = new FanOffCommand(fan);
            DoorUpCommand        doorUpCommand      = new DoorUpCommand(door);
            DoorDownCommand      doorDownCommand    = new DoorDownCommand(door);
            SteroOnWithCDCommand steroOn            = new SteroOnWithCDCommand(stero);
            SteroOffCommand      steroOff           = new SteroOffCommand(stero);

            remote.SetCommnd(0, livingRoomLightOn, livingRoomLightOff);
            remote.SetCommnd(1, kitchenLightOn, kitchenlightOff);
            remote.SetCommnd(2, fanHighCommand, fanOffCommand);
            remote.SetCommnd(3, doorUpCommand, doorDownCommand);
            remote.SetCommnd(4, steroOn, steroOff);


            Assert.AreEqual(Light.States.Off, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.Off, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Down, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.Off, door.LightState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);

            remote.OnButtonPressed(0);
            Assert.AreEqual(Light.States.On, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.Off, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Down, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.Off, door.LightState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);

            remote.OnButtonPressed(1);
            Assert.AreEqual(Light.States.On, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.On, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Down, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.Off, door.LightState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);

            remote.OnButtonPressed(2);
            Assert.AreEqual(Fan.Speed.High, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Down, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.Off, door.LightState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);

            remote.OnButtonPressed(3);
            Assert.AreEqual(GarageDoor.DoorStates.Up, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.On, door.LightState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);

            remote.OnButtonPressed(4);
            Assert.AreEqual((int)11, stero.Volume);
            Assert.AreEqual(Stero.State.CD, stero.CurrentState);

            remote.OffButtonPressed(0);
            Assert.AreEqual(Light.States.Off, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.On, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.High, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Up, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.On, door.LightState);
            Assert.AreEqual((int)11, stero.Volume);
            Assert.AreEqual(Stero.State.CD, stero.CurrentState);

            remote.OffButtonPressed(1);
            Assert.AreEqual(Light.States.Off, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.Off, kitchenLight.CurrentState);
            Assert.AreEqual(GarageDoor.DoorStates.Up, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.On, door.LightState);
            Assert.AreEqual((int)11, stero.Volume);
            Assert.AreEqual(Stero.State.CD, stero.CurrentState);

            remote.OffButtonPressed(2);
            Assert.AreEqual(Light.States.Off, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.Off, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Up, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.On, door.LightState);
            Assert.AreEqual((int)11, stero.Volume);
            Assert.AreEqual(Stero.State.CD, stero.CurrentState);

            remote.OffButtonPressed(3);
            remote.OffButtonPressed(3);
            Assert.AreEqual(Light.States.Off, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.Off, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Down, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.Off, door.LightState);
            Assert.AreEqual((int)11, stero.Volume);
            Assert.AreEqual(Stero.State.CD, stero.CurrentState);

            remote.OffButtonPressed(4);
            Assert.AreEqual(Light.States.Off, livingRoomLight.CurrentState);
            Assert.AreEqual(Light.States.Off, kitchenLight.CurrentState);
            Assert.AreEqual(Fan.Speed.Off, fan.CurrentSpeed);
            Assert.AreEqual(GarageDoor.DoorStates.Down, door.DoorState);
            Assert.AreEqual(GarageDoor.LightStates.Off, door.LightState);
            Assert.AreEqual((int)0, stero.Volume);
            Assert.AreEqual(Stero.State.Off, stero.CurrentState);
        }