tic_tac_toes 0.0.7 → 0.0.8

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/tic_tac_toes +18 -22
  5. data/lib/tic_tac_toes/command_line/menu.rb +55 -0
  6. data/lib/tic_tac_toes/command_line/prompt.rb +29 -0
  7. data/lib/tic_tac_toes/command_line/runner.rb +38 -0
  8. data/lib/tic_tac_toes/core/board.rb +64 -0
  9. data/lib/tic_tac_toes/core/board_factory.rb +11 -0
  10. data/lib/tic_tac_toes/core/game_state.rb +40 -0
  11. data/lib/tic_tac_toes/core/game_state_factory.rb +15 -0
  12. data/lib/tic_tac_toes/core/history.rb +29 -0
  13. data/lib/tic_tac_toes/core/io.rb +93 -0
  14. data/lib/tic_tac_toes/core/move_strategies/easy_ai.rb +13 -0
  15. data/lib/tic_tac_toes/core/move_strategies/hard_ai.rb +89 -0
  16. data/lib/tic_tac_toes/core/move_strategies/human.rb +20 -0
  17. data/lib/tic_tac_toes/core/move_strategies/medium_ai.rb +15 -0
  18. data/lib/tic_tac_toes/core/player.rb +22 -0
  19. data/lib/tic_tac_toes/core/player_factory.rb +30 -0
  20. data/lib/tic_tac_toes/core/rules.rb +66 -0
  21. data/lib/tic_tac_toes/core/strings.rb +106 -0
  22. data/lib/tic_tac_toes/database/pg_wrapper.rb +74 -0
  23. data/lib/tic_tac_toes/ui/adapter.rb +96 -0
  24. data/lib/tic_tac_toes/ui/serializer.rb +0 -0
  25. data/lib/tic_tac_toes/version.rb +1 -1
  26. data/spec/{command_line → tic_tac_toes/command_line}/menu_spec.rb +14 -14
  27. data/spec/{command_line → tic_tac_toes/command_line}/runner_spec.rb +7 -10
  28. data/spec/tic_tac_toes/{board_factory_spec.rb → core/board_factory_spec.rb} +3 -3
  29. data/spec/tic_tac_toes/{board_spec.rb → core/board_spec.rb} +23 -23
  30. data/spec/tic_tac_toes/{game_state_factory_spec.rb → core/game_state_factory_spec.rb} +3 -3
  31. data/spec/tic_tac_toes/core/game_state_spec.rb +129 -0
  32. data/spec/tic_tac_toes/{history_spec.rb → core/history_spec.rb} +3 -3
  33. data/spec/tic_tac_toes/{io_spec.rb → core/io_spec.rb} +7 -7
  34. data/spec/tic_tac_toes/core/move_strategies/easy_ai_spec.rb +19 -0
  35. data/spec/tic_tac_toes/core/move_strategies/hard_ai_spec.rb +121 -0
  36. data/spec/tic_tac_toes/{move_strategies → core/move_strategies}/human_spec.rb +3 -3
  37. data/spec/tic_tac_toes/core/move_strategies/medium_ai_spec.rb +21 -0
  38. data/spec/tic_tac_toes/{player_factory_spec.rb → core/player_factory_spec.rb} +7 -7
  39. data/spec/tic_tac_toes/{player_spec.rb → core/player_spec.rb} +5 -5
  40. data/spec/tic_tac_toes/{rules_spec.rb → core/rules_spec.rb} +34 -34
  41. data/spec/tic_tac_toes/{strings_spec.rb → core/strings_spec.rb} +8 -8
  42. data/spec/{database → tic_tac_toes/database}/pg_wrapper_spec.rb +3 -3
  43. data/spec/tic_tac_toes/test_board_generator.rb +17 -0
  44. data/spec/{ui → tic_tac_toes/ui}/adapter_spec.rb +13 -13
  45. data/spec/tic_tac_toes/ui/serializer_spec.rb +0 -0
  46. metadata +64 -61
  47. data/lib/command_line/menu.rb +0 -53
  48. data/lib/command_line/prompt.rb +0 -27
  49. data/lib/command_line/runner.rb +0 -37
  50. data/lib/database/pg_wrapper.rb +0 -72
  51. data/lib/tic_tac_toes/board.rb +0 -62
  52. data/lib/tic_tac_toes/board_factory.rb +0 -9
  53. data/lib/tic_tac_toes/game_state.rb +0 -27
  54. data/lib/tic_tac_toes/game_state_factory.rb +0 -14
  55. data/lib/tic_tac_toes/history.rb +0 -27
  56. data/lib/tic_tac_toes/io.rb +0 -91
  57. data/lib/tic_tac_toes/move_strategies/easy_ai.rb +0 -11
  58. data/lib/tic_tac_toes/move_strategies/hard_ai.rb +0 -87
  59. data/lib/tic_tac_toes/move_strategies/human.rb +0 -18
  60. data/lib/tic_tac_toes/move_strategies/medium_ai.rb +0 -13
  61. data/lib/tic_tac_toes/player.rb +0 -20
  62. data/lib/tic_tac_toes/player_factory.rb +0 -28
  63. data/lib/tic_tac_toes/rules.rb +0 -64
  64. data/lib/tic_tac_toes/strings.rb +0 -104
  65. data/lib/ui/adapter.rb +0 -94
  66. data/spec/test_board_generator.rb +0 -15
  67. data/spec/tic_tac_toes/game_state_spec.rb +0 -66
  68. data/spec/tic_tac_toes/move_strategies/easy_ai_spec.rb +0 -19
  69. data/spec/tic_tac_toes/move_strategies/hard_ai_spec.rb +0 -121
  70. data/spec/tic_tac_toes/move_strategies/medium_ai_spec.rb +0 -21
  71. /data/lib/{tasks → tic_tac_toes/tasks}/destroy_databases.rake +0 -0
  72. /data/lib/{tasks → tic_tac_toes/tasks}/set_up_databases.rake +0 -0
