Esempio n. 1
0
        public void HandleCommandOnUnit_AndHandlingInvalid_ThrowsInvalidOperationException()
        {
            var unitLocation = BuildCell();

            var domesticCity = BuildCity(BuildCell());

            var domesticCiv = BuildCiv(new List <IHexCell>()
            {
                unitLocation
            }, new List <ICity>()
            {
                domesticCity
            });

            var unit = BuildUnit(unitLocation, domesticCiv);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildImprovement
            };

            var abilityHandler = Container.Resolve <AnnexAdjacentTerritoryAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
Esempio n. 2
0
        public void HandleCommandOnUnit_RemovesRoadsIfImprovementIsPillaged()
        {
            var domesticCiv = BuildCiv();

            Mock <IImprovement> mockImprovementOne;
            var location = BuildCell(
                true, null, new List <IImprovement>()
            {
                BuildImprovement(out mockImprovementOne)
            }
                );

            mockImprovementOne.Setup(improvement => improvement.IsPillaged).Returns(true);

            var unit = BuildUnit(location, domesticCiv, 0);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Pillage
            };

            var handler = Container.Resolve <PillageAbilityHandler>();

            handler.HandleCommandOnUnit(command, unit);

            mockImprovementOne.Verify(improvement => improvement.Pillage(), Times.Never, "ImprovementOne unexpectedly pillaged");

            Assert.IsFalse(location.HasRoads, "Location's roads not removed as expected");
        }
