package jrummikub.control; import static org.junit.Assert.*; import java.awt.Color; import jrummikub.control.turn.TurnControlFactory; import jrummikub.model.GameSettings; import jrummikub.util.IListener1; import jrummikub.view.ISettingsPanel; import jrummikub.view.MockView; import org.junit.Before; import org.junit.Test; /** */ public class SettingsControlTest { MockView view = new MockView(); GameSettings initialSettings = new GameSettings(); SettingsControl settingsControl = new SettingsControl(view, initialSettings); GameSettings gameSettings = null; /** */ @Before public void setup() { settingsControl.getStartGameEvent().add(new IListener1() { @Override public void handle(GameSettings value) { gameSettings = value; } }); settingsControl.startSettings(); } /** */ @Test public void initialStateTest() { assertSame(ISettingsPanel.SettingsError.NO_ERROR, view.settingsPanel.error); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(2, gameSettings.getPlayerList().size()); assertFalse(view.settingsPanel.removePlayerButtonsEnabled); } /** */ @Test public void addPlayerTest() { view.settingsPanel.addPlayerEvent.emit(); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(3, gameSettings.getPlayerList().size()); assertTrue(view.settingsPanel.removePlayerButtonsEnabled); } /** */ @Test public void add14PlayerTest() { for (int i = 0; i < 14; i++) { view.settingsPanel.addPlayerEvent.emit(); } view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(16, gameSettings.getPlayerList().size()); assertTrue(view.settingsPanel.removePlayerButtonsEnabled); assertFalse(view.settingsPanel.addPlayerButtonEnabled); } /** */ @Test public void add14RemovePlayerTest() { for (int i = 0; i < 14; i++) { view.settingsPanel.addPlayerEvent.emit(); } view.settingsPanel.removePlayerEvent.emit(0); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(15, gameSettings.getPlayerList().size()); assertTrue(view.settingsPanel.removePlayerButtonsEnabled); assertTrue(view.settingsPanel.addPlayerButtonEnabled); } /** */ @Test public void removePlayerTest() { view.settingsPanel.addPlayerEvent.emit(); view.settingsPanel.removePlayerEvent.emit(0); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(2, gameSettings.getPlayerList().size()); assertFalse(view.settingsPanel.removePlayerButtonsEnabled); } /** */ @Test public void takenColorTest() { Color color1 = Color.RED; Color color2 = Color.BLUE; view.settingsPanel.changePlayerColorEvent.emit(0, color1); view.settingsPanel.changePlayerColorEvent.emit(1, color2); view.settingsPanel.changePlayerColorEvent.emit(1, color1); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(2, gameSettings.getPlayerList().size()); assertSame(color2, gameSettings.getPlayerList().get(0).getColor()); assertSame(color1, gameSettings.getPlayerList().get(1).getColor()); } /** */ @Test public void unusedColorTest() { Color color1 = Color.RED; Color color2 = Color.BLUE; Color color3 = Color.PINK; view.settingsPanel.changePlayerColorEvent.emit(0, color1); view.settingsPanel.changePlayerColorEvent.emit(1, color2); view.settingsPanel.changePlayerColorEvent.emit(1, color3); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(2, gameSettings.getPlayerList().size()); assertSame(color1, gameSettings.getPlayerList().get(0).getColor()); assertSame(color3, gameSettings.getPlayerList().get(1).getColor()); } /** */ @Test public void takenNameTest() { String name1 = "Julia"; view.settingsPanel.changePlayerNameEvent.emit(0, name1); view.settingsPanel.changePlayerNameEvent.emit(1, name1); assertFalse(view.settingsPanel.startButtonEnabled); assertSame(ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME, view.settingsPanel.error); view.settingsPanel.startGameEvent.emit(); assertNull(gameSettings); } /** */ @Test public void fixTakenNameTest() { String name1 = "Julia"; view.settingsPanel.changePlayerNameEvent.emit(0, name1); view.settingsPanel.changePlayerNameEvent.emit(1, name1); assertFalse(view.settingsPanel.startButtonEnabled); assertSame(ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME, view.settingsPanel.error); view.settingsPanel.startGameEvent.emit(); assertNull(gameSettings); String name2 = "Karl"; view.settingsPanel.changePlayerNameEvent.emit(1, name2); assertTrue(view.settingsPanel.startButtonEnabled); assertSame(ISettingsPanel.SettingsError.NO_ERROR, view.settingsPanel.error); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); } /** */ @Test public void emptyNameTest() { String name1 = ""; view.settingsPanel.changePlayerNameEvent.emit(0, name1); assertFalse(view.settingsPanel.startButtonEnabled); assertSame(ISettingsPanel.SettingsError.NO_PLAYER_NAME, view.settingsPanel.error); view.settingsPanel.startGameEvent.emit(); assertNull(gameSettings); } /** */ @Test public void initialMeldThresholdTest() { assertEquals(initialSettings.getInitialMeldThreshold(), view.settingsPanel.initialMeldThreshold); view.settingsPanel.changeInitialMeldThresholdEvent.emit(25); view.settingsPanel.startGameEvent.emit(); assertEquals(25, gameSettings.getInitialMeldThreshold()); } /** */ @Test public void jokerNumberTest() { assertEquals(initialSettings.getJokerNumber(), view.settingsPanel.jokerNumber); view.settingsPanel.changeJokerNumberEvent.emit(25); view.settingsPanel.startGameEvent.emit(); assertEquals(25, gameSettings.getJokerNumber()); } /** */ @Test public void typeChangeTest() { view.settingsPanel.changePlayerTypeEvent.emit(0, TurnControlFactory.Type.COMPUTER); view.settingsPanel.changePlayerTypeEvent.emit(1, TurnControlFactory.Type.COMPUTER); view.settingsPanel.changePlayerTypeEvent.emit(1, TurnControlFactory.Type.HUMAN); view.settingsPanel.startGameEvent.emit(); assertNotNull(gameSettings); assertEquals(2, gameSettings.getPlayerList().size()); assertSame(TurnControlFactory.Type.COMPUTER, gameSettings.getPlayerList().get(0).getTurnControlType()); assertSame(TurnControlFactory.Type.HUMAN, gameSettings.getPlayerList().get(1).getTurnControlType()); } }