public void TryParse_NotValid(string message)
        {
            var target = new MovePieceParser();
            var parsed = target.TryParse(message, out var result);

            Assert.IsFalse(parsed);
            Assert.IsNull(result);
        }
        public void TryParse_Valid_FromPosition(string message, BoardFile? fromFile, BoardRank? fromRank)
        {
            var target = new MovePieceParser();
            var parsed = target.TryParse(message, out var pieceDto);

            Assert.IsTrue(parsed);

            Assert.AreEqual(Piece.Empty, pieceDto.Piece);

            Assert.AreEqual(fromFile, pieceDto.FromFile);
            Assert.AreEqual(fromRank, pieceDto.FromRank);
            Assert.IsFalse(pieceDto.Captures);

            Assert.AreEqual(BoardFile.FileE, pieceDto.ToFile);
            Assert.AreEqual(BoardRank.Rank5, pieceDto.ToRank);

            Assert.IsFalse(pieceDto.Check);
            Assert.IsFalse(pieceDto.Checkmate);
        }
        public void TryParse_Valid_Piece(string message, Piece piece)
        {
            var target = new MovePieceParser();
            var parsed = target.TryParse(message, out var pieceDto);

            Assert.IsTrue(parsed);

            Assert.AreEqual(piece, pieceDto.Piece);

            Assert.IsNull(pieceDto.FromFile);
            Assert.IsNull(pieceDto.FromRank);
            Assert.IsFalse(pieceDto.Captures);

            Assert.AreEqual(BoardFile.FileC, pieceDto.ToFile);
            Assert.AreEqual(BoardRank.Rank8, pieceDto.ToRank);

            Assert.IsFalse(pieceDto.Check);
            Assert.IsFalse(pieceDto.Checkmate);
        }
        public void TryParse_Valid_FileOnly()
        {
            var target = new MovePieceParser();
            var parsed = target.TryParse("ed", out var pieceDto);

            Assert.IsTrue(parsed);

            Assert.AreEqual(Piece.Empty, pieceDto.Piece);

            Assert.AreEqual(BoardFile.FileE, pieceDto.FromFile);
            Assert.IsNull(pieceDto.FromRank);
            Assert.IsFalse(pieceDto.Captures);

            Assert.AreEqual(BoardFile.FileD, pieceDto.ToFile);
            Assert.IsNull(pieceDto.ToRank);

            Assert.IsFalse(pieceDto.Check);
            Assert.IsFalse(pieceDto.Checkmate);
        }
        public void TryParse_Valid_FileBAndBishop()
        {
            var target = new MovePieceParser();
            var parsed = target.TryParse("Bbc5", out var pieceDto);

            Assert.IsTrue(parsed);

            Assert.AreEqual(Piece.Bishop, pieceDto.Piece);

            Assert.AreEqual(BoardFile.FileB, pieceDto.FromFile);
            Assert.IsNull(pieceDto.FromRank);
            Assert.IsFalse(pieceDto.Captures);

            Assert.AreEqual(BoardFile.FileC, pieceDto.ToFile);
            Assert.AreEqual(BoardRank.Rank5, pieceDto.ToRank);

            Assert.IsFalse(pieceDto.Check);
            Assert.IsFalse(pieceDto.Checkmate);
        }