Esempio n. 3
0
        public void HandleCommandOnUnit_AndHandlingValid_DoesNotThrow()
        {
            var unitLocation = BuildCell();

            var domesticCity = BuildCity(BuildCell());

            var domesticCiv = BuildCiv(new List <IHexCell>()
            {
                unitLocation
            }, new List <ICity>()
            {
                domesticCity
            });

            var unit = BuildUnit(unitLocation, domesticCiv);

            MockGrid.Setup(grid => grid.GetNeighbors(unitLocation)).Returns(new List <IHexCell>());

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.AnnexAdjacentTerritory
            };

            var abilityHandler = Container.Resolve <AnnexAdjacentTerritoryAbilityHandler>();

            Assert.DoesNotThrow(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
Esempio n. 4
0
        public void CanHandleCommandOnUnit_FalseIfCommandHasWrongType()
        {
            var unitLocation = BuildCell();

            var domesticCity = BuildCity(BuildCell());

            var domesticCiv = BuildCiv(new List <IHexCell>()
            {
                unitLocation
            }, new List <ICity>()
            {
                domesticCity
            });

            var unit = BuildUnit(unitLocation, domesticCiv);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.ClearVegetation
            };

            var abilityHandler = Container.Resolve <AnnexAdjacentTerritoryAbilityHandler>();

            Assert.IsFalse(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
Esempio n. 5
0
        public void HandleCommandOnUnit_PillagesOneImprovementIfOneExists()
        {
            var domesticCiv = BuildCiv();

            Mock <IImprovement> mockImprovementOne, mockImprovementTwo;
            var location = BuildCell(
                true, null, new List <IImprovement>()
            {
                BuildImprovement(out mockImprovementOne), BuildImprovement(out mockImprovementTwo)
            }
                );

            var unit = BuildUnit(location, domesticCiv, 0);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Pillage
            };

            var handler = Container.Resolve <PillageAbilityHandler>();

            handler.HandleCommandOnUnit(command, unit);

            mockImprovementOne.Verify(improvement => improvement.Pillage(), Times.Once, "ImprovementOne not pillaged");
            mockImprovementTwo.Verify(improvement => improvement.Pillage(), Times.Never, "ImprovementTwo unexpectedly pillaged");

            Assert.IsTrue(location.HasRoads, "Location's roads unexpectedly removed");
        }
Esempio n. 6
0
        public void CanHandleCommandOnUnit_TrueIfUnitInDomesticTerritory_OwnerHasCities_AndCommandHasRightType()
        {
            var unitLocation = BuildCell();

            var domesticCity = BuildCity(BuildCell());

            var domesticCiv = BuildCiv(new List <IHexCell>()
            {
                unitLocation
            }, new List <ICity>()
            {
                domesticCity
            });

            var unit = BuildUnit(unitLocation, domesticCiv);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.AnnexAdjacentTerritory
            };

            var abilityHandler = Container.Resolve <AnnexAdjacentTerritoryAbilityHandler>();

            Assert.IsTrue(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
Esempio n. 7
0
        public void HandleCommandOnUnit_AndHandlingValid_DoesNotAssignCellsThatCannotBeAssignedTo()
        {
            var unitLocation = BuildCell();

            var adjacentCells = new List <IHexCell>()
            {
                BuildCell(false), BuildCell(false), BuildCell(true)
            };

            MockGrid.Setup(grid => grid.GetNeighbors(unitLocation)).Returns(adjacentCells);

            var nearestCell = BuildCell();
            var nearCell    = BuildCell();
            var farCell     = BuildCell();

            MockGrid.Setup(grid => grid.GetDistance(unitLocation, nearestCell)).Returns(2);
            MockGrid.Setup(grid => grid.GetDistance(unitLocation, nearCell)).Returns(3);
            MockGrid.Setup(grid => grid.GetDistance(unitLocation, farCell)).Returns(4);

            var nearDomesticCity = BuildCity(nearCell);
            var farDomesticCity  = BuildCity(farCell);

            BuildCity(nearestCell);

            var domesticCiv = BuildCiv(new List <IHexCell>()
            {
                unitLocation
            }, new List <ICity>()
            {
                nearDomesticCity, farDomesticCity
            });

            var unit = BuildUnit(unitLocation, domesticCiv);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.AnnexAdjacentTerritory
            };

            var abilityHandler = Container.Resolve <AnnexAdjacentTerritoryAbilityHandler>();

            abilityHandler.HandleCommandOnUnit(command, unit);

            MockCellPossessionCanon.Verify(
                canon => canon.ChangeOwnerOfPossession(adjacentCells[0], It.IsAny <ICity>()),
                Times.Never, "AdjacentCells[0] unexpectedly assigned to a city"
                );

            MockCellPossessionCanon.Verify(
                canon => canon.ChangeOwnerOfPossession(adjacentCells[1], It.IsAny <ICity>()),
                Times.Never, "AdjacentCells[1] unexpectedly assigned to a city"
                );

            MockCellPossessionCanon.Verify(
                canon => canon.ChangeOwnerOfPossession(adjacentCells[2], nearDomesticCity),
                Times.Once, "AdjacentCells[2] not assigned to the expected city"
                );
        }
        public void CanHandleCommandOnUnit_TrueIfCommandHasTypeGainFreeTech()
        {
            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.GainFreeTech
            };
            var unit = BuildUnit(BuildCiv());

            var abilityHandler = Container.Resolve <GainFreeTechAbilityHandler>();

            Assert.IsTrue(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
        public void CanHandleCommandOnUnit_FalseIfCommandDoesNotHaveTypeGainFreeTech()
        {
            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildImprovement
            };
            var unit = BuildUnit(BuildCiv());

            var abilityHandler = Container.Resolve <GainFreeTechAbilityHandler>();

            Assert.IsFalse(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
        public void HandleCommandOnUnit_ThrowsInvalidOperationExceptionIfCommandNotValid()
        {
            var unit = BuildUnit(new UnitTestData(), new List <IImprovementTemplate>());

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.FoundCity
            };

            var abilityHandler = Container.Resolve <BuildImprovementAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
        public void HandleCommandOnUnit_ThrowsInvalidOperationExceptionIfCommandCannotBeHandled()
        {
            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildImprovement
            };

            var unit = BuildUnit(BuildCiv(), 0, 0, UnitType.NavalMelee);

            var abilityHandler = Container.Resolve <RepairAdjacentShipsAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
        public void CanHandleCommandOnUnit_TrueIfHasTypeRepairAdjacentShips()
        {
            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.RepairAdjacentShips
            };

            var unit = BuildUnit(BuildCiv(), 0, 0, UnitType.Mounted);

            var abilityHandler = Container.Resolve <RepairAdjacentShipsAbilityHandler>();

            Assert.IsTrue(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
        public void CanHandleCommandOnUnit_FalseIfDoesntHaveTypeRepairAdjacentShips()
        {
            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildImprovement
            };

            var unit = BuildUnit(BuildCiv(), 0, 0, UnitType.NavalMelee);

            var abilityHandler = Container.Resolve <RepairAdjacentShipsAbilityHandler>();

            Assert.IsFalse(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
        public void TryHandleCommandOnUnit_AndExecutionInvalid_ReturnsCorrectResults()
        {
            var civ = BuildCiv();

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildImprovement
            };

            var unit = BuildUnit(civ);

            var abilityHandler = Container.Resolve <GainFreeTechAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
        public void HandleCommandOnUnit_AndCommandInvalid_ThrowsInvalidOperationException()
        {
            Mock <IUnit> mockUnit;

            var unitToTest = BuildUnit(true, out mockUnit);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Fortify
            };

            var handler = Container.Resolve <FortifyAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => handler.HandleCommandOnUnit(command, unitToTest));
        }
        public void CanHandleCommandOnUnit_FalseIfCommandTypeNotFortify()
        {
            Mock <IUnit> mockUnit;

            var unit = BuildUnit(false, out mockUnit);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildRoad
            };

            var handler = Container.Resolve <FortifyAbilityHandler>();

            Assert.IsFalse(handler.CanHandleCommandOnUnit(command, unit));
        }
        public void TryHandleCommandOnUnit_AndExecutionValid_DoesNotThrow()
        {
            var civ = BuildCiv();

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.GainFreeTech
            };

            var unit = BuildUnit(civ);

            var abilityHandler = Container.Resolve <GainFreeTechAbilityHandler>();

            Assert.DoesNotThrow(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
        public void CanHandleCommandOnUnit_FalseIfUnitAlreadyFortified()
        {
            Mock <IUnit> mockUnit;

            var unit = BuildUnit(true, out mockUnit);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Fortify
            };

            var handler = Container.Resolve <FortifyAbilityHandler>();

            Assert.IsFalse(handler.CanHandleCommandOnUnit(command, unit));
        }
        public void HandleCommandOnUnit_ThrowsInvalidOperationExceptionWhenCannotBeHandled()
        {
            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildImprovement
            };

            var civ = BuildCiv(false);

            var unit = BuildUnit(civ);

            var abilityHandler = Container.Resolve <StartGoldenAgeAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => abilityHandler.HandleCommandOnUnit(command, unit));
        }
