コード例 #1
0
 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"
コード例 #2
0
 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"
コード例 #3
0
 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"
コード例 #4
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"
コード例 #5
0
 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"
コード例 #6
0
 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"]
コード例 #7
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"
コード例 #8
0
 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"]
コード例 #9
0
 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"
コード例 #10
0
 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"
コード例 #11
0
 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"
コード例 #12
0
 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"
コード例 #13
0
 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"
コード例 #14
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"]
コード例 #15
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!"
コード例 #16
0
 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"
コード例 #17
0
 def test_parse_score_single_ply_unknown_black(self):
     moves = "[Site \"tst\"]\n1...e4 *"
     parsed = parser.parse(moves, actions=Actions())
     assert parsed.score.result == "*"
コード例 #18
0
 def test_make_tag_pair(self):
     tp = Actions().make_tag_pair('[Event "test"]', 0, 0, make_nodes(["[", "", "Event", "", " \"", "test", "\"", "", "]"]))
     assert tp['Event'] == "test"
コード例 #19
0
 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"
コード例 #20
0
 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)
コード例 #21
0
 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
コード例 #22
0
 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"
コード例 #23
0
 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"
コード例 #24
0
 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"
コード例 #25
0
 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"
コード例 #26
0
 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"
コード例 #27
0
 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"
コード例 #28
0
 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"
コード例 #29
0
def step_we_parse_it(context):
    context.pgn = parser.parse(context.pgn_str, actions=Actions())
コード例 #30
0
 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"