@@ -1,8 +1,8 @@
1
- require 'tic_tac_toes/history'
1
+ require 'tic_tac_toes/core/history'
2
2
 
3
- describe TicTacToes::History do
3
+ describe TicTacToes::Core::History do
4
4
  let(:database_wrapper) { double("database wrapper", :record_game_history => true) }
5
- let(:history) { TicTacToes::History.new(database_wrapper) }
5
+ let(:history) { TicTacToes::Core::History.new(database_wrapper) }
6
6
 
7
7
  describe '#record_board_size' do
8
8
  it "records the passed board size" do
@@ -1,11 +1,11 @@
1
- require 'tic_tac_toes/board'
2
- require 'tic_tac_toes/io'
3
- require 'tic_tac_toes/strings'
1
+ require 'tic_tac_toes/core/board'
2
+ require 'tic_tac_toes/core/io'
3
+ require 'tic_tac_toes/core/strings'
4
4
 
5
- describe TicTacToes::IO do
6
- let(:strings) { TicTacToes::Strings }
5
+ describe TicTacToes::Core::IO do
6
+ let(:strings) { TicTacToes::Core::Strings }
7
7
  let(:prompt) { double("prompt", solicit_input: 0, display: true, display_red: true) }
8
- let(:io) { TicTacToes::IO.new(prompt) }
8
+ let(:io) { TicTacToes::Core::IO.new(prompt) }
9
9
 
10
10
  describe '#get_row_size' do
11
11
  it "displays a row size solicitation" do
@@ -70,7 +70,7 @@ describe TicTacToes::IO do
70
70
 
71
71
  describe '#draw_board' do
72
72
  it "displays a board string" do
73
- board = TicTacToes::Board.new
73
+ board = TicTacToes::Core::Board.new
74
74
  board_string = strings.board(board)
75
75
 
76
76
  expect(prompt).to receive(:display).with(board_string)
