3 require 'helpers/validation_helper'
5 class TestChessSerializer < Test::Unit::TestCase
6 include ValidationHelper
9 @game = Game.get(:chess)
10 @simple = @game.serializer.new(:simple)
11 @san = @game.serializer.new(:compact)
12 @dec = @game.serializer.new(:decorated)
13 @state = @game.state.new
14 @validate = @game.validator.new(@state)
17 def test_simple_serialization
19 assert_equal 'e2e4', serialize(@simple, 4, 6, 4, 4)
20 @state.board[Point.new(6, 1)] = @game.piece.new(:white, :pawn)
21 assert_equal 'g7h8=R', serialize(@simple,
22 @game.move.new(Point.new(6, 1), Point.new(7, 0), :promotion => :rook))
25 def test_san_serialization_pawn
27 assert_equal 'e4', serialize(@san, 4, 6, 4, 4)
30 assert_equal 'e5', serialize(@san, 4, 1, 4, 3)
33 @state.board[Point.new(3, 5)] = @game.piece.new(:black, :rook)
34 assert_equal 'exd3', serialize(@san, 4, 6, 3, 5)
37 def test_san_serialization_rook
39 @state.board[Point.new(7, 6)] = nil
40 assert_equal 'Rh5', serialize(@san, 7, 7, 7, 3)
41 assert_equal 'Rxh7', serialize(@san, 7, 7, 7, 1)
44 def test_san_serialization_ambiguous
45 @state.board[Point.new(0, 0)] = @game.piece.new(:white, :rook)
46 @state.board[Point.new(7, 0)] = @game.piece.new(:white, :rook)
47 @state.board[Point.new(0, 7)] = @game.piece.new(:white, :rook)
48 @state.board[Point.new(7, 7)] = @game.piece.new(:white, :king)
49 @state.board[Point.new(5, 5)] = @game.piece.new(:black, :king)
51 assert_equal 'Rab8', serialize(@san, 0, 0, 1, 0)
52 assert_equal 'R8a7', serialize(@san, 0, 0, 0, 1)
54 @state.board[Point.new(1, 0)] = @game.piece.new(:black, :bishop)
56 assert_equal 'Raxb8', serialize(@san, 0, 0, 1, 0)
61 assert_deserialize('e4', 4, 6, 4, 4)
64 assert_deserialize('e5', 4, 1, 4, 3)
67 def test_deserialize_promotion
69 @state.board[Point.new(6, 1)] = @game.piece.new(:white, :pawn)
71 assert_deserialize('gxh8=B', 6, 1, 7, 0, :promotion => :bishop)
74 def test_deserialize_castling_king
76 @state.board[Point.new(5, 7)] = nil
77 @state.board[Point.new(6, 7)] = nil
79 assert_deserialize('0-0', 4, 7, 6, 7)
82 def test_deserialize_castling_queen
84 @state.board[Point.new(3, 7)] = nil
85 @state.board[Point.new(2, 7)] = nil
86 @state.board[Point.new(1, 7)] = nil
88 assert_deserialize('0-0-0', 4, 7, 2, 7)
93 def serialize(serializer, *args)
94 move = unpack_move(*args)
95 serializer.serialize(move, @state)
98 def assert_deserialize(san, a, b, c, d, opts = {})
99 move = unpack_move(a, b, c, d)
100 move.promotion = opts[:promotion]
101 @game.validator.new(@state)[move]
102 move2 = @san.deserialize(san, @state)
103 assert_equal move, move2