package games.strategy.triplea.delegate;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collection;
import org.junit.Before;
import org.junit.Test;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.ITestDelegateBridge;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Territory;
import games.strategy.triplea.attachments.RulesAttachment;
import games.strategy.triplea.xml.TestMapGameData;
import games.strategy.util.Match;
public class Pact_of_Steel_2_Test {
private GameData gameData;
@Before
public void setUp() throws Exception {
gameData = TestMapGameData.PACT_OF_STEEL_2.getGameData();
}
private ITestDelegateBridge getDelegateBridge(final PlayerID player) {
return GameDataTestUtil.getDelegateBridge(player, gameData);
}
@Test
public void testDirectOwnershipTerritories() {
final Territory Norway = gameData.getMap().getTerritory("Norway");
final Territory Eastern_Europe = gameData.getMap().getTerritory("Eastern Europe");
final Territory East_Balkans = gameData.getMap().getTerritory("East Balkans");
final Territory Ukraine_S_S_R_ = gameData.getMap().getTerritory("Ukraine S.S.R.");
final Territory Belorussia = gameData.getMap().getTerritory("Belorussia");
final PlayerID british = GameDataTestUtil.british(gameData);
final PlayerID germans = GameDataTestUtil.germans(gameData);
final PlayerID russians = GameDataTestUtil.russians(gameData);
final ITestDelegateBridge bridge = getDelegateBridge(russians);
// this National Objective russia has to own at least 3 of the 5 territories by itself
final RulesAttachment russian_easternEurope =
RulesAttachment.get(russians, "objectiveAttachmentRussians1_EasternEurope");
final Collection<Territory> terrs = new ArrayList<>();
terrs.add(Norway);
terrs.add(Eastern_Europe);
terrs.add(East_Balkans);
terrs.add(Ukraine_S_S_R_);
terrs.add(Belorussia);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(germans)), 5);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(russians)), 0);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(british)), 0);
assertFalse(russian_easternEurope.isSatisfied(null, bridge));
Norway.setOwner(british);
Eastern_Europe.setOwner(russians);
East_Balkans.setOwner(russians);
Ukraine_S_S_R_.setOwner(germans);
Belorussia.setOwner(germans);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(germans)), 2);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(russians)), 2);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(british)), 1);
assertFalse(russian_easternEurope.isSatisfied(null, bridge));
Ukraine_S_S_R_.setOwner(british);
Belorussia.setOwner(british);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(germans)), 0);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(russians)), 2);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(british)), 3);
assertFalse(russian_easternEurope.isSatisfied(null, bridge));
Norway.setOwner(russians);
Ukraine_S_S_R_.setOwner(germans);
Belorussia.setOwner(germans);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(germans)), 2);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(russians)), 3);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(british)), 0);
assertTrue(russian_easternEurope.isSatisfied(null, bridge));
Ukraine_S_S_R_.setOwner(russians);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(germans)), 1);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(russians)), 4);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(british)), 0);
assertTrue(russian_easternEurope.isSatisfied(null, bridge));
Belorussia.setOwner(russians);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(germans)), 0);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(russians)), 5);
assertEquals(Match.countMatches(terrs, Matches.isTerritoryOwnedBy(british)), 0);
assertTrue(russian_easternEurope.isSatisfied(null, bridge));
}
// TODO: Consider adding the following tests:
//
// testSupportAttachments
//
// testNationalObjectiveUses
//
// testBlockadeAndBlockadeZones
//
// testTriggers
//
// testConditions
//
// testObjectives
//
// testTechnologyFrontiers
// - frontiers, renaming, generic, and new techs and adding of players to frontiers
//
// testIsCombatTransport
//
// testIsConstruction
// - isConstruction, constructionType, constructionsPerTerrPerTypePerTurn, maxConstructionsPerTypePerTerr,
// - "More Constructions with Factory", "More Constructions with Factory", "Unlimited Constructions"
//
// testMaxPlacePerTerritory
//
// testCapitalCapturePlayerOptions
// - destroysPUs, retainCapitalNumber, retainCapitalProduceNumber
//
// testUnitPlacementRestrictions
//
// testRepairsUnits
// - repairsUnits, "Two HitPoint Units Require Repair Facilities", "Units Repair Hits Start Turn"
//
// testProductionPerXTerritories
//
// testGiveUnitControl
// - giveUnitControl, changeUnitOwners, canBeGivenByTerritoryTo, "Give Units By Territory"
//
// testDiceSides
//
// testMaxBuiltPerPlayer
//
// testDestroyedWhenCapturedBy
// - "Units Can Be Destroyed Instead Of Captured", destroyedWhenCapturedBy
//
// testIsInfrastructure
//
// testCanBeDamaged
//
// testIsSuicide
// - isSuicide, "Suicide and Munition Casualties Restricted",
// - "Defending Suicide and Munition Units Do Not Fire"
}