@@ -0,0 +1,19 @@
1
+ require 'tic_tac_toes/test_board_generator'
2
+ require 'tic_tac_toes/core/move_strategies/easy_ai'
3
+
4
+ describe TicTacToes::Core::MoveStrategies::EasyAI do
5
+ describe '#move' do
6
+ let(:players) { double("players") }
7
+ let(:easy_ai) { TicTacToes::Core::MoveStrategies::EasyAI }
8
+
9
+ it "returns a randomly-selected valid move" do
10
+ board = TicTacToes::TestBoardGenerator.generate([ :O, nil, nil,
11
+ nil, :X, nil,
12
+ nil, :X, nil])
13
+ valid_moves = [1, 2, 3, 5, 6, 8]
14
+
15
+ move = easy_ai.move(board, players)
16
+ expect(valid_moves).to include(move)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,121 @@
1
+ require 'tic_tac_toes/test_board_generator'
2
+ require 'tic_tac_toes/core/move_strategies/hard_ai'
3
+ require 'tic_tac_toes/core/player'
4
+
5
+ describe TicTacToes::Core::MoveStrategies::HardAI do
6
+ let(:hard_ai) { TicTacToes::Core::MoveStrategies::HardAI }
7
+ let(:x) { TicTacToes::Core::Player.new("human", "x", false, "io") }
8
+ let(:o) { TicTacToes::Core::Player.new(hard_ai, "o", true, "io") }
9
+ let(:players) { [o, x] }
10
+
11
+
12
+ describe '#move' do
13
+ it "returns the best move" do
14
+ board = TicTacToes::TestBoardGenerator.generate([x, nil, nil,
15
+ o, o, nil,
16
+ x, nil, x])
17
+ best_move = 5
18
+
19
+ expect(hard_ai.move(board, players)).to eql(best_move)
20
+ end
21
+
22
+ context "when playing on a 3x3 board" do
23
+ it "returns 4 when the opponent’s first move was a corner" do
24
+ board = TicTacToes::TestBoardGenerator.generate([nil, nil, nil,
25
+ nil, nil, nil,
26
+ nil, nil, x])
27
+
28
+ expect(hard_ai.move(board, players)).to eq(4)
29
+ end
30
+
31
+ it "returns 4 when the opponent’s first move was an edge" do
32
+ board = TicTacToes::TestBoardGenerator.generate([nil, nil, nil,
33
+ nil, nil, x,
34
+ nil, nil, nil])
35
+
36
+ expect(hard_ai.move(board, players)).to eq(4)
37
+ end
38
+
39
+ it "returns 0 when the opponent’s first move was the center" do
40
+ board = TicTacToes::TestBoardGenerator.generate([nil, nil, nil,
41
+ nil, x, nil,
42
+ nil, nil, nil])
43
+
44
+ expect(hard_ai.move(board, players)).to eq(0)
45
+ end
46
+ end
47
+ end
48
+
49
+
50
+ describe '#minimax' do
51
+ it "returns the correct score for a pre-win board" do
52
+ board = TicTacToes::TestBoardGenerator.generate([x, nil, nil,
53
+ o, o, nil,
54
+ x, nil, x])
55
+ win_score = 1
56
+
57
+ expect(hard_ai.minimax(board, :max, players)).to eql(win_score)
58
+ end
59
+
60
+ it "returns the correct score for a pre-loss board" do
61
+ board = TicTacToes::TestBoardGenerator.generate([ o, o, x,
62
+ nil, nil, nil,
63
+ x, nil, x])
64
+ loss_score = -1
65
+
66
+ expect(hard_ai.minimax(board, :max, players)).to eql(loss_score)
67
+ end
68
+
69
+ it "returns the correct score for a pre-draw board" do
70
+ board = TicTacToes::TestBoardGenerator.generate([x, x, o,
71
+ o, nil, x,
72
+ x, o, x])
73
+ draw_score = 0
74
+
75
+ expect(hard_ai.minimax(board, :max, players)).to eql(draw_score)
76
+ end
77
+ end
78
+
79
+
80
+ describe '#generate_board' do
81
+ it "returns a board based on a token, a space, and an existing board" do
82
+ token, space = o, 3
83
+ board = TicTacToes::TestBoardGenerator.generate([ x, nil, nil,
84
+ nil, o, nil,
85
+ x, nil, nil])
86
+
87
+ new_board = hard_ai.generate_board(token, space, board)
88
+ expect(new_board.space(space)).to eql(token)
89
+ end
90
+ end
91
+
92
+
93
+ describe '#score' do
94
+ it "returns the correct score when HardAI has won" do
95
+ board = TicTacToes::TestBoardGenerator.generate([ o, nil, nil,
96
+ nil, o, nil,
97
+ nil, nil, o])
98
+ win_score = 1
99
+
100
+ expect(hard_ai.score(board, players)).to eql(win_score)
101
+ end
102
+
103
+ it "returns the correct score when no one has won" do
104
+ board = TicTacToes::TestBoardGenerator.generate([o, o, x,
105
+ x, x, o,
106
+ o, x, o])
107
+ draw_score = 0
108
+
109
+ expect(hard_ai.score(board, players)).to eql(draw_score)
110
+ end
111
+
112
+ it "returns the correct score when the opponent has won" do
113
+ board = TicTacToes::TestBoardGenerator.generate([ x, nil, nil,
114
+ nil, x, nil,
115
+ nil, nil, x])
116
+ loss_score = -1
117
+
118
+ expect(hard_ai.score(board, players)).to eql(loss_score)
119
+ end
120
+ end
121
+ end
@@ -1,9 +1,9 @@
1
- require 'tic_tac_toes/move_strategies/human'
1
+ require 'tic_tac_toes/core/move_strategies/human'
2
2
 
