require 'test_helper'

class UCICastrlingTest < Minitest::Test
  def test_uci_white_short_castling
    game = Chess::Game.new
    game.moves = %w[e4 c5 c3 d5 exd5 Qxd5 d4 Nf6 Nf3 e6 Be2 Be7 e1h1 Nc6]

    assert_equal '*', game.result
  end

  def test_uci_white_long_castling
    game = Chess::Game.new
    game.moves = %w[e4 c5 Nf3 Nc6 d4 cxd4 Nxd4 Nf6 Nc3 d6 Bg5 Qb6 Nb3 e6 Qd2 Be7 e1a1]

    assert_equal '*', game.result
  end

  def test_uci_black_short_castling
    game = Chess::Game.new
    game.moves = %w[d4 d5 c4 dxc4 e4 e5 Nf3 Bb4+ Nc3 exd4 Nxd4 Ne7 Bf4 Bxc3+ bxc3 Ng6 Bg3 Qe7 Bxc4 Qxe4+ Qe2 Qxe2+ Bxe2 Na6 Rb1 e8h8]

    assert_equal '*', game.result
  end

  def test_uci_black_long_castling
    game = Chess::Game.new
    game.moves = %w[e4 c5 Nf3 d6 d4 cxd4 Qxd4 Nc6 Bb5 Bd7 Bxc6 Bxc6 Bg5 Nf6 Bxf6 gxf6 Nc3 e6 e1c1 Be7 Rhe1 Rg8 Qe3 Rxg2 Rg1 Rg6 Nd4 Qb6 h4 e8a8]

    assert_equal '*', game.result
  end

  def test_uci_invalid_white_long_castling
    game = Chess::Game.new
    assert_raises(Chess::IllegalMoveError) do
      game.moves = %w[e4 c5 Nf3 Nc6 d4 cxd4 Nxd4 Nf6 Nc3 d6 Bg5 Qb6 Nb3 e6 Qd2 Be7 e8a8]
    end
  end

  def test_github_issue31
    g = Chess::Game.load_fen('4Q3/8/8/8/8/8/4K3/7k w - - 0 1')

    assert_equal 'Q', g.board['e8']
    assert_equal 'K', g.board['e2']
    assert_equal 'k', g.board['h1']
    assert_equal '*', g.result
    assert_equal :in_progress, g.status

    g << 'e8a8' # It should not be considered as a UCI casting

    assert_equal 'Q', g.board['a8']
  end
end