Esempio n. 20
0
        public void CanHandleCommandOnUnit_FalseIfNoCityAtLocation()
        {
            var location = BuildCell();
            var civ      = BuildCiv();

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.HurryProduction
            };
            var unit = BuildUnit(location, civ);

            var abilityHandler = Container.Resolve <HurryProductionAbilityHandler>();

            Assert.IsFalse(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
Esempio n. 21
0
        public void CanHandleCommandOnUnit_FalseIfCommandTypeNotFoundCity()
        {
            var unitLocation = BuildHexCell(true);

            var owner = BuildCivilization("");

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.RepairAdjacentShips
            };

            var unit = BuildUnit(unitLocation, owner);

            var handler = Container.Resolve <FoundCityAbilityHandler>();

            Assert.IsFalse(handler.CanHandleCommandOnUnit(command, unit));
        }
Esempio n. 22
0
        public void CanHandleCommandOnUnit_ReturnsTrueIfUnitLocationIsValidCellForCity()
        {
            var unitLocation = BuildHexCell(true);

            var owner = BuildCivilization("");

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.FoundCity
            };

            var unit = BuildUnit(unitLocation, owner);

            var handler = Container.Resolve <FoundCityAbilityHandler>();

            Assert.IsTrue(handler.CanHandleCommandOnUnit(command, unit));
        }