3
- describe TicTacToes::MoveStrategies::Human do
3
+ describe TicTacToes::Core::MoveStrategies::Human do
4
4
  describe '#move' do
5
5
  let(:io) { double("io", solicit_input: 0, move_solicitation: true, not_an_integer_error: true) }
6
- let(:human) { TicTacToes::MoveStrategies::Human.new(io) }
6
+ let(:human) { TicTacToes::Core::MoveStrategies::Human.new(io) }
7
7
 
8
8
  it "displays a move solicitation" do
9
9
  expect(io).to receive(:move_solicitation)
@@ -0,0 +1,21 @@
1
+ require 'tic_tac_toes/test_board_generator'
2
+ require 'tic_tac_toes/core/move_strategies/medium_ai'
3
+
4
+ describe TicTacToes::Core::MoveStrategies::MediumAI do
5
+ let(:medium_ai) { TicTacToes::Core::MoveStrategies::MediumAI }
6
+ let(:x) { TicTacToes::Core::Player.new("human", "x", false, "io") }
7
+ let(:o) { TicTacToes::Core::Player.new(medium_ai, "o", true, "io") }
8
+ let(:players) { [x, o] }
9
+
10
+ describe '#move' do
11
+ it "returns a valid move (based on either EasyAI or HardAI)" do
12
+ board = TicTacToes::TestBoardGenerator.generate([ o, o, x,
13
+ nil, x, nil,
14
+ nil, x, nil])
15
+ valid_moves = [3, 5, 6, 8]
16
+
17
+ move = medium_ai.move(board, players)
18
+ expect(valid_moves).to include(move)
19
+ end
20
+ end
21
+ end
@@ -1,13 +1,13 @@
1
- require 'tic_tac_toes/move_strategies/human'
2
- require 'tic_tac_toes/move_strategies/medium_ai'
3
- require 'tic_tac_toes/player_factory'
1
+ require 'tic_tac_toes/core/move_strategies/human'
2
+ require 'tic_tac_toes/core/move_strategies/medium_ai'
3
+ require 'tic_tac_toes/core/player_factory'
4
4
 
5
- describe TicTacToes::PlayerFactory do
6
- let(:player_factory) { TicTacToes::PlayerFactory.new("io") }
5
+ describe TicTacToes::Core::PlayerFactory do
6
+ let(:player_factory) { TicTacToes::Core::PlayerFactory.new("io") }
7
7
 
8
8
  describe '#generate_human_player' do
9
9
  it "returns a player with the correct token and move strategy" do
10
- strategy = TicTacToes::MoveStrategies::Human
10
+ strategy = TicTacToes::Core::MoveStrategies::Human
11
11
  token = 'X'
12
12
 
13
13
  human_player = player_factory.generate_human_player(token)
@@ -20,7 +20,7 @@ describe TicTacToes::PlayerFactory do
20
20
  it 'returns a player with the correct token and move strategy' do
21
21
  token = 'O'
22
22
  difficulty = :medium
23
- strategy = TicTacToes::MoveStrategies::MediumAI
23
+ strategy = TicTacToes::Core::MoveStrategies::MediumAI
24
24
 
25
25
  computer_player = player_factory.generate_computer_player(token,
26
26
  difficulty)
@@ -1,8 +1,8 @@
1
- require 'tic_tac_toes/board'
2
- require 'tic_tac_toes/player'
1
+ require 'tic_tac_toes/core/board'
2
+ require 'tic_tac_toes/core/player'
3
3
 
