import pytest, AuxiliaryTestingMethods as aux
from copy import deepcopy

def testLogAction(takGame):
    board = deepcopy(takGame.board.board)
    takGame.logAction()
    assert(takGame.history[-1] == board)

def testUndo(takGame):
    board = deepcopy(takGame.board.board)
    takGame.actPlace(1, [0,0], 1)
    assert (board != takGame.board.board)
    takGame.undo()
    assert(board == takGame.board.board)

def testGetEndResults(takGame):
    aux.fillRow(takGame, 0, 1)
    takGame.turnCount += 1
    assert(takGame.getEndResults() == (1, 42))

def testActPlace(takGame):
    aux.resetBoard(takGame)
    takGame.actPlace(1, [1,1], 1)
    assert(takGame.turnCount == 2)
    assert(takGame.board.board[1][1][0] == -1)

def testCheckLegalPlacement(takGame):
    aux.resetBoard(takGame)
    takGame.actPlace(1, [1,1], 1)
    assert(takGame.checkLegalPlacement([0,0]))
    assert(not takGame.checkLegalPlacement([1,1]))

def testActMove(takGame):
    aux.resetBoard(takGame)
    aux.fillRow(takGame, 0, 1)
    takGame.actMove([0,0], [1,0], [1])
    assert(takGame.board.board[0][0][0] == 0)
    assert(takGame.board.board[1][0][0] == 1)
    assert(takGame.turnCount == 2)

def testCheckLegalMoveStart(takGame):
    aux.resetBoard(takGame)
    aux.fillSpace(takGame, [2,0], -1)
    assert(takGame.checkLegalMoveStart(2, [2,0]))
    assert(not takGame.checkLegalMoveStart(1, [2,0]))

def testCheckLegalDrop(takGame):
    aux.resetBoard(takGame)
    aux.fillSpace(takGame, [0,0], 3)
    aux.fillSpace(takGame, [0,1], 2)
    aux.fillSpace(takGame, [0,2], 1)
    assert(not takGame.checkLegalDrop([0,0], 1))
    assert(not takGame.checkLegalDrop([0,0], 2))
    assert(not takGame.checkLegalDrop([0,0], 3))
    assert(not takGame.checkLegalDrop([0,1], 1))
    assert(not takGame.checkLegalDrop([0,1], 2))
    assert(takGame.checkLegalDrop([0,1], 3))
    assert(takGame.checkLegalDrop([0,2], 1))

def testPiecesLeft(takGame):
    aux.resetBoard(takGame)
    aux.fillRow(takGame, 0, 1)
    assert(takGame.piecesLeft(1) == (16, 1))
    aux.fillSpace(takGame, [1,1], 3)
    assert(takGame.piecesLeft(1) == (16, 0))

@pytest.fixture(scope='module')
def takGame():
	import Tak
	return Tak.TakGame(5)
