3 require 'helpers/validation_helper'
5 class TestShogiValidation < Test::Unit::TestCase
6 include ValidationHelper
9 @game = Game.get(:shogi)
10 @state = @game.state.new
13 @validate = @game.validator.new(@state)
18 assert_not_valid 32, 3, 3, 1
19 assert_not_valid 3, 1, 32, 3
20 assert_not_valid 4, 7, 4, 7
23 def test_black_pawn_push
24 assert_valid 4, 6, 4, 5
27 def test_white_pawn_push
29 assert_valid 4, 2, 4, 3
32 def test_invalid_black_push
33 assert_not_valid 4, 6, 4, 4
34 assert_not_valid 4, 6, 4, 3
39 @board[Point.new(3, 5)] = @board[Point.new(3, 2)]
40 assert_valid 3, 6, 3, 5
43 def test_invalid_chesslike_capture
44 @board[Point.new(3, 5)] = @board[Point.new(3, 2)]
45 assert_not_valid 4, 6, 3, 5
49 @board[Point.new(0, 6)] = nil
50 @board[Point.new(1, 7)] = nil
51 @board[Point.new(1, 8)] = nil
53 assert_valid 0, 8, 0, 4
54 assert_valid 0, 8, 0, 2
55 assert_not_valid 0, 8, 0, 1
56 assert_not_valid 0, 8, 0, 0
58 assert_not_valid 0, 8, 1, 8
59 assert_not_valid 0, 8, 1, 7
63 @board[Point.new(0, 6)] = nil
65 assert_valid 1, 8, 0, 6
66 assert_not_valid 1, 8, 2, 6
67 assert_not_valid 1, 8, 3, 7
69 @board[Point.new(0, 6)] = @game.piece.new(:white, :bishop)
71 assert_valid 1, 8, 0, 6
74 def test_white_silver_move
75 @board[Point.new(4, 4)] = @game.piece.new(:white, :silver)
78 assert_valid 4, 4, 5, 3
79 assert_valid 4, 4, 3, 3
80 assert_valid 4, 4, 3, 5
81 assert_valid 4, 4, 4, 5
82 assert_valid 4, 4, 5, 5
84 assert_not_valid 4, 4, 4, 3
85 assert_not_valid 4, 4, 3, 4
86 assert_not_valid 4, 4, 5, 4
88 @board[Point.new(5, 3)] = @game.piece.new(:black, :rook)
89 assert_valid 4, 4, 5, 3
93 @board[Point.new(4, 4)] = @game.piece.new(:black, :silver)
94 assert_valid 4, 4, 5, 5
95 assert_valid 4, 4, 3, 5
96 assert_valid 4, 4, 3, 3
97 assert_valid 4, 4, 4, 3
98 assert_valid 4, 4, 5, 3
100 assert_not_valid 4, 4, 4, 5
101 assert_not_valid 4, 4, 3, 4
102 assert_not_valid 4, 4, 5, 4
103 assert_not_valid 4, 4, 2, 3
105 @board[Point.new(3, 5)] = @game.piece.new(:white, :rook)
106 assert_valid 4, 4, 3, 5
110 @board[Point.new(4, 4)] = @game.piece.new(:black, :gold)
112 assert_valid 4, 4, 4, 5
113 assert_valid 4, 4, 3, 4
114 assert_valid 4, 4, 5, 4
115 assert_valid 4, 4, 3, 3
116 assert_valid 4, 4, 4, 3
117 assert_valid 4, 4, 5, 3
119 assert_not_valid 4, 4, 5, 5
120 assert_not_valid 4, 4, 3, 5
121 assert_not_valid 4, 4, 2, 3
123 @board[Point.new(4, 5)] = @game.piece.new(:white, :rook)
124 assert_valid 4, 4, 4, 5
127 def test_white_gold_move
128 @board[Point.new(4, 4)] = @game.piece.new(:white, :gold)
131 assert_valid 4, 4, 4, 3
132 assert_valid 4, 4, 3, 4
133 assert_valid 4, 4, 5, 4
134 assert_valid 4, 4, 3, 5
135 assert_valid 4, 4, 4, 5
136 assert_valid 4, 4, 5, 5
138 assert_not_valid 4, 4, 5, 3
139 assert_not_valid 4, 4, 3, 3
141 @board[Point.new(4, 3)] = @game.piece.new(:black, :rook)
142 assert_valid 4, 4, 4, 3
146 @board[Point.new(4, 4)] = @game.piece.new(:black, :king)
148 assert_valid 4, 4, 5, 4
149 assert_valid 4, 4, 5, 5
150 assert_valid 4, 4, 4, 5
151 assert_valid 4, 4, 3, 5
153 assert_not_valid 4, 4, 3, 6
154 assert_not_valid 4, 4, 2, 2
155 assert_not_valid 4, 4, 4, 4
164 assert_not_valid 7, 1, 8, 1
165 assert_valid 7, 1, 8, 0
169 assert_valid 7, 7, 3, 7
174 assert_not_valid 7, 7, 6, 6
177 def test_illegal_move
178 @board[Point.new(4, 6)] = @game.piece.new(:white, :pawn)
179 assert_valid 4, 8, 5, 7
180 assert_valid 4, 8, 3, 7
181 assert_not_valid 4, 8, 4, 7
184 def test_drop_with_empty_pool
185 assert_not_valid @state.move_factory.drop(
186 @state.piece_factory.new(:black, :rook),
191 piece = @state.piece_factory.new(:black, :rook)
192 @state.pool(:black).add(@state.piece_factory.new(:black, :rook))
193 assert_valid @state.move_factory.drop(piece, Point.new(4, 4))
195 @state.board[Point.new(4, 4)] = @state.piece_factory.new(:white, :gold)
196 assert_not_valid @state.move_factory.drop(piece, Point.new(4, 4))
198 @state.board[Point.new(4, 4)] = @state.piece_factory.new(:black, :silver)
199 assert_not_valid @state.move_factory.drop(piece, Point.new(4, 4))
202 def test_double_pawn_drop
203 piece = @state.piece_factory.new(:black, :pawn)
204 @state.pool(:black).add(piece)
205 assert_not_valid @state.move_factory.drop(piece, Point.new(4, 4))
206 @state.board[Point.new(4, 6)] = nil
207 assert_valid @state.move_factory.drop(piece, Point.new(4, 4))
210 def test_last_row_pawn_drop
211 piece1 = @state.piece_factory.new(:black, :pawn)
212 piece2 = @state.piece_factory.new(:black, :horse)
213 @state.pool(:black).add(piece1)
214 @state.pool(:black).add(piece2)
216 @state.board[Point.new(2, 6)] = nil
217 @state.board[Point.new(2, 0)] = nil
218 @state.board[Point.new(2, 1)] = nil
219 @state.board[Point.new(2, 2)] = nil
221 assert_not_valid @state.move_factory.drop(piece1, Point.new(2, 0))
222 assert_valid @state.move_factory.drop(piece1, Point.new(2, 1))
223 assert_not_valid @state.move_factory.drop(piece2, Point.new(2, 0))
224 assert_not_valid @state.move_factory.drop(piece2, Point.new(2, 1))
225 assert_valid @state.move_factory.drop(piece2, Point.new(2, 2))
228 def test_promotion_on_enter
229 @state.board[Point.new(2, 6)] = nil
230 @state.board[Point.new(2, 3)] = @game.piece.new(:black, :pawn)
232 assert_valid 2, 3, 2, 2, :promote => true
233 assert_valid 2, 3, 2, 2, :promote => false
235 @state.board[Point.new(2, 3)] = nil
236 @state.board[Point.new(2, 4)] = @game.piece.new(:black, :pawn)
238 assert_valid 2, 4, 2, 3
239 assert_valid 2, 4, 2, 3, :promote => false
240 assert_not_valid 2, 4, 2, 3, :promote => true
243 def test_horse_promotion
244 @state.board[Point.new(6, 3)] = @game.piece.new(:black, :horse)
246 assert_valid 6, 3, 7, 1, :promote => true
249 def test_promotion_on_exit
250 @state.board[Point.new(0, 2)] = @game.piece.new(:black, :rook)
252 assert_valid 0, 2, 0, 4, :promote => true
253 assert_valid 0, 2, 0, 4, :promote => false
256 def test_promotion_on_move_inside
257 @state.board[Point.new(0, 2)] = @game.piece.new(:black, :rook)
259 assert_valid 0, 2, 1, 2, :promote => true
260 assert_valid 0, 2, 1, 2, :promote => false
263 def test_mandatory_promotion
264 @state.board[Point.new(0, 6)] = nil
265 @state.board[Point.new(0, 1)] = @game.piece.new(:black, :pawn)
267 assert_valid 0, 1, 0, 0, :promote => true
268 assert_not_valid 0, 1, 0, 0, :promote => false
271 @state.board[Point.new(0, 2)] = @game.piece.new(:black, :horse)
273 assert_valid 0, 2, 1, 0, :promote => true
274 assert_not_valid 0, 2, 1, 0, :promote => false
276 @state.board[Point.new(0, 2)] = nil
277 @state.board[Point.new(0, 3)] = @game.piece.new(:black, :horse)
279 assert_valid 0, 3, 1, 1, :promote => true
280 assert_not_valid 0, 3, 1, 1, :promote => false
283 def test_promote_twice
284 @state.board[Point.new(2, 3)] = @game.piece.new(:black, :promoted_lance)
286 # assert_not_valid 2, 3, 2, 2, :promote => true
287 assert_valid 2, 3, 2, 2, :promote => false