4
- describe TicTacToes::Player do
5
- let(:board) { TicTacToes::Board.new(row_size: 3) }
4
+ describe TicTacToes::Core::Player do
5
+ let(:board) { TicTacToes::Core::Board.new(row_size: 3) }
6
6
  let(:io) { double("io", invalid_move_error: true) }
7
7
  let(:players) { double("players") }
8
8
 
@@ -11,7 +11,7 @@ describe TicTacToes::Player do
11
11
  let(:token) { "X" }
12
12
  let(:needs_to_think) { false }
13
13
 
14
- let(:player) { TicTacToes::Player.new(move_strategy, token, needs_to_think, io) }
14
+ let(:player) { TicTacToes::Core::Player.new(move_strategy, token, needs_to_think, io) }
15
15
 
16
16
  it "only places/returns a move once it receives a valid move" do
17
17
  invalid_space, valid_space = 9, 0
@@ -1,8 +1,8 @@
1
- require 'test_board_generator'
2
- require 'tic_tac_toes/rules'
1
+ require 'tic_tac_toes/test_board_generator'
2
+ require 'tic_tac_toes/core/rules'
3
3
 
4
- describe TicTacToes::Rules do
5
- let(:rules) { TicTacToes::Rules }
4
+ describe TicTacToes::Core::Rules do
5
+ let(:rules) { TicTacToes::Core::Rules }
6
6
  let(:x) { double("human player", token: "x") }
7
7
  let(:o) { double("computer player", token: "o") }
8
8
  let(:players) { [x, o] }
@@ -60,25 +60,25 @@ describe TicTacToes::Rules do
60
60
 
61
61
  describe '#game_over?' do
62
62
  it "returns false if there is not yet a winner and the board is not full" do
63
- board = TestBoardGenerator.generate([x, x, o,
64
- o, o, nil,
65
- x, o, x])
63
+ board = TicTacToes::TestBoardGenerator.generate([x, x, o,
64
+ o, o, nil,
65
+ x, o, x])
66
66
 
67
67
  expect(rules.game_over?(board, players)).to be false
68
68
  end
69
69
 
70
70
  it "returns true if any player has won" do
71
- board = TestBoardGenerator.generate([ x, nil, nil,
72
- nil, x, nil,
73
- nil, nil, x])
71
+ board = TicTacToes::TestBoardGenerator.generate([ x, nil, nil,
72
+ nil, x, nil,
73
+ nil, nil, x])
74
74
 
75
75
  expect(rules.game_over?(board, players)).to be true
76
76
  end
77
77
 
78
78
  it "returns true if the board is full" do
79
- board = TestBoardGenerator.generate([x, x, o,
80
- o, o, x,
81
- x, o, x])
79
+ board = TicTacToes::TestBoardGenerator.generate([x, x, o,
80
+ o, o, x,
81
+ x, o, x])
82
82
 
83
83
  expect(rules.game_over?(board, players)).to be true
84
84
  end
@@ -87,18 +87,18 @@ describe TicTacToes::Rules do
87
87
 
88
88
  describe '#determine_winner' do
89
89
  it "returns the winning token when there is a winner" do
90
- board = TestBoardGenerator.generate([ o, nil, nil,
91
- nil, o, nil,
92
- nil, nil, o])
90
+ board = TicTacToes::TestBoardGenerator.generate([ o, nil, nil,
91
+ nil, o, nil,
92
+ nil, nil, o])
93
93
  winning_token = "o"
94
94
 
95
95
  expect(rules.determine_winner(board, players)).to eql(winning_token)
96
96
  end
97
97
 
98
98
  it "returns nil if there is not a winner" do
99
- board = TestBoardGenerator.generate([x, x, o,
100
- o, o, nil,
101
- x, o, x])
99
+ board = TicTacToes::TestBoardGenerator.generate([x, x, o,
100
+ o, o, nil,
101
+ x, o, x])
102
102
 
103
103
  expect(rules.determine_winner(board, players)).to be_nil
104
104
  end
@@ -107,41 +107,41 @@ describe TicTacToes::Rules do
107
107
 
108
108
  describe '#win?' do
109
109
  it "returns false if the given token has not won" do
110
- board = TestBoardGenerator.generate([x, x, o,
111
- o, o, nil,
112
- x, o, x])
110
+ board = TicTacToes::TestBoardGenerator.generate([x, x, o,
111
+ o, o, nil,
112
+ x, o, x])
113
113
 
