167 lines
4.5 KiB
Java
167 lines
4.5 KiB
Java
import domain.HitoriGameMain;
|
|
import org.junit.jupiter.api.*;
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
import java.io.File;
|
|
|
|
class HitoriGameTest {
|
|
private HitoriGameMain game;
|
|
private static final int[][] TEST_BOARD = {
|
|
{1, 2, 1},
|
|
{2, 1, 2},
|
|
{1, 2, 1}
|
|
};
|
|
|
|
@BeforeEach
|
|
void setUp() {
|
|
game = new HitoriGameMain(TEST_BOARD);
|
|
|
|
// Löscht alte Spielstand- und Highscore-Dateien (falls vorhanden)
|
|
new File("gamestate.dat").delete();
|
|
new File("highscores.dat").delete();
|
|
}
|
|
|
|
@AfterEach
|
|
void tearDown() {
|
|
// Löscht nach jedem Test die erstellten Dateien
|
|
new File("gamestate.dat").delete();
|
|
new File("highscores.dat").delete();
|
|
}
|
|
|
|
@Test
|
|
void testGameIntegration() {
|
|
// Testet die Integration verschiedener Spielfunktionen
|
|
|
|
// Timer starten und prüfen, ob Zeit gezählt wird
|
|
game.startTimer();
|
|
try {
|
|
Thread.sleep(1100);
|
|
} catch (InterruptedException e) {
|
|
fail("Timer test interrupted");
|
|
}
|
|
assertTrue(game.getElapsedTimeInSeconds() >= 1);
|
|
|
|
// Testet das Markieren von Zellen
|
|
game.markCellAsBlack(0, 2);
|
|
assertTrue(game.getBlackCells()[0][2]);
|
|
|
|
// Testet das Hinzufügen von Highscores
|
|
game.addHighScore("TestPlayer", 100);
|
|
assertFalse(game.getHighScoresWithAverage().isEmpty());
|
|
}
|
|
|
|
@Test
|
|
void testSaveAndLoadGameState() {
|
|
// Testet das Speichern und Laden des Spielstands
|
|
|
|
// Einige Zellen markieren und Timer starten
|
|
game.markCellAsWhite(0, 0);
|
|
game.markCellAsBlack(1, 1);
|
|
game.startTimer();
|
|
try {
|
|
Thread.sleep(1000); // 1 Sekunde warten
|
|
} catch (InterruptedException e) {
|
|
fail("Timer test interrupted");
|
|
}
|
|
|
|
|
|
game.saveGameState();
|
|
|
|
// Spielstand laden und prüfen
|
|
HitoriGameMain loadedGame = HitoriGameMain.loadGameState();
|
|
assertNotNull(loadedGame);
|
|
assertTrue(loadedGame.getWhiteCells()[0][0]);
|
|
assertTrue(loadedGame.getBlackCells()[1][1]);
|
|
assertFalse(loadedGame.getElapsedTimeInSeconds() > 0);
|
|
}
|
|
|
|
@Test
|
|
void testResetAll() {
|
|
// Testet das vollständige Zurücksetzen des Spiels
|
|
|
|
// Spielzustand einrichten
|
|
game.markCellAsBlack(0, 0);
|
|
game.startTimer();
|
|
game.addHighScore("TestPlayer", 100);
|
|
|
|
|
|
game.reset();
|
|
|
|
// Prüfen, ob das Spiel zurückgesetzt wurde
|
|
assertFalse(game.getBlackCells()[0][0]);
|
|
assertEquals(0, game.getElapsedTimeInSeconds());
|
|
assertEquals(0, game.getMistakeCount());
|
|
}
|
|
|
|
@Test
|
|
void testCompleteGameFlow() {
|
|
// Testet einen kompletten Spielablauf
|
|
|
|
game.startTimer();
|
|
|
|
// Zellen markieren, um das Spiel zu lösen
|
|
game.markCellAsBlack(0, 2);
|
|
game.markCellAsWhite(0, 0);
|
|
game.markCellAsWhite(0, 1);
|
|
game.markCellAsWhite(1, 0);
|
|
game.markCellAsWhite(1, 1);
|
|
game.markCellAsWhite(1, 2);
|
|
game.markCellAsWhite(2, 0);
|
|
game.markCellAsWhite(2, 1);
|
|
game.markCellAsBlack(2, 2);
|
|
|
|
|
|
assertFalse(game.isSolved());
|
|
|
|
|
|
game.stopTimer();
|
|
game.addHighScore("Winner", game.getElapsedTimeInSeconds());
|
|
|
|
// Prüfen, ob der Highscore gespeichert wurde
|
|
boolean found = false;
|
|
for (String score : game.getHighScoresWithAverage()) {
|
|
if (score.contains("Winner")) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
assertTrue(found);
|
|
}
|
|
|
|
@Test
|
|
void testTimerPauseResume() {
|
|
// Testet das Pausieren und Fortsetzen des Timers
|
|
|
|
|
|
game.startTimer();
|
|
try {
|
|
Thread.sleep(1000);
|
|
} catch (InterruptedException e) {
|
|
fail("Timer test interrupted");
|
|
}
|
|
|
|
// Timer pausieren und aktuelle Zeit speichern
|
|
game.pauseTimer();
|
|
long pausedTime = game.getElapsedTimeInSeconds();
|
|
|
|
try {
|
|
Thread.sleep(500);
|
|
} catch (InterruptedException e) {
|
|
fail("Timer test interrupted");
|
|
}
|
|
|
|
// Zeit sollte während der Pause nicht weiterlaufen
|
|
assertEquals(pausedTime, game.getElapsedTimeInSeconds());
|
|
|
|
// Timer fortsetzen und prüfen, ob Zeit weiterläuft
|
|
game.startTimer();
|
|
try {
|
|
Thread.sleep(1000);
|
|
} catch (InterruptedException e) {
|
|
fail("Timer test interrupted");
|
|
}
|
|
|
|
|
|
assertTrue(game.getElapsedTimeInSeconds() > pausedTime);
|
|
}
|
|
}
|