package jrummikub.control; import static org.junit.Assert.*; import java.awt.Color; 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(); SettingsControl settingsControl = new SettingsControl(view); 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); } }