114
114
  expect(rules.win?(board, x)).to be false
115
115
  end
116
116
 
117
117
  it "returns true if the given token has achieved a back diagonal win" do
118
- board = TestBoardGenerator.generate([ x, nil, nil,
119
- nil, x, nil,
120
- nil, nil, x])
118
+ board = TicTacToes::TestBoardGenerator.generate([ x, nil, nil,
119
+ nil, x, nil,
120
+ nil, nil, x])
121
121
 
122
122
  expect(rules.win?(board, x)).to be true
123
123
  end
124
124
 
125
125
  it "returns true if the given token has achieved a front diagonal win" do
126
- board = TestBoardGenerator.generate([nil, nil, x,
127
- nil, x, nil,
128
- x, nil, nil])
126
+ board = TicTacToes::TestBoardGenerator.generate([nil, nil, x,
127
+ nil, x, nil,
128
+ x, nil, nil])
129
129
 
130
130
  expect(rules.win?(board, x)).to be true
131
131
  end
132
132
 
133
133
  it "returns true if the given token has achieved a horizonatal win" do
134
- board = TestBoardGenerator.generate([nil, nil, nil,
135
- x, x, x,
136
- nil, nil, nil])
134
+ board = TicTacToes::TestBoardGenerator.generate([nil, nil, nil,
135
+ x, x, x,
136
+ nil, nil, nil])
137
137
 
138
138
  expect(rules.win?(board, x)).to be true
139
139
  end
140
140
 
141
141
  it "returns true if the given token has achieved a vertical win" do
142
- board = TestBoardGenerator.generate([nil, x, nil,
143
- nil, x, nil,
144
- nil, x, nil])
142
+ board = TicTacToes::TestBoardGenerator.generate([nil, x, nil,
143
+ nil, x, nil,
144
+ nil, x, nil])
145
145
 
146
146
  expect(rules.win?(board, x)).to be true
147
147
  end
@@ -1,14 +1,14 @@
1
- require 'tic_tac_toes/board'
2
- require 'tic_tac_toes/rules'
3
- require 'tic_tac_toes/strings'
1
+ require 'tic_tac_toes/core/board'
2
+ require 'tic_tac_toes/core/rules'
3
+ require 'tic_tac_toes/core/strings'
4
4
 
5
- describe TicTacToes::Strings do
6
- let(:strings) { TicTacToes::Strings }
5
+ describe TicTacToes::Core::Strings do
6
+ let(:strings) { TicTacToes::Core::Strings }
7
7
 
8
8
  describe '#invalid_row_size' do
9
9
  it "returns a string containing the minimum and maximum allowed row sizes" do
10
- smallest_row_size = TicTacToes::Rules::ROW_SIZE_RANGE.min.to_s
11
- largest_row_size = TicTacToes::Rules::ROW_SIZE_RANGE.max.to_s
10
+ smallest_row_size = TicTacToes::Core::Rules::ROW_SIZE_RANGE.min.to_s
11
+ largest_row_size = TicTacToes::Core::Rules::ROW_SIZE_RANGE.max.to_s
12
12
 
13
13
  expect(strings::INVALID_ROW_SIZE).to include(smallest_row_size, largest_row_size)
14
14
  end
@@ -30,7 +30,7 @@ describe TicTacToes::Strings do
30
30
 
31
31
  describe '#board' do
32
32
  it "returns a board string" do
33
- board = TicTacToes::Board.new(row_size: 3)
33
+ board = TicTacToes::Core::Board.new(row_size: 3)
34
34
 
35
35
  leading_spaces_regexp = /^[[:blank:]]+/
36
36
  board_string = <<-END.gsub(leading_spaces_regexp, '')
@@ -1,10 +1,10 @@
1
- require 'database/pg_wrapper'
1
+ require 'tic_tac_toes/database/pg_wrapper'
2
2
  require 'pg'
3
3
 
4
- describe Database::PGWrapper do
4
+ describe TicTacToes::Database::PGWrapper do
5
5
  database = "tic_tac_toes_test"
6
6
 
