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)); }
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"); }
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)); }
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)); }
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"); }
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)); }
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)); }
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)); }
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)); }
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)); }
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); }
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)); }
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); }
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)); }