def test_parse_game_variations_2o_multi(self): moves = "[Site \"help\"]\n1. e4 (1. d4 d5 2. c4 e6) (1. c4 c5 2. g3 e6) e5 1-0" parsed = parser.parse(moves, actions=Actions()) assert parsed.movetext[0].white.variations[1][0].white.san == "c4" assert parsed.movetext[0].white.variations[1][0].black.san == "c5" assert parsed.movetext[0].white.variations[1][1].white.san == "g3" assert parsed.movetext[0].white.variations[1][1].black.san == "e6"
def test_make_movetext_simple(self): mtt = '1. e4 e5' mt = Actions().make_movetext(mtt, 0, 0, [make_move_node(mtt, "1.", "e4", "", "e5", "", "")]) assert mt[0].move_number == 1 assert mt[0].white.san == "e4" assert mt[0].black.san == "e5"
def test_parse_game(self): moves = "[Site \"help\"]\n1. e4 e5 1-0" parsed = parser.parse(moves, actions=Actions()) assert parsed.tag_pairs['Site'] == "help" assert parsed.movetext[0].white.san == "e4" assert parsed.movetext[0].black.san == "e5" assert parsed.score.result == "1-0"
def test_parse_move_comment_after_white(self): moves = "[Site \"tst\"]\n1. e4 $1 {a comment} {move one} 0-1" game = parser.parse(moves, actions=Actions()) m1 = game.move(1) assert m1.white.san == "e4" assert m1.white.comment == "a comment" assert m1.comment == "move one"
def test_parse_full_move(self): moves = "[Site \"tst\"]\n1. e4 $1 {a comment} (1.d5) 0-1" game = parser.parse(moves, actions=Actions()) m1 = game.move(1) assert m1.white.san == "e4" assert m1.white.comment == "a comment" assert m1.white.nags[0] == "$1" assert m1.white.variations[0].move(1).white.san == "d5"
def test_parse_movetexts_nag_multiple(self): moves = '1. e4 $0 $19 e5 $19 $139 $0' movetext = parser.parse(moves, actions=Actions()).movetext assert movetext[0].move_number == 1 assert movetext[0].white.san == "e4" assert movetext[0].white.nags == ["$0", "$19"] assert movetext[0].black.san == "e5" assert movetext[0].black.nags == ["$19", "$139", "$0"]
def test_parse_game_variations_3o(self): moves = "[Site \"help\"]\n1. e4 (1. d4 d5) (1. c4 e5) (1. a4 h5) e5 1-0" parsed = parser.parse(moves, actions=Actions()) assert parsed.movetext[0].white.variations[0][0].white.san == "d4" assert parsed.movetext[0].white.variations[0][0].black.san == "d5" assert parsed.movetext[0].white.variations[1][0].white.san == "c4" assert parsed.movetext[0].white.variations[1][0].black.san == "e5" assert parsed.movetext[0].white.variations[2][0].white.san == "a4" assert parsed.movetext[0].white.variations[2][0].black.san == "h5"
def test_make_movetext_nags(self): mtt = '1. e4 $1 e5 $19 $139' mt = Actions().make_movetext(mtt, 0, 0, [make_nags_move_node(mtt, "1.", "e4", "$1", "", "e5", "$19 $139", "")]) assert mt[0].move_number == 1 assert mt[0].white.san == "e4" assert mt[0].white.nags == ["$1"] assert mt[0].black.san == "e5" assert mt[0].black.nags == ["$19", "$139"]
def test_parse_movetexts_simple_newline_mid(self): moves = '1. e4 e5 2. d4\nd5' movetext = parser.parse(moves, actions=Actions()).movetext assert movetext[0].move_number == 1 assert movetext[0].white.san == "e4" assert movetext[0].black.san == "e5" assert movetext[1].move_number == 2 assert movetext[1].white.san == "d4" assert movetext[1].black.san == "d5"
def test_make_movetext_comment(self): mtt = '1. e4 {white comment} e5 {black comment} {move comment}' mt = Actions().make_movetext(mtt, 0, 0, [make_move_node(mtt, "1.", "e4", "white comment", "e5", "black comment", "move comment")]) assert mt[0].move_number == 1 assert mt[0].white.san == "e4" assert mt[0].white.comment == "white comment" assert mt[0].black.san == "e5" assert mt[0].black.comment == "black comment" assert mt[0].comment == "move comment"
def test_parse_movetexts_comment(self): moves = '1. e4 e5 {comment 1...} 2. d4 {comment 2.} d5' movetext = parser.parse(moves, actions=Actions()).movetext assert movetext[0].move_number == 1 assert movetext[0].white.san == "e4" assert movetext[0].black.san == "e5" assert movetext[0].black.comment == "comment 1..." assert movetext[1].move_number == 2 assert movetext[1].white.san == "d4" assert movetext[1].white.comment == "comment 2." assert movetext[1].black.san == "d5"
def test_make_game_variations(self): input = '[Site "bmb.io]\n1. e4 (1. d4) e5 {white wins} 1-0' g = Actions().make_game(input, 0, 0, [{'Site': 'bmb.io'}, parser.TreeNode('\n', 0), "", [Move("1.", "e4", "", "", [[Move("1.", "d4", "", "", "", "", "", "", "", "")]], "e5", "", "white wins", [], "")], parser.TreeNode('1-0', 0)]) assert g.tag_pairs['Site'] == "bmb.io" assert g.movetext[0].white.variations[0][0].move_number == 1 assert g.movetext[0].white.variations[0][0].white.san == "d4"
def test_make_game(self): input = '[Site "bmb.io]\n1. e4 e5 {white wins} 1-0' g = Actions().make_game(input, 0, 0, [{'Site': 'bmb.io'}, parser.TreeNode('\n', 0), "", [Move("1.", "e4", "", "", [], "e5", "", "white wins", [], "")], parser.TreeNode('1-0', 0)]) assert g.tag_pairs['Site'] == "bmb.io" assert g.movetext[0].move_number == 1 assert g.movetext[0].white.san == "e4" assert g.movetext[0].black.san == "e5" assert g.movetext[0].black.comment == "white wins" assert g.score.result == "1-0"
def test_parse_movetexts_nags(self): moves = '1. e4 $0 e5 $1 $139 {comment 1...} 2. d4 $3 {comment 2.} d5 $19 $21 $139 $0' movetext = parser.parse(moves, actions=Actions()).movetext assert movetext[0].move_number == 1 assert movetext[0].white.san == "e4" assert movetext[0].white.nags == ["$0"] assert movetext[0].black.san == "e5" assert movetext[0].black.nags == ["$1", "$139"] assert movetext[0].black.comment == "comment 1..." assert movetext[1].move_number == 2 assert movetext[1].white.san == "d4" assert movetext[1].white.nags == ["$3"] assert movetext[1].white.comment == "comment 2." assert movetext[1].black.san == "d5" assert movetext[1].black.nags == ["$19", "$21", "$139", "$0"]
def test_parse_tag_pairs_space(self): tag_pairs = '[Event "Let\'s Play!"] [Site "chess.com"]' tag_pairs = parser.parse(tag_pairs, actions=Actions()).tag_pairs assert tag_pairs['Site'] == "chess.com" assert tag_pairs['Event'] == "Let\'s Play!"
def test_parse_newline_sore(self): moves = "[Site \"tst\"]\n1. Kxh2\nQxf4+ 0-1" parsed = parser.parse(moves, actions=Actions()) assert parsed.score.result == "0-1"
def test_parse_score_single_ply_unknown_black(self): moves = "[Site \"tst\"]\n1...e4 *" parsed = parser.parse(moves, actions=Actions()) assert parsed.score.result == "*"
def test_make_tag_pair(self): tp = Actions().make_tag_pair('[Event "test"]', 0, 0, make_nodes(["[", "", "Event", "", " \"", "test", "\"", "", "]"])) assert tp['Event'] == "test"
def test_make_tag_pairs(self): tp = Actions().make_tag_pairs('[Event "test"]\n[Site "bmb.io"]', 0, 0, [{'Event': 'test'}, {'Site': 'bmb.io'}]) assert tp['Event'] == "test" assert tp['Site'] == "bmb.io"
def test_get_move_too_high(self): """Given a move number retrieve that move""" input = '[Site "bmb.io"]\n{game comment} 35. e4 e5 36. d4 d5 37. c4 c5 {white wins} 1-0' g = parser.parse(input, actions=Actions()) with pytest.raises(PGNGameException): g.move(39)
def test_str_extra(self): """Given a set of tag pairs, ensure an ordered STR""" input = '[Extra "tp"]\n[Date "now"]\n[Site "bmb.io"]\n[Event "here"]\n{game comment} 1. e4 e5 {white wins} 1-0' expect = '[Event "here"]\n[Site "bmb.io"]\n[Date "now"]\n[Extra "tp"]\n\n{game comment} 1. e4 e5 {white wins} 1-0' actual = str(parser.parse(input, actions=Actions())) assert actual == expect
def test_parse_san_pawn_takes(self): moves = '1. exd5 cxd5' movetext = parser.parse(moves, actions=Actions()).movetext[0] assert movetext.move_number == 1 assert movetext.white.san == "exd5" assert movetext.black.san == "cxd5"
def test_get_move(self): """Given a move number retrieve that move""" input = '[Site "bmb.io"]\n{game comment} 35. e4 e5 36. d4 d5 37. c4 c5 {white wins} 1-0' g = parser.parse(input, actions=Actions()) assert str(g.move(35)) == "35. e4 e5"
def test_parse_san_piece_takes(self): moves = '1. Nxd5 Bxd5' movetext = parser.parse(moves, actions=Actions()).movetext[0] assert movetext.move_number == 1 assert movetext.white.san == "Nxd5" assert movetext.black.san == "Bxd5"
def test_parse_movetext_single_ply_blacksp(self): moves = '1... e5' movetext = parser.parse(moves, actions=Actions()).movetext[0] assert movetext.move_number == 1 assert movetext.white.san == "" assert movetext.black.san == "e5"
def test_parse_tag_pair_3ws(self): tag_pair = '[ Site\n"chess.com"\t]' tag_pairs = parser.parse(tag_pair, actions=Actions()).tag_pairs assert tag_pairs['Site'] == "chess.com"
def test_parse_arbitrary_space_any(self): moves = "[Site \"tst\"]\n1. Kxh2\nQxf4+ 0-1\n \n\t \n" parsed = parser.parse(moves, actions=Actions()) assert parsed.score.result == "0-1"
def test_parse_tag_pair_newline(self): tag_pair = '[Site "chess.com"]\n' tag_pairs = parser.parse(tag_pair, actions=Actions()).tag_pairs assert tag_pairs['Site'] == "chess.com"
def step_we_parse_it(context): context.pgn = parser.parse(context.pgn_str, actions=Actions())
def test_parse_movetext_simple(self): moves = '1. e4 e5' movetext = parser.parse(moves, actions=Actions()).movetext[0] assert movetext.move_number == 1 assert movetext.white.san == "e4" assert movetext.black.san == "e5"