94 lines
2.6 KiB
Go
94 lines
2.6 KiB
Go
|
package chess_test
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"path"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/ekzyis/sn-chess/chess"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
// change working directory to the root of the project
|
||
|
// so assets/ can be found
|
||
|
wd, _ := os.Getwd()
|
||
|
os.Chdir(path.Dir(wd))
|
||
|
}
|
||
|
|
||
|
func TestBoardInitial(t *testing.T) {
|
||
|
b := chess.NewBoard()
|
||
|
|
||
|
assertPiece(t, b, "a1", chess.Rook, chess.Light)
|
||
|
assertPiece(t, b, "b1", chess.Knight, chess.Light)
|
||
|
assertPiece(t, b, "c1", chess.Bishop, chess.Light)
|
||
|
assertPiece(t, b, "d1", chess.Queen, chess.Light)
|
||
|
assertPiece(t, b, "e1", chess.King, chess.Light)
|
||
|
assertPiece(t, b, "f1", chess.Bishop, chess.Light)
|
||
|
assertPiece(t, b, "g1", chess.Knight, chess.Light)
|
||
|
assertPiece(t, b, "h1", chess.Rook, chess.Light)
|
||
|
|
||
|
assertPiece(t, b, "a2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "b2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "c2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "d2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "e2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "f2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "g2", chess.Pawn, chess.Light)
|
||
|
assertPiece(t, b, "h2", chess.Pawn, chess.Light)
|
||
|
|
||
|
assertPiece(t, b, "a8", chess.Rook, chess.Dark)
|
||
|
assertPiece(t, b, "b8", chess.Knight, chess.Dark)
|
||
|
assertPiece(t, b, "c8", chess.Bishop, chess.Dark)
|
||
|
assertPiece(t, b, "d8", chess.Queen, chess.Dark)
|
||
|
assertPiece(t, b, "e8", chess.King, chess.Dark)
|
||
|
assertPiece(t, b, "f8", chess.Bishop, chess.Dark)
|
||
|
assertPiece(t, b, "g8", chess.Knight, chess.Dark)
|
||
|
assertPiece(t, b, "h8", chess.Rook, chess.Dark)
|
||
|
|
||
|
assertPiece(t, b, "a7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "b7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "c7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "d7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "e7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "f7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "g7", chess.Pawn, chess.Dark)
|
||
|
assertPiece(t, b, "h7", chess.Pawn, chess.Dark)
|
||
|
}
|
||
|
|
||
|
func TestBoardMovePawn(t *testing.T) {
|
||
|
b := chess.NewBoard()
|
||
|
|
||
|
b.Move("e4")
|
||
|
|
||
|
assertNoPiece(t, b, "e2")
|
||
|
assertPiece(t, b, "e4", chess.Pawn, chess.Light)
|
||
|
|
||
|
b.Move("e5")
|
||
|
|
||
|
assertNoPiece(t, b, "e7")
|
||
|
assertPiece(t, b, "e5", chess.Pawn, chess.Dark)
|
||
|
}
|
||
|
|
||
|
func assertPiece(t *testing.T, b *chess.Board, position string, name chess.PieceName, color chess.Color) {
|
||
|
p := b.At(position)
|
||
|
|
||
|
c := "white"
|
||
|
if color == chess.Dark {
|
||
|
c = "black"
|
||
|
}
|
||
|
|
||
|
msg := fmt.Sprintf("expected %s %s at %s", c, name, position)
|
||
|
|
||
|
assert.NotNil(t, p, msg)
|
||
|
assert.Equal(t, name, p.Name, msg)
|
||
|
assert.Equal(t, color, p.Color, msg)
|
||
|
}
|
||
|
|
||
|
func assertNoPiece(t *testing.T, b *chess.Board, position string) {
|
||
|
p := b.At(position)
|
||
|
|
||
|
assert.Nil(t, p, "expected no piece at %s", position)
|
||
|
}
|