You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
4.7 KiB

import XCTest
@testable import Model
class VerySimpleRulesTests: XCTestCase {
var rules: VerySimpleRules!
var board: Board!
override func setUp() {
super.setUp()
rules = VerySimpleRules()
board = VerySimpleRules.createBoard()
}
override func tearDown() {
rules = nil
board = nil
super.tearDown()
}
func testCreateBoard() {
// Test que la fonction createBoard() retourne un plateau valide avec les dimensions attendues
let board = VerySimpleRules.createBoard()
XCTAssertEqual(board.nbRows, 5)
XCTAssertEqual(board.nbColumns, 5)
}
func testGetNextPlayer() {
// Teste que la fonction getNextPlayer() retourne le joueur suivant en fonction de l'historique des coups
var rules = VerySimpleRules()
rules.historic.append(Move(owner: .player1, rowOrigin: 0, columnOrigin: 0, rowDestination: 0, columnDestination: 1))
XCTAssertEqual(rules.getNextPlayer(), .player2)
rules.historic.append(Move(owner: .player2, rowOrigin: 0, columnOrigin: 1, rowDestination: 0, columnDestination: 2))
XCTAssertEqual(rules.getNextPlayer(), .player1)
}
func testCheckBoardValid() {
// Assurez-vous que la méthode `checkBoard` ne lève pas d'exception pour un plateau valide
XCTAssertNoThrow(try VerySimpleRules.checkBoard(b: board))
}
func testCheckBoardInvalidDimensions() {
// Création d'un plateau avec des dimensions invalides (4x4 au lieu de 5x5)
var invalidCells = [[Cell]]()
for _ in 0..<4 {
var rowCells = [Cell]()
for _ in 0..<4 {
// Créez des cellules basiques, les détails dépendent de votre implémentation de Cell
let cell = Cell(ofType: .jungle, ownedBy: .noOne, withPiece: nil)
rowCells.append(cell)
}
invalidCells.append(rowCells)
}
let invalidBoard = Board(withGrid: invalidCells)!
XCTAssertThrowsError(try VerySimpleRules.checkBoard(b: invalidBoard))
}
func testGetMoves() {
// Supposons que pour une configuration de plateau spécifique, vous attendiez 3 mouvements possibles pour le joueur 1
let expectedMoveCountForPlayer1 = 3 // Remplacez 3 par le nombre correct basé sur votre jeu
// Test pour vérifier si getMoves retourne les bons mouvements pour le joueur 1
let movesForPlayer1 = rules.getMoves(board: board, owner: .player1)
// XCTAssertEqual(movesForPlayer1.count, expectedMoveCountForPlayer1)
}
func testIsMoveValid() {
// Test pour un mouvement valide
let validMove = Move(owner: .player1, rowOrigin: 0, columnOrigin: 0, rowDestination: 1, columnDestination: 0)
XCTAssertTrue(rules.isMoveValid(board: board, move: validMove))
// Test pour un mouvement invalide (par exemple, déplacement vers une case occupée par le même joueur)
let invalidMove = Move(owner: .player1, rowOrigin: 0, columnOrigin: 0, rowDestination: 0, columnDestination: 1)
XCTAssertFalse(rules.isMoveValid(board: board, move: invalidMove))
}
func testIsGameOver() {
// Assurez-vous que `board` est bien initialisé
guard let currentBoard = board else {
XCTFail("Board is not initialized")
return
}
// Créez un mouvement qui simule une fin de partie
let winningMove = Move(owner: .player1, rowOrigin: 3, columnOrigin: 2, rowDestination: 4, columnDestination: 2)
/*
// Appliquez ce mouvement au plateau
// Cette partie dépend de la façon dont votre jeu applique les mouvements
// Ici, un exemple générique où nous remplaçons simplement la pièce dans la cellule de destination
if let piece = currentBoard.grid[winningMove.rowOrigin][winningMove.columnOrigin].piece {
currentBoard.grid[winningMove.rowDestination][winningMove.columnDestination].piece = piece
currentBoard.grid[winningMove.rowOrigin][winningMove.columnOrigin].piece = nil
}
*/
// Testez si `isGameOver` détecte correctement la fin de partie
let (isGameOver, result) = rules.isGameOver(board: currentBoard, lastMove: winningMove)
XCTAssertTrue(isGameOver)
// Vérifiez le résultat spécifique de la fin de partie
switch result {
case .winner(let winner, let winCondition):
XCTAssertEqual(winner, .player1)
XCTAssertEqual(winCondition, .denReached)
default:
XCTFail("Unexpected game over result")
}
}
static var allTests = [
("testCreateBoard", testCreateBoard),
("testGetNextPlayer", testGetNextPlayer),
]
}