diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/attachments/RulesAttachment.java b/game-app/game-core/src/main/java/games/strategy/triplea/attachments/RulesAttachment.java index de5c4f901c0..806e431ff2e 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/attachments/RulesAttachment.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/attachments/RulesAttachment.java @@ -37,6 +37,8 @@ import java.util.Set; import java.util.function.Predicate; import javax.annotation.Nullable; + +import org.jetbrains.annotations.VisibleForTesting; import org.triplea.java.Interruptibles; import org.triplea.java.collections.CollectionUtils; import org.triplea.java.collections.IntegerMap; @@ -491,7 +493,8 @@ private void resetUnitPresence() { unitPresence = null; } - private void setIsAI(final String s) { + @VisibleForTesting + public void setIsAI(final String s) { isAI = (s == null) ? null : getBool(s); } @@ -1025,7 +1028,8 @@ private boolean matchTerritories( return numberMet >= getTerritoryCount(); } - private boolean checkIsAI(final List players) { + @VisibleForTesting + public boolean checkIsAI(final List players) { boolean bcheck = true; for (GamePlayer player : players) { bcheck = (bcheck && (getIsAI() == player.isAi())); diff --git a/game-app/game-core/src/test/java/games/strategy/triplea/attachments/RulesAttachmentTest.java b/game-app/game-core/src/test/java/games/strategy/triplea/attachments/RulesAttachmentTest.java new file mode 100644 index 00000000000..26ffb6bef6f --- /dev/null +++ b/game-app/game-core/src/test/java/games/strategy/triplea/attachments/RulesAttachmentTest.java @@ -0,0 +1,87 @@ +package games.strategy.triplea.attachments; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import games.strategy.engine.data.GameData; +import games.strategy.engine.data.GamePlayer; +import games.strategy.engine.data.PlayerList; +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class RulesAttachmentTest { + + @Mock private PlayerList playerList; + + private final GameData gameData = mock(GameData.class); + + private final RulesAttachment attachment = new RulesAttachment("Test attachment", null, gameData); + + @Mock private GamePlayer player1; + @Mock private GamePlayer player2; + @Mock private GamePlayer player3; + @Mock private GamePlayer player4; + + @BeforeEach + void setUp() { + when(gameData.getPlayerList()).thenReturn(playerList); + } + + /* Testing stored getIsAI values with setIsAI */ + @Test + void isAITest() { + attachment.setIsAI("true"); + assertTrue(attachment.getIsAI()); + attachment.setIsAI("false"); + assertFalse(attachment.getIsAI()); + } + + /* Testing returned values for checkGetIsAI */ + @Test + void checkGetIsAITest() { + lenient().when(player1.isAi()).thenReturn(false); + lenient().when(player2.isAi()).thenReturn(true); + lenient().when(player3.isAi()).thenReturn(true); + lenient().when(player4.isAi()).thenReturn(false); + + /* Testing with 1 non AI player */ + final List players1 = List.of(player1); + attachment.setIsAI("true"); + assertFalse(attachment.checkIsAI(players1)); + attachment.setIsAI("false"); + assertTrue(attachment.checkIsAI(players1)); + /* Testing with 1 AI player */ + final List players2 = List.of(player2); + attachment.setIsAI("true"); + assertTrue(attachment.checkIsAI(players2)); + attachment.setIsAI("false"); + assertFalse(attachment.checkIsAI(players2)); + /* Testing with 1 non AI player and 1 AI player */ + final List players12 = List.of(player1, player2); + attachment.setIsAI("true"); + assertFalse(attachment.checkIsAI(players12)); + attachment.setIsAI("false"); + assertFalse(attachment.checkIsAI(players12)); + /* Testing with 2 AI players */ + final List players23 = List.of(player2, player3); + attachment.setIsAI("true"); + assertTrue(attachment.checkIsAI(players23)); + attachment.setIsAI("false"); + assertFalse(attachment.checkIsAI(players23)); + /* Testing with 2 non AI players */ + final List players14 = List.of(player1, player4); + attachment.setIsAI("true"); + assertFalse(attachment.checkIsAI(players14)); + attachment.setIsAI("false"); + assertTrue(attachment.checkIsAI(players14)); + } +}