public static void TestApplyMove_ReturnedMoveType()
{
ChessGame game = new ChessGame();
MoveType type = game.ApplyMove(new Move("E2", "E4", Player.White), true);
Assert.AreEqual(type, MoveType.Move);
type = game.ApplyMove(new Move("D7", "D5", Player.Black), true);
Assert.AreEqual(type, MoveType.Move);
type = game.ApplyMove(new Move("E4", "D5", Player.White), true);
Assert.AreEqual(type, MoveType.Move | MoveType.Capture);
type = game.ApplyMove(new Move("A5", "A4", Player.White), false);
Assert.AreEqual(type, MoveType.Invalid);
Piece[][] board = new Piece[8][]
{
new[] { rb, o, o, kb, o, o, o, o },
new[] { o, pw, o, o, o, o, o, o },
new[] { o, o, o, o, o, o, o, o },
new[] { o, o, o, o, o, o, o, o },
new[] { o, o, o, o, o, o, o, o },
new[] { o, o, o, o, o, o, o, o },
new[] { pb, o, o, o, o, o, o, o },
new[] { o, o, o, o, kw, o, o, rw }
};
game = new ChessGame(board, Player.White);
type = game.ApplyMove(new Move("E1", "G1", Player.White), true);
Assert.AreEqual(type, MoveType.Move | MoveType.Castling);
type = game.ApplyMove(new Move("A2", "A1", Player.Black, 'Q'), true);
Assert.AreEqual(type, MoveType.Move | MoveType.Promotion);
type = game.ApplyMove(new Move("B7", "A8", Player.White, 'Q'), true);
Assert.AreEqual(type, MoveType.Move | MoveType.Capture | MoveType.Promotion);
}