chessmate 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/chessmate.rb +226 -0
- data/lib/helpers/notation_parser.rb +24 -0
- data/lib/pieces/bishop.rb +12 -0
- data/lib/pieces/king.rb +9 -0
- data/lib/pieces/knight.rb +12 -0
- data/lib/pieces/pawn.rb +34 -0
- data/lib/pieces/piece.rb +76 -0
- data/lib/pieces/queen.rb +17 -0
- data/lib/pieces/rook.rb +16 -0
- data/rspec.txt +88826 -0
- data/spec/chessmate_spec.rb +975 -0
- data/spec/notation_parser_spec.rb +44 -0
- data/spec/piece_spec.rb +96 -0
- data/spec/spec_helper.rb +101 -0
- metadata +33 -5
@@ -0,0 +1,975 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../lib/chessmate'
|
3
|
+
require_relative '../lib/helpers/notation_parser'
|
4
|
+
Dir["../lib/pieces/*.rb"].each {|file| require file}
|
5
|
+
|
6
|
+
describe ChessMate do
|
7
|
+
|
8
|
+
describe "board method" do
|
9
|
+
before :each do
|
10
|
+
@chess = ChessMate.new
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return the board state" do
|
14
|
+
expect(@chess.board).to eql(
|
15
|
+
[
|
16
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
17
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
18
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
19
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
20
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
21
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
22
|
+
['WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP'],
|
23
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
24
|
+
]
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "update method" do
|
30
|
+
before :each do
|
31
|
+
@chess = ChessMate.new
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should update the board after moving" do
|
35
|
+
@chess.update([6,0], [5,0])
|
36
|
+
expect(@chess.board).to eql(
|
37
|
+
[
|
38
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
39
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
40
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
41
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
42
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
43
|
+
['WP', nil, nil, nil, nil, nil, nil, nil],
|
44
|
+
[nil, 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP'],
|
45
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
46
|
+
]
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should update the turn on a successful update" do
|
51
|
+
turn = @chess.turn
|
52
|
+
@chess.update([6,0], [5,0])
|
53
|
+
expect(@chess.turn).to eql(turn + 1)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "turn method" do
|
58
|
+
it "should show the current turn" do
|
59
|
+
chess = ChessMate.new
|
60
|
+
expect(chess.turn).to eql(1)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "in_check method" do
|
65
|
+
it "should return a hash of values values on game start" do
|
66
|
+
chess = ChessMate.new
|
67
|
+
expect(chess.in_check).to eql(
|
68
|
+
{
|
69
|
+
"white": false,
|
70
|
+
"black": false
|
71
|
+
}
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "in_check? method" do
|
77
|
+
it "should return a hash value" do
|
78
|
+
chess = ChessMate.new
|
79
|
+
check = chess.in_check?
|
80
|
+
expect(check.is_a? Hash).to eql(true)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should handle a malformed board by returning default value" do
|
84
|
+
board = Array.new(8) { Array.new(8,nil) }
|
85
|
+
chess = ChessMate.new(board)
|
86
|
+
expect(chess.in_check?).to eql(
|
87
|
+
{
|
88
|
+
"white": false,
|
89
|
+
"black": false
|
90
|
+
}
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should should return false if neither king is in check" do
|
95
|
+
chess = ChessMate.new
|
96
|
+
expect(chess.in_check?).to eql(
|
97
|
+
{
|
98
|
+
"white": false,
|
99
|
+
"black": false
|
100
|
+
}
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should return true if the white king is in check" do
|
105
|
+
board = Array.new(8) { Array.new(8,nil) }
|
106
|
+
board[7][4] = "WK"
|
107
|
+
board[0][4] = "BQ"
|
108
|
+
board[0][5] = "BK"
|
109
|
+
chess = ChessMate.new(board)
|
110
|
+
expect(chess.in_check?).to eql(
|
111
|
+
{
|
112
|
+
"white": true,
|
113
|
+
"black": false
|
114
|
+
}
|
115
|
+
)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should return true if the black king is in check" do
|
119
|
+
board = Array.new(8) { Array.new(8,nil) }
|
120
|
+
board[7][4] = "WK"
|
121
|
+
board[7][5] = "WQ"
|
122
|
+
board[0][5] = "BK"
|
123
|
+
chess = ChessMate.new(board)
|
124
|
+
expect(chess.in_check?).to eql(
|
125
|
+
{
|
126
|
+
"white": false,
|
127
|
+
"black": true
|
128
|
+
}
|
129
|
+
)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should not update the board to test for king in check" do
|
133
|
+
chess = ChessMate.new
|
134
|
+
chess.in_check?
|
135
|
+
expect(chess.board).to eql(
|
136
|
+
[
|
137
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
138
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
139
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
140
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
141
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
142
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
143
|
+
['WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP'],
|
144
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
145
|
+
]
|
146
|
+
)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe "move method" do
|
151
|
+
before :each do
|
152
|
+
@chess = ChessMate.new
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should test that the king is not in check before moving" do
|
156
|
+
board = Array.new(8) { Array.new(8,nil) }
|
157
|
+
board[7][4] = "WK"
|
158
|
+
board[6][0] = "WP"
|
159
|
+
board[0][4] = "BK"
|
160
|
+
board[1][4] = "BQ"
|
161
|
+
chess = ChessMate.new(board)
|
162
|
+
chess.move('a2', 'a3')
|
163
|
+
expect(chess.in_check?).to eql(
|
164
|
+
{
|
165
|
+
"white": true,
|
166
|
+
"black": false
|
167
|
+
}
|
168
|
+
)
|
169
|
+
expect(chess.board).to eql(
|
170
|
+
[
|
171
|
+
[nil, nil, nil, nil, "BK", nil, nil, nil],
|
172
|
+
[nil, nil, nil, nil, "BQ", nil, nil, nil],
|
173
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
174
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
175
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
176
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
177
|
+
["WP", nil, nil, nil, nil, nil, nil, nil],
|
178
|
+
[nil, nil, nil, nil, "WK", nil, nil, nil],
|
179
|
+
]
|
180
|
+
)
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should not let players move into check" do
|
184
|
+
board = Array.new(8) { Array.new(8,nil) }
|
185
|
+
board[7][4] = "WK"
|
186
|
+
board[0][4] = "BK"
|
187
|
+
board[0][3] = "BQ"
|
188
|
+
chess = ChessMate.new(board)
|
189
|
+
chess.move('e1', 'd1')
|
190
|
+
expect(chess.board).to eql(
|
191
|
+
[
|
192
|
+
[nil, nil, nil, "BQ", "BK", nil, nil, nil],
|
193
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
194
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
195
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
196
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
197
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
198
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
199
|
+
[nil, nil, nil, nil, "WK", nil, nil, nil],
|
200
|
+
]
|
201
|
+
)
|
202
|
+
end
|
203
|
+
|
204
|
+
it "should let players move out of check" do
|
205
|
+
board = Array.new(8) { Array.new(8,nil) }
|
206
|
+
board[7][3] = "WK"
|
207
|
+
board[0][4] = "BK"
|
208
|
+
board[0][3] = "BQ"
|
209
|
+
chess = ChessMate.new(board)
|
210
|
+
chess.move('d1', 'e1')
|
211
|
+
expect(chess.board).to eql(
|
212
|
+
[
|
213
|
+
[nil, nil, nil, "BQ", "BK", nil, nil, nil],
|
214
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
215
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
216
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
217
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
218
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
219
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
220
|
+
[nil, nil, nil, nil, "WK", nil, nil, nil],
|
221
|
+
]
|
222
|
+
)
|
223
|
+
end
|
224
|
+
|
225
|
+
it "should return false if the move is not within the bounds of the board" do
|
226
|
+
expect(@chess.move('z2', 'c3')).to eql(false)
|
227
|
+
expect(@chess.board).to eql(
|
228
|
+
[
|
229
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
230
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
231
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
232
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
233
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
234
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
235
|
+
['WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP'],
|
236
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
237
|
+
]
|
238
|
+
)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "should return false if the origin or destination are malformed" do
|
242
|
+
expect(@chess.move('22', 'c3')).to eql(false)
|
243
|
+
expect(@chess.move('zz', 'c3')).to eql(false)
|
244
|
+
end
|
245
|
+
|
246
|
+
it "should generally return false and not update the board if the path is blocked" do
|
247
|
+
expect(@chess.move('d1', 'a1')).to eql(false)
|
248
|
+
expect(@chess.move('d1', 'd8')).to eql(false)
|
249
|
+
expect(@chess.move('d1', 'b3')).to eql(false)
|
250
|
+
expect(@chess.board).to eql(
|
251
|
+
[
|
252
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
253
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
254
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
255
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
256
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
257
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
258
|
+
['WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP'],
|
259
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
260
|
+
]
|
261
|
+
)
|
262
|
+
end
|
263
|
+
|
264
|
+
context "for pawns" do
|
265
|
+
it "should update the board if pawn move is valid" do
|
266
|
+
@chess.move('c2', 'c3')
|
267
|
+
expect(@chess.board).to eql(
|
268
|
+
[
|
269
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
270
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
271
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
272
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
273
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
274
|
+
[nil, nil, 'WP', nil, nil, nil, nil, nil],
|
275
|
+
['WP', 'WP', nil, 'WP', 'WP', 'WP', 'WP', 'WP'],
|
276
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
277
|
+
]
|
278
|
+
)
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should return false if the pawn move is invalid" do
|
282
|
+
expect(@chess.move('c2', 'd3')).to eql(false)
|
283
|
+
end
|
284
|
+
|
285
|
+
it "should update the board if pawn's first move is 2 squares" do
|
286
|
+
chess = ChessMate.new
|
287
|
+
chess.move('c2', 'c4')
|
288
|
+
expect(chess.board).to eql(
|
289
|
+
[
|
290
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
291
|
+
['BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
292
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
293
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
294
|
+
[nil, nil, "WP", nil, nil, nil, nil, nil],
|
295
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
296
|
+
['WP', 'WP', nil, 'WP', 'WP', 'WP', 'WP', 'WP'],
|
297
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
298
|
+
]
|
299
|
+
)
|
300
|
+
chess = ChessMate.new
|
301
|
+
chess.move('b7', 'b5')
|
302
|
+
expect(chess.board).to eql(
|
303
|
+
[
|
304
|
+
['BR', 'BN', 'BB', 'BQ', 'BK', 'BB', 'BN', 'BR'],
|
305
|
+
['BP', nil, 'BP', 'BP', 'BP', 'BP', 'BP', 'BP'],
|
306
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
307
|
+
[nil, 'BP', nil, nil, nil, nil, nil, nil],
|
308
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
309
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
310
|
+
['WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP'],
|
311
|
+
['WR', 'WN', 'WB', 'WQ', 'WK', 'WB', 'WN', 'WR']
|
312
|
+
]
|
313
|
+
)
|
314
|
+
end
|
315
|
+
|
316
|
+
it "should not allow a pawn to move 2 spaces if the 1st space is occupied" do
|
317
|
+
board = Array.new(8) { Array.new(8,nil) }
|
318
|
+
board[6][0] = "WP"
|
319
|
+
board[5][0] = "BP"
|
320
|
+
chess = ChessMate.new(board)
|
321
|
+
chess.move('a2', 'a4')
|
322
|
+
expect(chess.board).to eql(
|
323
|
+
[
|
324
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
325
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
326
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
327
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
328
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
329
|
+
['BP', nil, nil, nil, nil, nil, nil, nil],
|
330
|
+
['WP', nil, nil, nil, nil, nil, nil, nil],
|
331
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
332
|
+
]
|
333
|
+
)
|
334
|
+
end
|
335
|
+
|
336
|
+
it "should allow for capturing diagonally" do
|
337
|
+
board = Array.new(8) { Array.new(8,nil) }
|
338
|
+
board[5][5] = "WP"
|
339
|
+
board[4][4] = "BP"
|
340
|
+
chess = ChessMate.new(board)
|
341
|
+
chess.move('f3', 'e4')
|
342
|
+
expect(chess.board).to eql(
|
343
|
+
[
|
344
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
345
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
346
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
347
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
348
|
+
[nil, nil, nil, nil, 'WP', nil, nil, nil],
|
349
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
350
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
351
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
352
|
+
]
|
353
|
+
)
|
354
|
+
end
|
355
|
+
|
356
|
+
it "should not allow pawns to move backwards to capture" do
|
357
|
+
board = Array.new(8) { Array.new(8,nil) }
|
358
|
+
board[4][4] = "WP"
|
359
|
+
board[5][5] = "BP"
|
360
|
+
chess = ChessMate.new(board)
|
361
|
+
chess.move('e4', 'f3')
|
362
|
+
expect(chess.board).to eql(
|
363
|
+
[
|
364
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
365
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
366
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
367
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
368
|
+
[nil, nil, nil, nil, 'WP', nil, nil, nil],
|
369
|
+
[nil, nil, nil, nil, nil, 'BP', nil, nil],
|
370
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
371
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
372
|
+
]
|
373
|
+
)
|
374
|
+
end
|
375
|
+
|
376
|
+
it "should not allow pawns to capture pieces of same color" do
|
377
|
+
board = Array.new(8) { Array.new(8,nil) }
|
378
|
+
board[4][4] = "WP"
|
379
|
+
board[5][5] = "WP"
|
380
|
+
chess = ChessMate.new(board)
|
381
|
+
chess.move('f3', 'e4')
|
382
|
+
expect(chess.board).to eql(
|
383
|
+
[
|
384
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
385
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
386
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
387
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
388
|
+
[nil, nil, nil, nil, 'WP', nil, nil, nil],
|
389
|
+
[nil, nil, nil, nil, nil, 'WP', nil, nil],
|
390
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
391
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
392
|
+
]
|
393
|
+
)
|
394
|
+
end
|
395
|
+
|
396
|
+
it "should not allow pawns to move backwards in general" do
|
397
|
+
board = Array.new(8) { Array.new(8,nil) }
|
398
|
+
board[4][4] = "WP"
|
399
|
+
board[5][5] = "BP"
|
400
|
+
chess = ChessMate.new(board)
|
401
|
+
chess.move('e4', 'e3')
|
402
|
+
expect(chess.board).to eql(
|
403
|
+
[
|
404
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
405
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
406
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
407
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
408
|
+
[nil, nil, nil, nil, 'WP', nil, nil, nil],
|
409
|
+
[nil, nil, nil, nil, nil, 'BP', nil, nil],
|
410
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
411
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
412
|
+
]
|
413
|
+
)
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
context "for rooks" do
|
418
|
+
it "should update the board if rook moves vertically" do
|
419
|
+
board = Array.new(8) { Array.new(8,nil) }
|
420
|
+
board[7][0] = "WR"
|
421
|
+
chess = ChessMate.new(board)
|
422
|
+
chess.move('a1', 'a8')
|
423
|
+
expect(chess.board).to eql(
|
424
|
+
[
|
425
|
+
["WR", nil, nil, nil, nil, nil, nil, nil],
|
426
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
427
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
428
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
429
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
430
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
431
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
432
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
433
|
+
]
|
434
|
+
)
|
435
|
+
end
|
436
|
+
|
437
|
+
it "should update the board if the rook moves horizontally" do
|
438
|
+
board = Array.new(8) { Array.new(8,nil) }
|
439
|
+
board[7][0] = "WR"
|
440
|
+
chess = ChessMate.new(board)
|
441
|
+
chess.move('a1', 'h1')
|
442
|
+
expect(chess.board).to eql(
|
443
|
+
[
|
444
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
445
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
446
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
447
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
448
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
449
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
450
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
451
|
+
[nil, nil, nil, nil, nil, nil, nil, "WR"],
|
452
|
+
]
|
453
|
+
)
|
454
|
+
end
|
455
|
+
|
456
|
+
it "should return false for a move that is neither horizontal or vertical" do
|
457
|
+
board = Array.new(8) { Array.new(8,nil) }
|
458
|
+
board[7][0] = "WR"
|
459
|
+
chess = ChessMate.new(board)
|
460
|
+
expect(chess.move('a1','g8')).to eql(false)
|
461
|
+
end
|
462
|
+
|
463
|
+
it "should allow capturing pieces of opposite color" do
|
464
|
+
board = Array.new(8) { Array.new(8,nil) }
|
465
|
+
board[7][0] = "WR"
|
466
|
+
board[7][7] = "BR"
|
467
|
+
chess = ChessMate.new(board)
|
468
|
+
chess.move('a1', 'h1')
|
469
|
+
expect(chess.board).to eql(
|
470
|
+
[
|
471
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
472
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
473
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
474
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
475
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
476
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
477
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
478
|
+
[nil, nil, nil, nil, nil, nil, nil, "WR"],
|
479
|
+
]
|
480
|
+
)
|
481
|
+
end
|
482
|
+
|
483
|
+
it "should not allow capturing pieces of same color" do
|
484
|
+
board = Array.new(8) { Array.new(8,nil) }
|
485
|
+
board[7][0] = "WR"
|
486
|
+
board[7][7] = "WR"
|
487
|
+
chess = ChessMate.new(board)
|
488
|
+
chess.move('a1', 'h1')
|
489
|
+
expect(chess.board).to eql(
|
490
|
+
[
|
491
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
492
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
493
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
494
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
495
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
496
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
497
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
498
|
+
["WR", nil, nil, nil, nil, nil, nil, "WR"],
|
499
|
+
]
|
500
|
+
)
|
501
|
+
end
|
502
|
+
end
|
503
|
+
|
504
|
+
context "for bishops" do
|
505
|
+
it "should update the board if the bishop moves diagonally" do
|
506
|
+
board = Array.new(8) { Array.new(8,nil) }
|
507
|
+
board[7][2] = "WB"
|
508
|
+
chess = ChessMate.new(board)
|
509
|
+
chess.move('c1', 'h6')
|
510
|
+
expect(chess.board).to eql(
|
511
|
+
[
|
512
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
513
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
514
|
+
[nil, nil, nil, nil, nil, nil, nil, 'WB'],
|
515
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
516
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
517
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
518
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
519
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
520
|
+
]
|
521
|
+
)
|
522
|
+
end
|
523
|
+
|
524
|
+
it "should return false for a move that is not diagonal" do
|
525
|
+
board = Array.new(8) { Array.new(8,nil) }
|
526
|
+
board[7][2] = "WB"
|
527
|
+
chess = ChessMate.new(board)
|
528
|
+
expect(chess.move('c1','c8')).to eql(false)
|
529
|
+
expect(chess.move('c1','h7')).to eql(false)
|
530
|
+
expect(chess.move('c1','h8')).to eql(false)
|
531
|
+
|
532
|
+
end
|
533
|
+
|
534
|
+
it "should allow capturing pieces of opposite color" do
|
535
|
+
board = Array.new(8) { Array.new(8,nil) }
|
536
|
+
board[7][2] = "WB"
|
537
|
+
board[2][7] = "BB"
|
538
|
+
chess = ChessMate.new(board)
|
539
|
+
chess.move('c1', 'h6')
|
540
|
+
expect(chess.board).to eql(
|
541
|
+
[
|
542
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
543
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
544
|
+
[nil, nil, nil, nil, nil, nil, nil, 'WB'],
|
545
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
546
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
547
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
548
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
549
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
550
|
+
]
|
551
|
+
)
|
552
|
+
end
|
553
|
+
|
554
|
+
it "should not allow capturing pieces of same color" do
|
555
|
+
board = Array.new(8) { Array.new(8,nil) }
|
556
|
+
board[7][2] = "WB"
|
557
|
+
board[2][7] = "WB"
|
558
|
+
chess = ChessMate.new(board)
|
559
|
+
chess.move('c1', 'h6')
|
560
|
+
expect(chess.board).to eql(
|
561
|
+
[
|
562
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
563
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
564
|
+
[nil, nil, nil, nil, nil, nil, nil, 'WB'],
|
565
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
566
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
567
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
568
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
569
|
+
[nil, nil, "WB", nil, nil, nil, nil, nil],
|
570
|
+
]
|
571
|
+
)
|
572
|
+
end
|
573
|
+
end
|
574
|
+
|
575
|
+
context "for knights" do
|
576
|
+
it "should update the board if the knight moves 2 horizontal, 1 vertical" do
|
577
|
+
board = Array.new(8) { Array.new(8,nil) }
|
578
|
+
board[7][2] = "WN"
|
579
|
+
chess = ChessMate.new(board)
|
580
|
+
chess.move('c1', 'e2')
|
581
|
+
expect(chess.board).to eql(
|
582
|
+
[
|
583
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
584
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
585
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
586
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
587
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
588
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
589
|
+
[nil, nil, nil, nil, 'WN', nil, nil, nil],
|
590
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
591
|
+
]
|
592
|
+
)
|
593
|
+
end
|
594
|
+
|
595
|
+
it "should update the board if the knight moves 1 horizontal, 2 vertical" do
|
596
|
+
board = Array.new(8) { Array.new(8,nil) }
|
597
|
+
board[7][2] = "WN"
|
598
|
+
chess = ChessMate.new(board)
|
599
|
+
chess.move('c1', 'd3')
|
600
|
+
expect(chess.board).to eql(
|
601
|
+
[
|
602
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
603
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
604
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
605
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
606
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
607
|
+
[nil, nil, nil, 'WN', nil, nil, nil, nil],
|
608
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
609
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
610
|
+
]
|
611
|
+
)
|
612
|
+
end
|
613
|
+
|
614
|
+
it "should return false if the move is invalid" do
|
615
|
+
board = Array.new(8) { Array.new(8,nil) }
|
616
|
+
board[7][2] = "WN"
|
617
|
+
chess = ChessMate.new(board)
|
618
|
+
expect(chess.move('c1','c8')).to eql(false)
|
619
|
+
end
|
620
|
+
|
621
|
+
it "should allow capturing pieces of opposite color" do
|
622
|
+
board = Array.new(8) { Array.new(8,nil) }
|
623
|
+
board[7][2] = "WN"
|
624
|
+
board[5][3] = "BN"
|
625
|
+
chess = ChessMate.new(board)
|
626
|
+
chess.move('c1', 'd3')
|
627
|
+
expect(chess.board).to eql(
|
628
|
+
[
|
629
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
630
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
631
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
632
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
633
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
634
|
+
[nil, nil, nil, 'WN', nil, nil, nil, nil],
|
635
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
636
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
637
|
+
]
|
638
|
+
)
|
639
|
+
end
|
640
|
+
|
641
|
+
it "should not allow capturing pieces of same color" do
|
642
|
+
board = Array.new(8) { Array.new(8,nil) }
|
643
|
+
board[7][2] = "WN"
|
644
|
+
board[5][3] = "WN"
|
645
|
+
chess = ChessMate.new(board)
|
646
|
+
chess.move('c1', 'd3')
|
647
|
+
expect(chess.board).to eql(
|
648
|
+
[
|
649
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
650
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
651
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
652
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
653
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
654
|
+
[nil, nil, nil, 'WN', nil, nil, nil, nil],
|
655
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
656
|
+
[nil, nil, 'WN', nil, nil, nil, nil, nil],
|
657
|
+
]
|
658
|
+
)
|
659
|
+
end
|
660
|
+
end
|
661
|
+
|
662
|
+
context "for queens" do
|
663
|
+
it "should update the board if the queen moves vertically" do
|
664
|
+
board = Array.new(8) { Array.new(8,nil) }
|
665
|
+
board[7][3] = "WQ"
|
666
|
+
chess = ChessMate.new(board)
|
667
|
+
chess.move('d1', 'd8')
|
668
|
+
expect(chess.board).to eql(
|
669
|
+
[
|
670
|
+
[nil, nil, nil, "WQ", nil, nil, nil, nil],
|
671
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
672
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
673
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
674
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
675
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
676
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
677
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
678
|
+
]
|
679
|
+
)
|
680
|
+
end
|
681
|
+
|
682
|
+
it "should update the board if the queen moves horizontally" do
|
683
|
+
board = Array.new(8) { Array.new(8,nil) }
|
684
|
+
board[7][3] = "WQ"
|
685
|
+
chess = ChessMate.new(board)
|
686
|
+
chess.move('d1', 'h1')
|
687
|
+
expect(chess.board).to eql(
|
688
|
+
[
|
689
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
690
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
691
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
692
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
693
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
694
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
695
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
696
|
+
[nil, nil, nil, nil, nil, nil, nil, "WQ"],
|
697
|
+
]
|
698
|
+
)
|
699
|
+
end
|
700
|
+
|
701
|
+
it "should update the board if the queen moves diagonally" do
|
702
|
+
board = Array.new(8) { Array.new(8,nil) }
|
703
|
+
board[7][3] = "WQ"
|
704
|
+
chess = ChessMate.new(board)
|
705
|
+
chess.move('d1', 'h5')
|
706
|
+
expect(chess.board).to eql(
|
707
|
+
[
|
708
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
709
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
710
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
711
|
+
[nil, nil, nil, nil, nil, nil, nil, "WQ"],
|
712
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
713
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
714
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
715
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
716
|
+
]
|
717
|
+
)
|
718
|
+
end
|
719
|
+
|
720
|
+
it "should return false if the queen makes an otherwise invalid move" do
|
721
|
+
board = Array.new(8) { Array.new(8,nil) }
|
722
|
+
board[7][3] = "WQ"
|
723
|
+
chess = ChessMate.new(board)
|
724
|
+
expect(chess.move('d1', 'h8')).to eql(false)
|
725
|
+
end
|
726
|
+
|
727
|
+
it "should allow capturing pieces of opposite color" do
|
728
|
+
board = Array.new(8) { Array.new(8,nil) }
|
729
|
+
board[7][3] = "WQ"
|
730
|
+
board[7][7] = "BQ"
|
731
|
+
chess = ChessMate.new(board)
|
732
|
+
chess.move('d1', 'h1')
|
733
|
+
expect(chess.board).to eql(
|
734
|
+
[
|
735
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
736
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
737
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
738
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
739
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
740
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
741
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
742
|
+
[nil, nil, nil, nil, nil, nil, nil, "WQ"],
|
743
|
+
]
|
744
|
+
)
|
745
|
+
end
|
746
|
+
|
747
|
+
it "should not allow capturing pieces of same color" do
|
748
|
+
board = Array.new(8) { Array.new(8,nil) }
|
749
|
+
board[7][3] = "WQ"
|
750
|
+
board[7][7] = "WQ"
|
751
|
+
chess = ChessMate.new(board)
|
752
|
+
chess.move('d1', 'h1')
|
753
|
+
expect(chess.board).to eql(
|
754
|
+
[
|
755
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
756
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
757
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
758
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
759
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
760
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
761
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
762
|
+
[nil, nil, nil, "WQ", nil, nil, nil, "WQ"],
|
763
|
+
]
|
764
|
+
)
|
765
|
+
end
|
766
|
+
end
|
767
|
+
|
768
|
+
context "for kings" do
|
769
|
+
it "should update the board if the king moves 1 space vertically" do
|
770
|
+
board = Array.new(8) { Array.new(8,nil) }
|
771
|
+
board[7][4] = "WK"
|
772
|
+
chess = ChessMate.new(board)
|
773
|
+
chess.move('e1', 'e2')
|
774
|
+
expect(chess.board).to eql(
|
775
|
+
[
|
776
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
777
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
778
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
779
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
780
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
781
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
782
|
+
[nil, nil, nil, nil, "WK", nil, nil, nil],
|
783
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
784
|
+
]
|
785
|
+
)
|
786
|
+
end
|
787
|
+
|
788
|
+
it "should update the board if the king moves 1 space horizontally" do
|
789
|
+
board = Array.new(8) { Array.new(8,nil) }
|
790
|
+
board[7][4] = "WK"
|
791
|
+
chess = ChessMate.new(board)
|
792
|
+
chess.move('e1', 'f1')
|
793
|
+
expect(chess.board).to eql(
|
794
|
+
[
|
795
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
796
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
797
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
798
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
799
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
800
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
801
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
802
|
+
[nil, nil, nil, nil, nil, "WK", nil, nil],
|
803
|
+
]
|
804
|
+
)
|
805
|
+
end
|
806
|
+
|
807
|
+
it "should update the board if the king moves 1 space diagonally" do
|
808
|
+
board = Array.new(8) { Array.new(8,nil) }
|
809
|
+
board[7][4] = "WK"
|
810
|
+
chess = ChessMate.new(board)
|
811
|
+
chess.move('e1', 'f2')
|
812
|
+
expect(chess.board).to eql(
|
813
|
+
[
|
814
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
815
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
816
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
817
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
818
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
819
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
820
|
+
[nil, nil, nil, nil, nil, "WK", nil, nil],
|
821
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
822
|
+
]
|
823
|
+
)
|
824
|
+
end
|
825
|
+
|
826
|
+
it "should return false if the king makes an otherwise invalid move" do
|
827
|
+
board = Array.new(8) { Array.new(8,nil) }
|
828
|
+
board[7][4] = "WK"
|
829
|
+
chess = ChessMate.new(board)
|
830
|
+
expect(chess.move('e1', 'h8')).to eql(false)
|
831
|
+
end
|
832
|
+
|
833
|
+
it "should allow capturing pieces of opposite color" do
|
834
|
+
board = Array.new(8) { Array.new(8,nil) }
|
835
|
+
board[7][4] = "WK"
|
836
|
+
board[6][4] = "BP"
|
837
|
+
chess = ChessMate.new(board)
|
838
|
+
chess.move('e1', 'e2')
|
839
|
+
expect(chess.board).to eql(
|
840
|
+
[
|
841
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
842
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
843
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
844
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
845
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
846
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
847
|
+
[nil, nil, nil, nil, "WK", nil, nil, nil],
|
848
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
849
|
+
]
|
850
|
+
)
|
851
|
+
end
|
852
|
+
|
853
|
+
it "should not allow capturing pieces of same color" do
|
854
|
+
board = Array.new(8) { Array.new(8,nil) }
|
855
|
+
board[7][4] = "WK"
|
856
|
+
board[6][4] = "WP"
|
857
|
+
chess = ChessMate.new(board)
|
858
|
+
chess.move('e1', 'e2')
|
859
|
+
expect(chess.board).to eql(
|
860
|
+
[
|
861
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
862
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
863
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
864
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
865
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
866
|
+
[nil, nil, nil, nil, nil, nil, nil, nil],
|
867
|
+
[nil, nil, nil, nil, "WP", nil, nil, nil],
|
868
|
+
[nil, nil, nil, nil, "WK", nil, nil, nil],
|
869
|
+
]
|
870
|
+
)
|
871
|
+
end
|
872
|
+
end
|
873
|
+
end
|
874
|
+
|
875
|
+
describe "in_check_after_move? method" do
|
876
|
+
before :each do
|
877
|
+
@board = Array.new(8) { Array.new(8,nil) }
|
878
|
+
@board[7][4] = "WK"
|
879
|
+
@board[0][4] = "BK"
|
880
|
+
@board[0][3] = "BQ"
|
881
|
+
@chess = ChessMate.new(@board)
|
882
|
+
end
|
883
|
+
it "should return true if the moving color is in check after the move" do
|
884
|
+
expect(@chess.in_check_after_move?([7,4], [7,3])).to eql(true)
|
885
|
+
end
|
886
|
+
|
887
|
+
it "should return false if the moving color is not in check after the move" do
|
888
|
+
expect(@chess.in_check_after_move?([7,4], [7,5])).to eql(false)
|
889
|
+
end
|
890
|
+
|
891
|
+
it "should not update the actual game board to test" do
|
892
|
+
test_board = Array.new(8) { Array.new(8,nil) }
|
893
|
+
test_board[7][4] = "WK"
|
894
|
+
test_board[0][4] = "BK"
|
895
|
+
test_board[0][3] = "BQ"
|
896
|
+
@chess.in_check_after_move?([7,4], [7,3])
|
897
|
+
expect(test_board.object_id).to_not eql(@board.object_id)
|
898
|
+
expect(test_board).to eql(@chess.board)
|
899
|
+
end
|
900
|
+
|
901
|
+
it "should return true if the checking piece is captured, but still results in check" do
|
902
|
+
board = Array.new(8) { Array.new(8,nil) }
|
903
|
+
board[7][4] = "WK"
|
904
|
+
board[6][4] = "BQ"
|
905
|
+
board[3][4] = "BK"
|
906
|
+
board[4][4] = "BR"
|
907
|
+
chess = ChessMate.new(board)
|
908
|
+
expect(chess.in_check_after_move?([7,4], [6,4])).to eql(true)
|
909
|
+
end
|
910
|
+
end
|
911
|
+
|
912
|
+
describe "valid_moves? method" do
|
913
|
+
it "should return true if there are valid moves" do
|
914
|
+
board = Array.new(8) { Array.new(8,nil) }
|
915
|
+
board[7][4] = "WK"
|
916
|
+
board[0][4] = "BK"
|
917
|
+
chess = ChessMate.new(board)
|
918
|
+
expect(chess.any_valid_moves?("W")).to eql(true)
|
919
|
+
end
|
920
|
+
|
921
|
+
it "should return false if there are no valid moves" do
|
922
|
+
board = Array.new(8) { Array.new(8,nil) }
|
923
|
+
board[7][4] = "WK"
|
924
|
+
board[6][4] = "BQ"
|
925
|
+
board[3][4] = "BK"
|
926
|
+
board[4][4] = "BR"
|
927
|
+
chess = ChessMate.new(board)
|
928
|
+
expect(chess.any_valid_moves?("W")).to eql(false)
|
929
|
+
end
|
930
|
+
end
|
931
|
+
|
932
|
+
describe "checkmate? method" do
|
933
|
+
it "should return true if no valid moves remain and currently in check" do
|
934
|
+
board = Array.new(8) { Array.new(8,nil) }
|
935
|
+
board[7][4] = "WK"
|
936
|
+
board[6][4] = "BQ"
|
937
|
+
board[3][4] = "BK"
|
938
|
+
board[4][4] = "BR"
|
939
|
+
chess = ChessMate.new(board)
|
940
|
+
expect(chess.checkmate?("W")).to eql(true)
|
941
|
+
end
|
942
|
+
|
943
|
+
it "should return false if there are valid moves" do
|
944
|
+
chess = ChessMate.new
|
945
|
+
expect(chess.checkmate?("W")).to eql(false)
|
946
|
+
end
|
947
|
+
end
|
948
|
+
|
949
|
+
describe "draw? method" do
|
950
|
+
it "should return true if no valid moves remain and currently not in check" do
|
951
|
+
board = Array.new(8) { Array.new(8,nil) }
|
952
|
+
board[7][4] = "WK"
|
953
|
+
board[5][3] = "BQ"
|
954
|
+
board[5][4] = "BK"
|
955
|
+
board[4][5] = "BR"
|
956
|
+
chess = ChessMate.new(board)
|
957
|
+
expect(chess.draw?("W")).to eql(true)
|
958
|
+
end
|
959
|
+
|
960
|
+
it "should return false if there are valid moves" do
|
961
|
+
chess = ChessMate.new
|
962
|
+
expect(chess.checkmate?("W")).to eql(false)
|
963
|
+
end
|
964
|
+
|
965
|
+
it "should return false if checkmated" do
|
966
|
+
board = Array.new(8) { Array.new(8,nil) }
|
967
|
+
board[7][4] = "WK"
|
968
|
+
board[6][3] = "BQ"
|
969
|
+
board[5][4] = "BK"
|
970
|
+
board[4][5] = "BR"
|
971
|
+
chess = ChessMate.new(board)
|
972
|
+
expect(chess.draw?("W")).to eql(false)
|
973
|
+
end
|
974
|
+
end
|
975
|
+
end
|