7
- let(:pg_wrapper) { Database::PGWrapper.new(database) }
7
+ let(:pg_wrapper) { TicTacToes::Database::PGWrapper.new(database) }
8
8
  let(:history1) { double("history 1",
9
9
  :board_size => 9,
10
10
  :moves => [["X", 1], ["O", 4]],
@@ -0,0 +1,17 @@
1
+ require 'tic_tac_toes/core/board'
2
+
3
+ module TicTacToes
4
+ module TestBoardGenerator
5
+ def self.generate(structure)
6
+ board_size = structure.count
7
+ row_size = Math.sqrt(board_size)
8
+ board = TicTacToes::Core::Board.new(row_size: row_size)
9
+
10
+ structure.each_with_index do |player, index|
11
+ board.place(player, index)
12
+ end
13
+
14
+ board
15
+ end
16
+ end
17
+ end
@@ -1,13 +1,13 @@
1
- require 'tic_tac_toes/board'
2
- require 'tic_tac_toes/game_state'
3
- require 'tic_tac_toes/player_factory'
4
- require 'ui/adapter'
1
+ require 'tic_tac_toes/core/board'
2
+ require 'tic_tac_toes/core/game_state'
3
+ require 'tic_tac_toes/core/player_factory'
4
+ require 'tic_tac_toes/ui/adapter'
5
5
 
6
- describe UI::Adapter do
6
+ describe TicTacToes::UI::Adapter do
7
7
  describe '#new_board_structure' do
8
8
  it 'returns a new board structure' do
9
9
  new_board_structure = [nil, nil, nil, nil, nil, nil, nil, nil, nil]
10
- expect(UI::Adapter.new_board_structure).to eq(new_board_structure)
10
+ expect(TicTacToes::UI::Adapter.new_board_structure).to eq(new_board_structure)
11
11
  end
12
12
  end
13
13
 
@@ -21,7 +21,7 @@ describe UI::Adapter do
21
21
  updated_board_structure = ["X", "O", "X", nil, "O", nil, nil, nil, nil]
22
22
 
23
23
  expect(listener).to receive(:move_was_valid).with(updated_board_structure)
24
- UI::Adapter.make_move(board_structure, move, listener)
24
+ TicTacToes::UI::Adapter.make_move(board_structure, move, listener)
25
25
  end
26
26
  end
27
27
 
@@ -35,7 +35,7 @@ describe UI::Adapter do
35
35
  game_over_message = "Game over"
36
36
 
37
37
  expect(listener).to receive(:game_is_over).with(updated_board_structure, game_over_message)
38
- UI::Adapter.make_move(board_structure, move, listener)
38
+ TicTacToes::UI::Adapter.make_move(board_structure, move, listener)
39
39
  end
40
40
  end
41
41
  end
@@ -44,7 +44,7 @@ describe UI::Adapter do
44
44
  it 'returns a game state object based on a board structure' do
45
45
  board_structure = [nil, nil, nil, nil, "X", nil, nil, nil, nil]
46
46
 
47
- game_state = UI::Adapter.game_state_from_board_structure(board_structure)
47
+ game_state = TicTacToes::UI::Adapter.game_state_from_board_structure(board_structure)
48
48
  middle_space = game_state.board.space(4)
49
49
  first_player = game_state.players.first
50
50
  second_player = game_state.players.last
@@ -57,16 +57,16 @@ describe UI::Adapter do
57
57
 
58
58
  describe '#game_state_to_board_structure' do
59
59
  it 'returns a board structure based on a game state object' do
60
- player_factory = TicTacToes::PlayerFactory.new('unused_io')
60
+ player_factory = TicTacToes::Core::PlayerFactory.new('unused_io')
61
61
  first_player = player_factory.generate_human_player('X')
62
62
  second_player = player_factory.generate_computer_player('O', :hard)
63
63
  players = [first_player, second_player]
64
- board = TicTacToes::Board.new
64
+ board = TicTacToes::Core::Board.new
65
65
  board.place(first_player, 4)
66
66
 
67
- game_state = TicTacToes::GameState.new(board, players, UI::NullHistory.new)
67
+ game_state = TicTacToes::Core::GameState.new(board, players, TicTacToes::UI::NullHistory.new)
68
68
  board_structure = [nil, nil, nil, nil, "X", nil, nil, nil, nil]
69
- expect(UI::Adapter.game_state_to_board_structure(game_state)).to eq(board_structure)
69
+ expect(TicTacToes::UI::Adapter.game_state_to_board_structure(game_state)).to eq(board_structure)
70
70
  end
71
71
  end
72
72
  end
File without changes