rora 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +210 -20
- data/lib/rora/model/board.rb +10 -0
- data/lib/rora/model/card.rb +1 -5
- data/lib/rora/model/game.rb +70 -2
- data/lib/rora/model/hand.rb +1 -2
- data/lib/rora/model/player.rb +70 -5
- data/lib/rora/model/pot.rb +7 -6
- data/lib/rora/model/rank.rb +2 -2
- data/lib/rora/model/seat.rb +31 -0
- data/lib/rora/model/starting_hand.rb +4 -0
- data/lib/rora/model/suit.rb +1 -1
- data/lib/rora/model/table.rb +107 -14
- data/lib/rora/utils/game_logger.rb +19 -0
- data/lib/rora.rb +7 -2
- data/test/rora/model/board_test.rb +14 -12
- data/test/rora/model/card_test.rb +16 -7
- data/test/rora/model/game_test.rb +23 -0
- data/test/rora/model/hand_type_test.rb +3 -3
- data/test/rora/model/player_test.rb +108 -0
- data/test/rora/model/pot_test.rb +15 -8
- data/test/rora/model/rank_test.rb +6 -6
- data/test/rora/model/seat_test.rb +41 -0
- data/test/rora/model/suit_test.rb +1 -1
- data/test/rora/model/table_test.rb +230 -0
- data/test/rora_test.rb +2 -1
- metadata +48 -6
data/lib/rora/model/table.rb
CHANGED
@@ -1,14 +1,86 @@
|
|
1
1
|
#
|
2
|
-
#
|
2
|
+
# A poker table where players compete for pots.
|
3
3
|
#
|
4
4
|
class Table
|
5
|
-
attr_reader :board, :deck, :pot
|
5
|
+
attr_reader :board, :deck, :pot
|
6
6
|
|
7
7
|
def initialize seats=nil
|
8
|
-
|
8
|
+
seats = seats.nil? ? 9 : seats
|
9
|
+
raise ArgumentError, "A table must have at least two seats" if seats < 2
|
10
|
+
@seats = Array.new seats
|
9
11
|
@board = Board.new
|
10
12
|
@pot = Pot.new
|
11
13
|
@deck = Deck.new
|
14
|
+
|
15
|
+
@seats.each_index {|index| @seats[index] = Seat.new(index + 1)}
|
16
|
+
@seats.each_index do |index|
|
17
|
+
@seats[index].next = @seats[index == (seats - 1) ? 0 : index + 1]
|
18
|
+
@seats[index].prev = @seats[index == 0 ? seats - 1 : index - 1]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def pass_the_buck
|
23
|
+
index = the_button.number - 1
|
24
|
+
@seats[index].button = nil
|
25
|
+
the_seat_after(@seats[index]).button = true
|
26
|
+
end
|
27
|
+
|
28
|
+
def the_button
|
29
|
+
raise RuntimeError, "There are fewer than two players at the table" if players.size < 2
|
30
|
+
@seats.each_index do |x|
|
31
|
+
return @seats[x] if @seats[x].button?
|
32
|
+
end
|
33
|
+
@seats.each_index do |x|
|
34
|
+
return @seats[x] if @seats[x].taken?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def the_small_blind
|
39
|
+
raise RuntimeError, "There are fewer than two players at the table" if players.size < 2
|
40
|
+
players.size == 2 ? the_button : the_seat_after(the_button)
|
41
|
+
end
|
42
|
+
|
43
|
+
def the_big_blind
|
44
|
+
raise RuntimeError, "There are fewer than two players at the table" if players.size < 2
|
45
|
+
the_seat_after the_small_blind
|
46
|
+
end
|
47
|
+
|
48
|
+
def under_the_gun
|
49
|
+
raise RuntimeError, "There are fewer than two players at the table" if players.size < 2
|
50
|
+
the_seat_after(the_big_blind)
|
51
|
+
end
|
52
|
+
|
53
|
+
def the_seat_after seat
|
54
|
+
raise RuntimeError, "There are fewer than two players at the table" if players.size < 2
|
55
|
+
this_seat = seat.next
|
56
|
+
return this_seat.taken? ? this_seat : the_seat_after(this_seat)
|
57
|
+
end
|
58
|
+
|
59
|
+
def the_seat_before seat
|
60
|
+
raise RuntimeError, "There are fewer than two players at the table" if players.size < 2
|
61
|
+
this_seat = seat.prev
|
62
|
+
return this_seat.taken? ? this_seat : the_seat_before(this_seat)
|
63
|
+
end
|
64
|
+
|
65
|
+
def with argument
|
66
|
+
if argument.kind_of? Deck
|
67
|
+
@deck = argument
|
68
|
+
end
|
69
|
+
if argument.kind_of? Pot
|
70
|
+
@pot = argument
|
71
|
+
end
|
72
|
+
if argument.kind_of? Board
|
73
|
+
@board = argument
|
74
|
+
end
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
78
|
+
def seat i
|
79
|
+
@seats[i - 1]
|
80
|
+
end
|
81
|
+
|
82
|
+
def size
|
83
|
+
@seats.size
|
12
84
|
end
|
13
85
|
|
14
86
|
def reset
|
@@ -17,24 +89,45 @@ class Table
|
|
17
89
|
@deck = Deck.new
|
18
90
|
end
|
19
91
|
|
92
|
+
def players
|
93
|
+
players = []
|
94
|
+
@seats.each do |seat|
|
95
|
+
players << seat.player if seat.taken?
|
96
|
+
end
|
97
|
+
players
|
98
|
+
end
|
99
|
+
|
100
|
+
def full?
|
101
|
+
@seats.select{|x| !x.taken?}.empty?
|
102
|
+
end
|
103
|
+
|
104
|
+
def empty?
|
105
|
+
@seats.select{|x| x.taken?}.empty?
|
106
|
+
end
|
107
|
+
|
20
108
|
def add player, seat_number=nil
|
21
|
-
if
|
22
|
-
|
23
|
-
@seats
|
24
|
-
|
25
|
-
@seats.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
109
|
+
raise RuntimeError, "Cannot add player, the table is full" if full?
|
110
|
+
if !seat_number.nil?
|
111
|
+
raise ArgumentError, "Seat number #{seat_number} does not exist at this table" if seat_number > @seats.size || seat_number < 1
|
112
|
+
raise ArgumentError, "Seat number #{seat_number} is already taken by another player" if @seats[seat_number - 1].taken?
|
113
|
+
@seats[seat_number - 1].player = player
|
114
|
+
return self
|
115
|
+
end
|
116
|
+
@seats.each_index do |x|
|
117
|
+
if !@seats[x].taken?
|
118
|
+
@seats[x].player = player
|
119
|
+
return self
|
30
120
|
end
|
31
121
|
end
|
32
122
|
self
|
33
123
|
end
|
34
124
|
|
35
125
|
def remove player
|
36
|
-
@seats.
|
37
|
-
|
126
|
+
@seats.each_index do |x|
|
127
|
+
if @seats[x].player == player
|
128
|
+
@seats[x].player = nil
|
129
|
+
end
|
130
|
+
end
|
38
131
|
end
|
39
132
|
|
40
133
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class GameLogger
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
@log = Logger.new(STDOUT)
|
5
|
+
@log.sev_threshold = Logger::INFO
|
6
|
+
@log.formatter = proc do |severity, datetime, progname, msg|
|
7
|
+
"#{datetime}: #{msg}\n"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def debug message
|
12
|
+
@log.debug(message)
|
13
|
+
end
|
14
|
+
|
15
|
+
def info message
|
16
|
+
@log.info(message)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/rora.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
|
+
require 'rora/utils/game_logger'
|
1
2
|
require 'rora/model/board'
|
2
3
|
require 'rora/model/card'
|
3
4
|
require 'rora/model/deck'
|
5
|
+
require 'rora/model/game'
|
4
6
|
require 'rora/model/hand'
|
5
7
|
require 'rora/model/hand_type'
|
8
|
+
require 'rora/model/player'
|
6
9
|
require 'rora/model/pot'
|
7
10
|
require 'rora/model/rank'
|
11
|
+
require 'rora/model/seat'
|
8
12
|
require 'rora/model/starting_hand'
|
9
13
|
require 'rora/model/suit'
|
10
|
-
|
14
|
+
require 'rora/model/table'
|
11
15
|
require 'rora/repository/hand_repository'
|
12
|
-
require 'rora/repository/starting_hand_repository'
|
16
|
+
require 'rora/repository/starting_hand_repository'
|
17
|
+
require 'logger'
|
@@ -2,6 +2,10 @@ require File.expand_path("../../rora_test", File.dirname(__FILE__))
|
|
2
2
|
|
3
3
|
class BoardTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
+
def setup
|
6
|
+
@board = Board.new "AS,KS,QS,JS,TS"
|
7
|
+
end
|
8
|
+
|
5
9
|
test "should raise an error when a board is created with less than 3 cards" do
|
6
10
|
assert_raise ArgumentError do
|
7
11
|
Board.new "AS,KS"
|
@@ -26,6 +30,8 @@ class BoardTest < ActiveSupport::TestCase
|
|
26
30
|
|
27
31
|
test "the board should have three cards if the board was initialized with the flop" do
|
28
32
|
assert_equal 3, Board.new("AS,KS,QS").cards.size
|
33
|
+
b = Board.new("AS,KS,QS")
|
34
|
+
puts b.flop
|
29
35
|
end
|
30
36
|
|
31
37
|
test "the board should have four cards if the board was initialized with the flop and turn" do
|
@@ -111,27 +117,23 @@ class BoardTest < ActiveSupport::TestCase
|
|
111
117
|
end
|
112
118
|
|
113
119
|
test "should return false if the board does not contain the given card" do
|
114
|
-
|
115
|
-
assert_equal false, board.contains?("3D")
|
116
|
-
assert_equal false, board.contains?(Card.new("3D"))
|
120
|
+
assert_equal false, @board.contains?("3D")
|
121
|
+
assert_equal false, @board.contains?(Card.new("3D"))
|
117
122
|
end
|
118
123
|
|
119
124
|
test "should return true if the boad does contain the given card" do
|
120
|
-
|
121
|
-
assert_equal true, board.contains?("
|
122
|
-
assert_equal true, board.contains?(Card.new("AS"))
|
125
|
+
assert_equal true, @board.contains?("TS")
|
126
|
+
assert_equal true, @board.contains?(Card.new("AS"))
|
123
127
|
end
|
124
128
|
|
125
129
|
test "should return false if the board does not contain any of the given cards" do
|
126
|
-
|
127
|
-
assert_equal false, board.contains_any?(
|
128
|
-
assert_equal false, board.contains_any?("AH,KH,QH")
|
130
|
+
assert_equal false, @board.contains_any?(Card.to_cards("AH,KH,QH"))
|
131
|
+
assert_equal false, @board.contains_any?("AH,KH,QH")
|
129
132
|
end
|
130
133
|
|
131
134
|
test "should return true if the board contains at least one of the given cards" do
|
132
|
-
|
133
|
-
assert_equal true, board.contains_any?(
|
134
|
-
assert_equal true, board.contains_any?("AH,KH,QH,JH,KS")
|
135
|
+
assert_equal true, @board.contains_any?(Card.to_cards("AH,KH,QH,JH,KS"))
|
136
|
+
assert_equal true, @board.contains_any?("AH,KH,QH,JH,KS")
|
135
137
|
end
|
136
138
|
|
137
139
|
end
|
@@ -2,6 +2,10 @@ require File.expand_path("../../rora_test", File.dirname(__FILE__))
|
|
2
2
|
|
3
3
|
class CardTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
+
def setup
|
6
|
+
@card = Card.new("AS")
|
7
|
+
end
|
8
|
+
|
5
9
|
test "should be able to create a card with the specified rank and suit" do
|
6
10
|
card = Card.new(Rank::ACE, Suit::SPADE)
|
7
11
|
assert_equal card.rank, Rank::ACE
|
@@ -18,20 +22,25 @@ class CardTest < ActiveSupport::TestCase
|
|
18
22
|
assert_raise ArgumentError do
|
19
23
|
card = Card.new("A")
|
20
24
|
end
|
25
|
+
assert_raise ArgumentError do
|
26
|
+
card = Card.new("ASK")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
test "a card should have an id" do
|
31
|
+
assert_equal 1927, @card.id
|
21
32
|
end
|
22
33
|
|
23
34
|
test "a card id should be equal to the product of the card suit id and rank id" do
|
24
|
-
card
|
25
|
-
assert_equal card.id, (Rank::ACE.id * Suit::SPADE.id)
|
35
|
+
assert_equal @card.id, (Rank::ACE.id * Suit::SPADE.id)
|
26
36
|
end
|
27
37
|
|
28
|
-
test "a card
|
29
|
-
|
30
|
-
assert_equal card.value, (Rank::ACE.value + Suit::SPADE.value)
|
38
|
+
test "a card should have a key" do
|
39
|
+
assert_equal "AS", @card.key
|
31
40
|
end
|
32
41
|
|
33
42
|
test "a card key should be equal to the concatenation of the card suit key and rank key" do
|
34
|
-
assert_equal "AS",
|
43
|
+
assert_equal "AS", (Rank::ACE.key + Suit::SPADE.key)
|
35
44
|
end
|
36
45
|
|
37
46
|
test "a card should have a name" do
|
@@ -39,7 +48,7 @@ class CardTest < ActiveSupport::TestCase
|
|
39
48
|
end
|
40
49
|
|
41
50
|
test "should generate a readable string representation" do
|
42
|
-
assert_equal "Card:
|
51
|
+
assert_equal "Card: Ace of Spades", Card.new("AS").to_s
|
43
52
|
end
|
44
53
|
|
45
54
|
test "should convert an arbitrarily long string of characters into an array of cards" do
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path("../../rora_test", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class GameTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@game = Game.new
|
7
|
+
end
|
8
|
+
|
9
|
+
test "play the game" do
|
10
|
+
for i in 0..5 do
|
11
|
+
player = Player.new("Player #{i}", 100000)
|
12
|
+
@game.add player
|
13
|
+
player.start_session
|
14
|
+
end
|
15
|
+
|
16
|
+
@game.shuffle_deck
|
17
|
+
@game.assign_button
|
18
|
+
@game.post_small_blind
|
19
|
+
@game.post_big_blind
|
20
|
+
@game.deal_pocket_cards
|
21
|
+
@game.run_preflop_betting_round
|
22
|
+
end
|
23
|
+
end
|
@@ -16,19 +16,19 @@ class HandTypeTest < ActiveSupport::TestCase
|
|
16
16
|
|
17
17
|
test "should raise an error when performing a lookup with an invalid key" do
|
18
18
|
assert_raise ArgumentError do
|
19
|
-
HandType.get
|
19
|
+
HandType.get "L"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
test "should raise an error when performing a lookup with an empty key" do
|
24
24
|
assert_raise ArgumentError do
|
25
|
-
HandType.get
|
25
|
+
HandType.get ""
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
test "should raise an error when performing a lookup with a nil key" do
|
30
30
|
assert_raise TypeError do
|
31
|
-
HandType.get
|
31
|
+
HandType.get nil
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.expand_path("../../rora_test", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class PlayerTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@game = Game.new
|
7
|
+
@player = Player.new "Frank", 100000
|
8
|
+
RSpec::Mocks::setup(self)
|
9
|
+
end
|
10
|
+
|
11
|
+
test "a player should have a name" do
|
12
|
+
assert_equal "foo", Player.new("foo", 999).name
|
13
|
+
end
|
14
|
+
|
15
|
+
test "a player should have a stack" do
|
16
|
+
assert_equal 1000, Player.new("feff", 1000).stack
|
17
|
+
end
|
18
|
+
|
19
|
+
test "should raise an error if the player name is nil" do
|
20
|
+
assert_raise_message "The player name cannot be nil", ArgumentError do
|
21
|
+
Player.new nil, 2000
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
test "a player should be able to join a poker game" do
|
26
|
+
@player.join_game @game
|
27
|
+
assert_equal @player, @game.table.seat(1).player
|
28
|
+
end
|
29
|
+
|
30
|
+
test "a player should be able to join a poker game at a seat of their choosing" do
|
31
|
+
@player.join_game @game, 3
|
32
|
+
assert_equal @player, @game.table.seat(3).player
|
33
|
+
end
|
34
|
+
|
35
|
+
test "a player should not be able to join a poker game when the poker table is full" do
|
36
|
+
@game.table.stub(:full?).and_return(true)
|
37
|
+
assert_raise_message "Frank cannot join this game, the table is full", ArgumentError do
|
38
|
+
@player.join_game @game
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
test "a player should not be able to join more than one game" do
|
43
|
+
@player.join_game @game
|
44
|
+
assert_raise_message "Frank cannot join this game, this player is already playing another game", ArgumentError do
|
45
|
+
@player.join_game @game
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
test "a player should not be able to start a session at a table if they do not have a seat at the table" do
|
50
|
+
assert_raise_message "Frank is not sitting at a table", ArgumentError do
|
51
|
+
@player.start_session
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
test "a player should be able to start a session at the poker table" do
|
56
|
+
@player.join_game @game
|
57
|
+
@player.start_session
|
58
|
+
assert_equal false, @player.sitting_out?
|
59
|
+
end
|
60
|
+
|
61
|
+
test "a player should be able to leave a game" do
|
62
|
+
@player.join_game @game
|
63
|
+
@player.start_session
|
64
|
+
@player.leave_game
|
65
|
+
assert_equal nil, @player.game
|
66
|
+
end
|
67
|
+
|
68
|
+
test "a player should not be able to post a small blind if the player has not joined a game" do
|
69
|
+
assert_raise_message "Frank has not joined a game, cannot post the small blind", ArgumentError do
|
70
|
+
@player.post_small_blind
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
test "a player should not be able to post a big blind if the player has not joined a game" do
|
75
|
+
assert_raise_message "Frank has not joined a game, cannot post the big blind", ArgumentError do
|
76
|
+
@player.post_big_blind
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
test "a player should not be able to post a small blind if the player is sitting out" do
|
81
|
+
@player.join_game @game
|
82
|
+
assert_raise_message "Frank is sitting out, cannot post the small blind", ArgumentError do
|
83
|
+
@player.post_small_blind
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
test "a player should not be able to post a big blind if the player is sitting out" do
|
88
|
+
@player.join_game @game
|
89
|
+
assert_raise_message "Frank is sitting out, cannot post the big blind", ArgumentError do
|
90
|
+
@player.post_big_blind
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
test "a player should be able to post a small blind" do
|
95
|
+
@player.join_game @game
|
96
|
+
@player.start_session
|
97
|
+
@player.post_small_blind
|
98
|
+
assert_equal 0.25, @game.pot.value
|
99
|
+
end
|
100
|
+
|
101
|
+
test "a player should be able to post a big blind" do
|
102
|
+
@player.join_game @game
|
103
|
+
@player.start_session
|
104
|
+
@player.post_big_blind
|
105
|
+
assert_equal 0.50, @game.pot.value
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
data/test/rora/model/pot_test.rb
CHANGED
@@ -2,27 +2,34 @@ require File.expand_path("../../rora_test", File.dirname(__FILE__))
|
|
2
2
|
|
3
3
|
class PotTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
+
def setup
|
6
|
+
@pot = Pot.new
|
7
|
+
end
|
8
|
+
|
5
9
|
test "a new post should have a total of 0 dollars" do
|
6
|
-
assert_equal 0,
|
10
|
+
assert_equal 0, @pot.value
|
11
|
+
end
|
12
|
+
|
13
|
+
test "should raise an error when attempting to add a negative value to the pot" do
|
14
|
+
assert_raise ArgumentError do
|
15
|
+
@pot.add -0.50
|
16
|
+
end
|
7
17
|
end
|
8
18
|
|
9
19
|
test "should be able to add money to the pot" do
|
10
|
-
|
11
|
-
assert_equal 5, pot.total
|
20
|
+
assert_equal 5, @pot.add(5).value
|
12
21
|
end
|
13
22
|
|
14
23
|
test "should be able to add money with decimals to the pot" do
|
15
|
-
|
16
|
-
assert_equal 5.75, pot.total
|
24
|
+
assert_equal 5.75, @pot.add(5.75).value
|
17
25
|
end
|
18
26
|
|
19
27
|
test "should be able to perform compound addtion operations" do
|
20
|
-
|
21
|
-
assert_equal 6.25, pot.total
|
28
|
+
assert_equal 6.25, @pot.add(2).add(2.25).add(2).value
|
22
29
|
end
|
23
30
|
|
24
31
|
test "should return a string representation of the pot" do
|
25
|
-
assert_equal "Pot: $300.00",
|
32
|
+
assert_equal "Pot: $300.00", @pot.add(300.00).to_s
|
26
33
|
end
|
27
34
|
|
28
35
|
end
|
@@ -21,25 +21,25 @@ class RankTest < ActiveSupport::TestCase
|
|
21
21
|
end
|
22
22
|
|
23
23
|
test "should raise an error when performing a lookup with an invalid key" do
|
24
|
-
|
25
|
-
Rank.get
|
24
|
+
assert_raise_message "No rank exists for key 'L'", ArgumentError do
|
25
|
+
Rank.get "L"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
test "should raise an error when performing a lookup with an empty key" do
|
30
|
-
|
31
|
-
Rank.get
|
30
|
+
assert_raise_message "No rank exists for key ''", ArgumentError do
|
31
|
+
Rank.get ""
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
test "should raise an error when performing a lookup with a nil key" do
|
36
36
|
assert_raise TypeError do
|
37
|
-
Rank.get
|
37
|
+
Rank.get nil
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
test "should generate a readable string representation" do
|
42
|
-
assert_equal "Rank:
|
42
|
+
assert_equal "Rank: Ace", Rank::ACE.to_s
|
43
43
|
end
|
44
44
|
|
45
45
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.expand_path("../../rora_test", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class SeatTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@seat = Seat.new 2
|
7
|
+
end
|
8
|
+
|
9
|
+
test "should raise an error when a seat is created with a seat number less than 1" do
|
10
|
+
assert_raise ArgumentError do
|
11
|
+
Seat.new 0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test "the seat should have a seat number" do
|
16
|
+
assert_equal 2, @seat.number
|
17
|
+
end
|
18
|
+
|
19
|
+
test "the seat should not be taken when a player is not sitting in it" do
|
20
|
+
assert_equal false, @seat.taken?
|
21
|
+
end
|
22
|
+
|
23
|
+
test "the seat should be taken when a player is sitting in it" do
|
24
|
+
@seat.player = "player"
|
25
|
+
assert_equal true, @seat.taken?
|
26
|
+
end
|
27
|
+
|
28
|
+
test "the seat should not have the dealer button" do
|
29
|
+
assert_equal false, @seat.button?
|
30
|
+
end
|
31
|
+
|
32
|
+
test "the seat should have the dealer button" do
|
33
|
+
@seat.button = true
|
34
|
+
assert_equal true, @seat.button?
|
35
|
+
end
|
36
|
+
|
37
|
+
test "should return a string representation of the seat" do
|
38
|
+
assert_equal "Seat: 2", @seat.to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|