Skip to content

Commit

Permalink
Add a test.
Browse files Browse the repository at this point in the history
  • Loading branch information
asvitkine committed Feb 14, 2024
1 parent 5f3a570 commit cbab46b
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ public static CasualtyDetails selectCasualties(

final CasualtyDetails casualtyDetails =
hitsRemaining >= totalHitpoints
|| sortedTargetsToPickFrom.size() == 1
|| allTargetsOneTypeOneHitPoint(
sortedTargetsToPickFrom,
dependents,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ public static void move(final Collection<Unit> units, final Route route) {
}
}

static void assertMoveError(final Collection<Unit> units, final Route route) {
public static void assertMoveError(final Collection<Unit> units, final Route route) {
Preconditions.checkArgument(!units.isEmpty());
final String error = moveDelegate(route.getStart().getData()).move(units, route);
if (error == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import static games.strategy.triplea.delegate.GameDataTestUtil.chinese;
import static games.strategy.triplea.delegate.GameDataTestUtil.fighter;
import static games.strategy.triplea.delegate.GameDataTestUtil.french;
import static games.strategy.triplea.delegate.GameDataTestUtil.germanBattleship;
import static games.strategy.triplea.delegate.GameDataTestUtil.germans;
import static games.strategy.triplea.delegate.GameDataTestUtil.infantry;
import static games.strategy.triplea.delegate.GameDataTestUtil.japan;
Expand All @@ -20,6 +21,7 @@
import static games.strategy.triplea.delegate.GameDataTestUtil.removeFrom;
import static games.strategy.triplea.delegate.GameDataTestUtil.territory;
import static games.strategy.triplea.delegate.GameDataTestUtil.transport;
import static games.strategy.triplea.delegate.GameDataTestUtil.unitType;
import static games.strategy.triplea.delegate.MockDelegateBridge.advanceToStep;
import static games.strategy.triplea.delegate.MockDelegateBridge.newDelegateBridge;
import static games.strategy.triplea.delegate.MockDelegateBridge.thenGetRandomShouldHaveBeenCalled;
Expand All @@ -32,6 +34,7 @@
import static org.hamcrest.Matchers.in;
import static org.hamcrest.core.Is.is;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
Expand All @@ -51,13 +54,15 @@
import games.strategy.triplea.attachments.UnitSupportAttachment;
import games.strategy.triplea.delegate.AbstractMoveDelegate;
import games.strategy.triplea.delegate.GameDataTestUtil;
import games.strategy.triplea.delegate.Matches;
import games.strategy.triplea.delegate.MoveDelegate;
import games.strategy.triplea.settings.AbstractClientSettingTestCase;
import games.strategy.triplea.xml.TestMapGameData;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.junit.jupiter.api.Test;
import org.triplea.java.collections.CollectionUtils;

class MustFightBattleTest extends AbstractClientSettingTestCase {
@Test
Expand Down Expand Up @@ -222,7 +227,7 @@ void testStepNamesChangeDuringCombat() {
}

@Test
void testAlliedCarriedPlanesTransportedByIsResetWhenCancelingBattle() throws Exception {
void testAlliedCarriedPlanesTransportedByIsResetWhenCancelingBattle() {
// Note: Test uses germans, british and france since other countries aren't at war on t1.
final GameData gameData = TestMapGameData.GLOBAL1940.getGameData();

Expand Down Expand Up @@ -259,6 +264,42 @@ void testAlliedCarriedPlanesTransportedByIsResetWhenCancelingBattle() throws Exc
assertThat(fighters.get(1).getTransportedBy(), is(nullValue()));
}

@Test
void testCantMoveAfterHitTransform() {
final GameData gameData = TestMapGameData.TWW.getGameData();
final Territory sz23 = territory("23 Sea Zone", gameData);
removeFrom(sz23, sz23.getUnits());
final Territory sz25 = territory("25 Sea Zone", gameData);
removeFrom(sz25, sz25.getUnits());

addTo(sz25, germanBattleship(gameData).create(1, GameDataTestUtil.germany(gameData)));
addTo(sz23, unitType("americanDestroyer", gameData).create(1, GameDataTestUtil.usa(gameData)));

final Collection<Unit> attackers = List.copyOf(sz25.getUnits());
final IDelegateBridge bridge =
performCombatMove(GameDataTestUtil.germany(gameData), attackers, new Route(sz25, sz23));

final IBattle battle = AbstractMoveDelegate.getBattleTracker(gameData).getPendingBattle(sz23);
assertNotNull(battle);
// Attacking battleship rolls a die with a hit, killing the destroyer.
// Defenders should roll a die with a hit, damaging the battleship.
whenGetRandom(bridge).thenAnswer(withDiceValues(1)).thenAnswer(withDiceValues(1));
battle.fight(bridge);
// The unit left should be the damaged german battleship.
assertEquals(1, sz23.getUnits().size());
final Unit unit = CollectionUtils.getAny(sz23.getUnits());
assertEquals("germanBattleship-damaged", unit.getType().getName());
// And it should have no movement left.
assertFalse(Matches.unitHasMovementLeft().test(unit));

// And just to double check, we can't move it.
advanceToStep(bridge, "NonCombatMove");
MoveDelegate moveDelegate = GameDataTestUtil.moveDelegate(gameData);
moveDelegate.setDelegateBridgeAndPlayer(bridge);
moveDelegate.start();
GameDataTestUtil.assertMoveError(sz23.getUnits(), new Route(sz23, sz25));
}

private static <T> void setPropertyValue(GameData gameData, String propertyName, T value) {
IEditableProperty<T> property =
(IEditableProperty<T>)
Expand Down
13 changes: 13 additions & 0 deletions game-app/game-core/src/test/resources/Total_World_War_Dec1941.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1975,6 +1975,7 @@
<unit name="germanAdvancedRocket"/>
<unit name="germanTransport"/>
<unit name="germanBattleship"/>
<unit name="germanBattleship-damaged"/>
<unit name="germanHull"/>
<unit name="germanCarrier"/>
<unit name="germanSubmarine"/>
Expand Down Expand Up @@ -8049,6 +8050,18 @@
<option name="requiresUnits" value="germanDocks:germanFactory"/>
<option name="consumesUnits" value="1:germanHull"/>
<option name="tuv" value="25"/>
<option name="whenHitPointsDamagedChangesInto" value="1:true:germanBattleship-damaged"/>
</attachment>
<attachment name="unitAttachment" attachTo="germanBattleship-damaged" javaClass="UnitAttachment" type="unitType">
<option name="movement" value="1"/>
<option name="attack" value="6"/>
<option name="defense" value="5"/>
<option name="canBombard" value="true"/>
<option name="isSea" value="true"/>
<option name="hitPoints" value="2"/>
<option name="bombard" value="5"/>
<option name="whenHitPointsRepairedChangesInto" value="0:true:germanBattleship"/>
<option name="tuv" value="17"/>
</attachment>
<attachment name="unitAttachment" attachTo="germanHull" javaClass="games.strategy.triplea.attachments.UnitAttachment" type="unitType">
<option name="movement" value="0"/>
Expand Down

0 comments on commit cbab46b

Please sign in to comment.