3 require 'helpers/animation_test_helper'
5 class TestChessAnimator < Test::Unit::TestCase
6 include AnimationAssertions
8 FakeItem = Struct.new(:name)
11 @chess = Game.get(:chess)
13 Point.new(3, 4) => FakeItem.new(@chess.piece.new(:white, :king)),
14 Point.new(3, 1) => FakeItem.new(@chess.piece.new(:black, :king)),
15 Point.new(7, 7) => FakeItem.new(@chess.piece.new(:black, :queen))
17 @board = FakeBoard.new(@items)
19 @animator = @chess.animator.new(@board)
21 include StubbedAnimations
23 @state = @chess.state.new
27 @state.board[Point.new(3, 4)] = @chess.piece.new(:white, :king)
28 @state.board[Point.new(3, 1)] = @chess.piece.new(:black, :king)
29 @state.board[Point.new(7, 7)] = @chess.piece.new(:black, :queen)
31 anim = @animator.warp(@state)
32 assert_animation(:group, anim) do |args|
38 @state.board[Point.new(4, 3)] = @chess.piece.new(:white, :king)
39 @state.board[Point.new(3, 1)] = @chess.piece.new(:black, :king)
40 @state.board[Point.new(7, 7)] = @chess.piece.new(:black, :queen)
42 anim = @animator.warp(@state)
43 assert_animation(:group, anim) do |args|
44 assert_equal 2, args.size
46 appear, disappear = args.sort
47 assert_animation :instant_appear, appear
48 assert_animation :instant_disappear, disappear
52 def test_simple_noninstant_warp
53 @state.board[Point.new(4, 3)] = @chess.piece.new(:white, :king)
54 @state.board[Point.new(3, 1)] = @chess.piece.new(:black, :king)
55 @state.board[Point.new(7, 7)] = @chess.piece.new(:black, :queen)
57 anim = @animator.warp(@state, :instant => false)
58 assert_animation(:group, anim) do |args|
59 assert_equal 2, args.size
61 appear, disappear = args.sort
62 assert_animation :appear, appear
63 assert_animation :disappear, disappear
67 def test_simple_forward
68 move = @state.move_factory.new(Point.new(7, 7), Point.new(5, 5))
69 @state.board[Point.new(3, 4)] = @chess.piece.new(:white, :king)
70 @state.board[Point.new(3, 1)] = @chess.piece.new(:black, :king)
71 @state.board[Point.new(5, 5)] = @chess.piece.new(:black, :queen)
73 anim = @animator.forward(@state, move)
75 assert_animation(:sequence, anim) do |args|
76 assert_equal 2, args.size
78 warp, main = args.sort_by {|a| a.args.size }
80 assert_animation(:group, warp) {|a| assert_equal [], a }
81 assert_animation(:group, main) do |args|
82 mov = args.find {|a| a.animation == :movement }
83 assert_animation(:movement, mov) do |args|
84 piece, src, dst = args
85 assert_equal FakeItem.new(@chess.piece.new(:black, :queen)), piece
86 assert_equal Point.new(7, 7), src
87 assert_equal Point.new(5, 5), dst