Esempio n. 23
0
        public void HandleCommandOnUnit_AndCommandCannotBeHandled_ThrowsInvalidOperationException()
        {
            var unitLocation = BuildHexCell(true);

            var owner = BuildCivilization("Washington");

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.BuildRoad
            };

            var unit = BuildUnit(unitLocation, owner);

            var handler = Container.Resolve <FoundCityAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => handler.HandleCommandOnUnit(command, unit));
        }
        public void CanHandleCommandOnUnit_FalseIfCommandHasMoreThanOneArgument()
        {
            var command = new AbilityCommandRequest()
            {
                Type       = AbilityCommandType.StartGoldenAge,
                ArgsToPass = new List <string>()
                {
                    "10", "15"
                }
            };

            var unit = BuildUnit(BuildCiv(false));

            var abilityHandler = Container.Resolve <StartGoldenAgeAbilityHandler>();

            Assert.IsFalse(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
        public void HandleCommandOnUnit_AndCommandValid_UnitFortified()
        {
            Mock <IUnit> mockUnit;

            var unitToTest = BuildUnit(false, out mockUnit);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Fortify
            };

            var handler = Container.Resolve <FortifyAbilityHandler>();

            handler.HandleCommandOnUnit(command, unitToTest);

            mockUnit.Verify(unit => unit.BeginFortifying(), Times.Once);
        }
Esempio n. 26
0
        public void HandleCommandOnUnit_ThrowsInvalidOperationExceptionIfCannotHandle()
        {
            var domesticCiv = BuildCiv();

            var location = BuildCell(true, null, new List <IImprovement>());

            var unit = BuildUnit(location, domesticCiv, 0);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Fortify
            };

            var handler = Container.Resolve <PillageAbilityHandler>();

            Assert.Throws <InvalidOperationException>(() => handler.HandleCommandOnUnit(command, unit));
        }
Esempio n. 27
0
        public void CanHandleCommandOnUnit_FalseIfNoImprovementsOrRoadsAtLocation()
        {
            var domesticCiv = BuildCiv();

            var location = BuildCell(false, null, new List <IImprovement>());

            var unit = BuildUnit(location, domesticCiv, 0);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.Pillage
            };

            var handler = Container.Resolve <PillageAbilityHandler>();

            Assert.IsFalse(handler.CanHandleCommandOnUnit(command, unit));
        }
        public void CanHandleCommandOnUnit_FalseIfCommandIsNotOfTypeStartGoldenAge()
        {
            var command = new AbilityCommandRequest()
            {
                Type       = AbilityCommandType.BuildRoad,
                ArgsToPass = new List <string>()
                {
                    "10"
                }
            };

            var unit = BuildUnit(BuildCiv(false));

            var abilityHandler = Container.Resolve <StartGoldenAgeAbilityHandler>();

            Assert.IsFalse(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }
        public void TryHandleCommandOnUnit_AndExecutionValid_AddsFreeTechToUnitOwner()
        {
            var civ = BuildCiv();

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.GainFreeTech
            };

            var unit = BuildUnit(civ);

            var abilityHandler = Container.Resolve <GainFreeTechAbilityHandler>();

            abilityHandler.HandleCommandOnUnit(command, unit);

            MockTechCanon.Verify(canon => canon.AddFreeTechToCiv(civ), Times.Once);
        }
Esempio n. 30
0
        public void CanHandleCommandOnUnit_TrueIfLocationHasDomesticCityWithAnActiveProject()
        {
            var location = BuildCell();
            var civ      = BuildCiv();

            BuildCity(location, civ, BuildProject(0), 0);

            var command = new AbilityCommandRequest()
            {
                Type = AbilityCommandType.HurryProduction
            };
            var unit = BuildUnit(location, civ);

            var abilityHandler = Container.Resolve <HurryProductionAbilityHandler>();

            Assert.IsTrue(abilityHandler.CanHandleCommandOnUnit(command, unit));
        }