diff options
| author | Teddy Wing | 2015-04-16 02:13:04 -0400 |
|---|---|---|
| committer | Teddy Wing | 2015-04-16 02:13:04 -0400 |
| commit | 6984fc31370564332ceab60c203cd6f1e695d61a (patch) | |
| tree | a53d6b3ecf3c1ba4f35fcd245c30757e1a266e11 /spec | |
| parent | fa951e520b7637d9e67c31a0a8b61733e253f90b (diff) | |
| parent | 93351518faf3bb4f63b4a3cc1ef28f5c06e09f01 (diff) | |
| download | tic-tac-toe-master.tar.bz2 | |
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/board_spec.rb | 147 | ||||
| -rw-r--r-- | spec/player_spec.rb | 47 | ||||
| -rw-r--r-- | spec/spec_helper.rb | 2 |
3 files changed, 196 insertions, 0 deletions
diff --git a/spec/board_spec.rb b/spec/board_spec.rb new file mode 100644 index 0000000..70caa81 --- /dev/null +++ b/spec/board_spec.rb @@ -0,0 +1,147 @@ +require 'spec_helper' +require 'board' + +describe Board do + before do + @board = Board.new + end + + it 'starts with a grid of dots' do + @board.instance_variable_get('@board').must_equal [ + ['.', '.', '.'], + ['.', '.', '.'], + ['.', '.', '.'] + ] + end + + describe '#render' do + it 'must be a grid' do + @board.render.must_equal <<EOF +... +... +... +EOF + end + + it 'must be the correct board' do + @board.instance_variable_set(:@board, [ + ['.', 'X', 'O'], + ['X', '.', '.'], + ['.', '.', '.'], + ]) + @board.render.must_equal <<EOF +.XO +X.. +... +EOF + end + end + + describe '#transform_coordinates' do + it 'converts string coordinates to an array' do + @board.transform_coordinates('0,4').must_equal [0, 4] + end + + it "returns nil if coordinates don't match the format" do + @board.transform_coordinates('4').must_be_nil + @board.transform_coordinates('4 2').must_be_nil + @board.transform_coordinates('booyakacha').must_be_nil + @board.transform_coordinates('booya,kacha').must_be_nil + end + end + + describe '#update_cell' do + it 'updates a given cell with a given value' do + value = 'X' + @board.update_cell(1, 2, value) + @board.instance_variable_get(:@board)[1][2].must_equal value + end + end + + describe '#winner?' do + before do + @board = Board.new + end + + it 'must be nil when no player has won' do + @board.winner?.must_be_nil + end + + it 'must be the winning player' do + end + + it 'counts horizontal matches as wins' do + @board.instance_variable_set(:@board, [ + ['X', 'X', 'X'], + ['X', 'O', 'O'], + ['O', 'X', 'O'], + ]) + @board.winner?.must_equal 'X' + + @board.instance_variable_set(:@board, [ + ['X', 'O', 'X'], + ['O', 'O', 'O'], + ['O', 'X', 'X'], + ]) + @board.winner?.must_equal 'O' + + @board.instance_variable_set(:@board, [ + ['O', 'X', 'X'], + ['X', 'O', 'X'], + ['O', 'O', 'O'], + ]) + @board.winner?.must_equal 'O' + end + + it 'counts vertical matches as wins' do + @board.instance_variable_set(:@board, [ + ['X', 'O', 'X'], + ['X', 'O', 'O'], + ['X', 'X', 'O'], + ]) + @board.winner?.must_equal 'X' + + @board.instance_variable_set(:@board, [ + ['X', 'O', 'X'], + ['X', 'O', 'O'], + ['O', 'O', 'X'], + ]) + @board.winner?.must_equal 'O' + + @board.instance_variable_set(:@board, [ + ['O', 'X', 'X'], + ['X', 'O', 'X'], + ['O', 'O', 'X'], + ]) + @board.winner?.must_equal 'X' + end + + it 'counts diagonal matches as wins' do + @board.instance_variable_set(:@board, [ + ['O', 'X', 'X'], + ['X', 'O', 'O'], + ['O', 'X', 'O'], + ]) + @board.winner?.must_equal 'O' + + @board.instance_variable_set(:@board, [ + ['X', 'O', 'X'], + ['O', 'X', 'O'], + ['O', 'X', 'X'], + ]) + @board.winner?.must_equal 'X' + end + end + + describe '#array_items_equal' do + it 'is true when all elements in the array are equal' do + Board.new.send(:array_items_equal, + ['X', 'X', 'X', 'X', 'X', 'X', 'X']).must_equal true + end + + it 'is false when any element is not equal to the rest' do + Board.new.send(:array_items_equal, + ['X', 'O', 'X', 'X', 'X', 'X', 'X']).must_equal false + end + end +end diff --git a/spec/player_spec.rb b/spec/player_spec.rb new file mode 100644 index 0000000..11bfd35 --- /dev/null +++ b/spec/player_spec.rb @@ -0,0 +1,47 @@ +require 'spec_helper' +require 'board' +require 'player' + +describe Player do + describe 'insignias' do + it 'knows what an X insignia is' do + Player::INSIGNIAS[:x].must_equal 'X' + end + + it 'knows what an O insignia is' do + Player::INSIGNIAS[:o].must_equal 'O' + end + end + + describe '#insignia' do + it 'must be the correct insignia' do + insignia = Player::INSIGNIAS[:o] + player = Player.new(insignia, Board.new) + player.insignia.must_equal insignia + end + end + + describe '#move' do + before do + @board = Board.new + @player = Player.new(Player::INSIGNIAS[:x], @board) + end + + it 'raises an ArgumentError given nil coordinates' do + -> { @player.move(nil) }.must_raise ArgumentError + end + + it 'adds a piece to the correct coordinates on `board`' do + @player.move([1, 2]) + @board.instance_variable_get(:@board)[1][2].must_equal \ + @player.instance_variable_get(:@insignia) + end + + it 'uses the correct insignia for the move' do + insignia = Player::INSIGNIAS[:o] + player = Player.new(insignia, @board) + player.move([0, 1]) + @board.instance_variable_get(:@board)[0][1].must_equal insignia + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..1655612 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,2 @@ +require 'minitest/spec' +require 'minitest/autorun' |
