acpc_poker_basic_proxy 1.0.0 → 2.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e362ce7f2796d6a1dc1b1905e9651abf064ac4ca
4
- data.tar.gz: 61a6d8823a269da8e878fc79a82c5f8a519ea6a8
3
+ metadata.gz: c75b02eafb76e6ecd4895bad73bf7abdeb0377e1
4
+ data.tar.gz: 13699952e83f7ed0812880b7de60eed4ede2bacb
5
5
  SHA512:
6
- metadata.gz: c2d00ac00fdb9190c10f1bf1ecbac9a15eae3e75dc4877ad224dc5da70c89b04e73b85fb1f6e0b54f56006413fc0fa474370a609648bb223c38f6761cc7ed99f
7
- data.tar.gz: e9974f98efcd84cec40a42dcb4699efb781a2470a6339e38dd0da7c2f3a4a1caf3690f388da44a4e8a55a171b461c88baf1d4b2031b4d305e9ea630cedb7e29f
6
+ metadata.gz: d093f6987211ffa930f1231edc270861ac4afd19b360f31f0b2da6da22a49a6f6726687a5165c6458a2a67d44c38e83abcfbb7d9fbc3a3c8e12ce0dc4c5b502d
7
+ data.tar.gz: c66b69e39fa01f95b1b5aeb7eecd6b073bf6a9cd3da7f6320455b209720c553a6f7c8d47d519448a420b9024c7e2f7111adc7ea2a3254e3b0032c0cd5d0e25a1
@@ -10,8 +10,8 @@ Gem::Specification.new do |s|
10
10
  s.summary = %q{ACPC Poker Basic Proxy}
11
11
  s.description = %q{Basic proxy to connect to the ACPC Dealer.}
12
12
 
13
- s.add_dependency 'acpc_poker_types', '~> 3.0'
14
- s.add_dependency 'dmorrill10-utils', '~> 1.0'
13
+ s.add_dependency 'acpc_poker_types', '~> 3.1'
14
+ s.add_dependency 'contextual_exceptions', '~> 0.0'
15
15
 
16
16
  s.rubyforge_project = "acpc_poker_basic_proxy"
17
17
 
@@ -22,9 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency 'turn', '~> 0.9'
23
23
  s.add_development_dependency 'minitest', '~> 4.7'
24
24
  s.add_development_dependency 'mocha', '~> 0.13'
25
- s.add_development_dependency 'acpc_dealer', '~> 0.0'
26
25
  s.add_development_dependency 'awesome_print', '~> 1.0'
27
26
  s.add_development_dependency 'pry-rescue', '~> 1.0'
28
27
  s.add_development_dependency 'simplecov', '~> 0.7'
29
- s.add_development_dependency 'acpc_dealer', '~> 0.0'
30
- end
28
+ s.add_development_dependency 'acpc_dealer', '~> 1.0'
29
+ end
@@ -1,6 +1,7 @@
1
1
  require 'acpc_poker_basic_proxy/version'
2
2
 
3
3
  require 'acpc_poker_basic_proxy/basic_proxy'
4
+ require 'acpc_poker_basic_proxy/communication_logic'
4
5
 
5
6
  module AcpcPokerBasicProxy
6
7
  end
@@ -1,17 +1,20 @@
1
+ require 'acpc_dealer'
1
2
 
2
- require 'acpc_poker_basic_proxy/communication_logic/acpc_dealer_communicator'
3
- require 'acpc_poker_basic_proxy/communication_logic/acpc_dealer_information'
3
+ require 'acpc_poker_basic_proxy/communication_logic/dealer_stream'
4
4
  require 'acpc_poker_basic_proxy/communication_logic/action_sender'
5
5
  require 'acpc_poker_basic_proxy/communication_logic/match_state_receiver'
6
6
 
7
+ require 'contextual_exceptions'
8
+ using ContextualExceptions::ClassRefinement
9
+
7
10
  # A bot that connects to a dealer as a proxy.
8
11
  module AcpcPokerBasicProxy
9
12
  class BasicProxy
10
13
  exceptions :initial_match_state_not_yet_received
11
14
 
12
- # @param [AcpcDealerInformation] dealer_information Information about the dealer to which this bot should connect.
15
+ # @param [AcpcDealer::ConnectionInformation] dealer_information Information about the dealer to which this bot should connect.
13
16
  def initialize(dealer_information)
14
- @dealer_communicator = CommunicationLogic::AcpcDealerCommunicator.new dealer_information.port_number, dealer_information.host_name, dealer_information.millisecond_response_timeout
17
+ @dealer_communicator = CommunicationLogic::DealerStream.new dealer_information.port_number, dealer_information.host_name, dealer_information.millisecond_response_timeout
15
18
  end
16
19
 
17
20
  # @param [PokerAction] action The action to be sent.
@@ -1,5 +1,4 @@
1
- require 'acpc_poker_basic_proxy/communication_logic/acpc_dealer_communicator'
2
- require 'acpc_poker_basic_proxy/communication_logic/acpc_dealer_information'
1
+ require 'acpc_poker_basic_proxy/communication_logic/dealer_stream'
3
2
  require 'acpc_poker_basic_proxy/communication_logic/match_state_receiver'
4
3
  require 'acpc_poker_basic_proxy/communication_logic/action_sender'
5
4
 
@@ -1,8 +1,10 @@
1
1
 
2
- require 'dmorrill10-utils/class'
3
2
  require 'acpc_poker_types/poker_action'
4
3
  require 'acpc_poker_types/match_state'
5
4
 
5
+ require 'contextual_exceptions'
6
+ using ContextualExceptions::ClassRefinement
7
+
6
8
  # Sends poker actions according to the ACPC protocol.
7
9
  module AcpcPokerBasicProxy
8
10
  module CommunicationLogic
@@ -0,0 +1,150 @@
1
+ require 'socket'
2
+ require 'delegate'
3
+
4
+ module AcpcPokerBasicProxy
5
+ module CommunicationLogic
6
+ module IoRefinement
7
+ refine IO do
8
+ # Checks if the socket is ready to be read from.
9
+ # @param [Integer] timeout_in_seconds Amount of time to wait for the sever to respond, in seconds. Must be positive or +nil+.
10
+ # @return [Boolean] +true+ if the socket is ready to be read from, +false+ otherwise.
11
+ def ready_to_read?(timeout_in_seconds=nil)
12
+ read_array = [self]
13
+ write_array = nil
14
+ error_array = nil
15
+
16
+ select?(read_array, write_array, error_array, timeout_in_seconds)
17
+ end
18
+
19
+ # Checks if the socket is ready to be written to.
20
+ # @param [Integer] timeout_in_seconds Amount of time to wait for the sever to respond, in seconds. Must be positive or +nil+.
21
+ # @return [Boolean] +true+ if the socket is ready to be written to, +false+ otherwise.
22
+ def ready_to_write?(timeout_in_seconds=nil)
23
+ read_array = nil
24
+ write_array = [self]
25
+ error_array = nil
26
+
27
+ select?(read_array, write_array, error_array, timeout_in_seconds)
28
+ end
29
+
30
+ private
31
+
32
+ # @see IO#select
33
+ def select?(read_array, write_array=[], error_array=[], timeout_in_seconds=nil)
34
+ IO.select(read_array, write_array, error_array, timeout_in_seconds) != nil
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ using AcpcPokerBasicProxy::CommunicationLogic::IoRefinement
41
+
42
+ require 'contextual_exceptions'
43
+ using ContextualExceptions::ClassRefinement
44
+
45
+ # Communication service to the ACPC Dealer.
46
+ # It acts solely as an abstraction of the communication protocol and
47
+ # implements the main Ruby communication interface through 'gets' and 'puts'
48
+ # methods.
49
+ module AcpcPokerBasicProxy
50
+ module CommunicationLogic
51
+ class DealerStream < DelegateClass(TCPSocket)
52
+ exceptions :unable_to_connect_to_dealer, :unable_to_write_to_dealer, :unable_to_get_from_dealer
53
+
54
+ # @return [String] The ACPC dealer version label.
55
+ VERSION_LABEL = 'VERSION'
56
+
57
+ # @return [Hash] The ACPC dealer version numbers.
58
+ VERSION_NUMBERS = {:major => 2, :minor => 0, :revision => 0}
59
+
60
+ # @return [String] Dealer specified string terminator.
61
+ TERMINATION_STRING = "\r\n"
62
+
63
+ # @param [Integer] port The port on which to connect to the dealer.
64
+ # @param [String] host_name The host on which the dealer is running. Defaults to 'localhost'
65
+ # @param [Integer] millisecond_response_timeout The dealer's response timeout, in milliseconds.
66
+ # @raise AcpcDealerConnectionError, UnableToWriteToDealer
67
+ def initialize(port, host_name='localhost', millisecond_response_timeout=nil)
68
+ begin
69
+ @dealer_socket = TCPSocket.new(host_name, port)
70
+ super @dealer_socket
71
+
72
+ @response_timeout_in_seconds = if millisecond_response_timeout
73
+ millisecond_response_timeout/(10**3).to_r
74
+ else
75
+ nil
76
+ end
77
+
78
+ send_version_string_to_dealer
79
+ rescue UnableToWriteToDealer
80
+ raise
81
+ rescue Errno::ECONNREFUSED => e
82
+ handle_error UnableToConnectToDealer, "Unable to connect to the dealer on #{host_name} through port #{port}", e
83
+ end
84
+ end
85
+
86
+ # Retrieves a string from the dealer.
87
+ #
88
+ # @return [String] A string from the dealer.
89
+ # @raise UnableToGetFromDealer
90
+ def gets
91
+ begin
92
+ string_from_dealer
93
+ rescue => e
94
+ handle_error UnableToGetFromDealer, "Unable to get a string from the dealer", e
95
+ end
96
+ end
97
+
98
+ # Sends a given +string+ to the dealer.
99
+ #
100
+ # @param [String] string The string to send.
101
+ # @return (see #send_string_to_dealer)
102
+ # @raise UnableToWriteToDealer
103
+ def write(string)
104
+ begin
105
+ num_bytes_written = send_string_to_dealer string
106
+ rescue => e
107
+ handle_error UnableToWriteToDealer, "Unable to send the string, \"#{string}\", to the dealer", e
108
+ end
109
+ end
110
+
111
+ # @see TCPSocket#ready_to_write?
112
+ def ready_to_write?
113
+ @dealer_socket.ready_to_write? @response_timeout_in_seconds
114
+ end
115
+
116
+ # @see TCPSocket#ready_to_read?
117
+ def ready_to_read?
118
+ @dealer_socket.ready_to_read? @response_timeout_in_seconds
119
+ end
120
+
121
+ private
122
+
123
+ def handle_error(exception, message, context_exception)
124
+ close if @dealer_socket && !closed?
125
+ raise exception.with_context(message, context_exception)
126
+ end
127
+
128
+ # @return (see #send_string_to_dealer)
129
+ def send_version_string_to_dealer
130
+ version_string = "#{VERSION_LABEL}:#{VERSION_NUMBERS[:major]}.#{VERSION_NUMBERS[:minor]}.#{VERSION_NUMBERS[:revision]}"
131
+ begin
132
+ send_string_to_dealer version_string
133
+ rescue => e
134
+ handle_error UnableToWriteToDealer, "Unable to send version string, \"#{version_string}\", to the dealer", e
135
+ end
136
+ end
137
+
138
+ # @return [Integer] The number of bytes written to the dealer.
139
+ def send_string_to_dealer(string)
140
+ raise unless ready_to_write?
141
+ @dealer_socket.write(string + TERMINATION_STRING)
142
+ end
143
+
144
+ def string_from_dealer
145
+ raise unless ready_to_read?
146
+ @dealer_socket.gets.chomp
147
+ end
148
+ end
149
+ end
150
+ end
@@ -1,3 +1,3 @@
1
1
  module AcpcPokerBasicProxy
2
- VERSION = "1.0.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -1,9 +1,9 @@
1
1
 
2
2
  require_relative 'support/spec_helper'
3
3
 
4
+ require 'acpc_poker_types/acpc_dealer_data/poker_match_data'
4
5
  require 'acpc_poker_types/poker_action'
5
6
  require 'acpc_poker_types/match_state'
6
- require 'acpc_poker_types/acpc_dealer_data/poker_match_data'
7
7
  require 'acpc_dealer'
8
8
 
9
9
  require 'acpc_poker_basic_proxy/communication_logic/action_sender'
@@ -19,10 +19,10 @@ describe BasicProxy do
19
19
  port_number = 9001
20
20
  host_name = 'localhost'
21
21
  millisecond_response_timeout = 0
22
- delaer_info = AcpcDealerInformation.new host_name, port_number, millisecond_response_timeout
23
- @dealer_communicator = mock 'AcpcDealerCommunicator'
22
+ delaer_info = AcpcDealer::ConnectionInformation.new port_number, host_name, millisecond_response_timeout
23
+ @dealer_communicator = mock 'DealerStream'
24
24
 
25
- AcpcDealerCommunicator.expects(:new).once.with(port_number, host_name, millisecond_response_timeout).returns(@dealer_communicator)
25
+ DealerStream.expects(:new).once.with(port_number, host_name, millisecond_response_timeout).returns(@dealer_communicator)
26
26
 
27
27
  @patient = BasicProxy.new delaer_info
28
28
  end
@@ -14,7 +14,7 @@
14
14
  <img src="./assets/0.7.1/loading.gif" alt="loading"/>
15
15
  </div>
16
16
  <div id="wrapper" style="display:none;">
17
- <div class="timestamp">Generated <abbr class="timeago" title="2013-05-05T23:25:43-07:00">2013-05-05T23:25:43-07:00</abbr></div>
17
+ <div class="timestamp">Generated <abbr class="timeago" title="2013-05-08T18:52:12-06:00">2013-05-08T18:52:12-06:00</abbr></div>
18
18
  <ul class="group_tabs"></ul>
19
19
 
20
20
  <div id="content">
@@ -24,17 +24,17 @@
24
24
  (<span class="covered_percent"><span class="green">100.0%</span></span>
25
25
  covered at
26
26
  <span class="covered_strength">
27
- <span class="green">
28
- 498.28
27
+ <span class="red">
28
+ 0.0
29
29
  </span>
30
30
  </span> hits/line)
31
31
  </h2>
32
32
  <a name="AllFiles"></a>
33
33
  <div>
34
- <b>4</b> files in total.
35
- <b>108</b> relevant lines.
36
- <span class="green"><b>108</b> lines covered</span> and
37
- <span class="red"><b>0</b> lines missed </span>
34
+ <b>0</b> files in total.
35
+ <b>0.0</b> relevant lines.
36
+ <span class="green"><b>0.0</b> lines covered</span> and
37
+ <span class="red"><b>0.0</b> lines missed </span>
38
38
  </div>
39
39
  <table class="file_list">
40
40
  <thead>
@@ -50,46 +50,6 @@
50
50
  </thead>
51
51
  <tbody>
52
52
 
53
- <tr>
54
- <td class="strong"><a href="#6d7eac05018d7fba2ddcb5b6be6f51e3ce2e9a59" class="src_link" title="acpc_dealer_information_spec.rb">acpc_dealer_information_spec.rb</a></td>
55
- <td class="green strong">100.0 %</td>
56
- <td>10</td>
57
- <td>5</td>
58
- <td>5</td>
59
- <td>0</td>
60
- <td>1.0</td>
61
- </tr>
62
-
63
- <tr>
64
- <td class="strong"><a href="#2dbea4ee5e8728a37f0ffe80b3d210c1c27ea88f" class="src_link" title="action_sender_spec.rb">action_sender_spec.rb</a></td>
65
- <td class="green strong">100.0 %</td>
66
- <td>91</td>
67
- <td>48</td>
68
- <td>48</td>
69
- <td>0</td>
70
- <td>932.6</td>
71
- </tr>
72
-
73
- <tr>
74
- <td class="strong"><a href="#481520361b6598d44a41e4d9dd50099a0ffd76c9" class="src_link" title="basic_proxy_spec.rb">basic_proxy_spec.rb</a></td>
75
- <td class="green strong">100.0 %</td>
76
- <td>70</td>
77
- <td>38</td>
78
- <td>38</td>
79
- <td>0</td>
80
- <td>221.2</td>
81
- </tr>
82
-
83
- <tr>
84
- <td class="strong"><a href="#9fc603b73eef7325707cdadffd0b52551b49e031" class="src_link" title="match_state_receiver_spec.rb">match_state_receiver_spec.rb</a></td>
85
- <td class="green strong">100.0 %</td>
86
- <td>38</td>
87
- <td>17</td>
88
- <td>17</td>
89
- <td>0</td>
90
- <td>838.3</td>
91
- </tr>
92
-
93
53
  </tbody>
94
54
  </table>
95
55
  </div>
@@ -106,1332 +66,6 @@
106
66
 
107
67
  <div class="source_files">
108
68
 
109
- <div class="source_table" id="6d7eac05018d7fba2ddcb5b6be6f51e3ce2e9a59">
110
- <div class="header">
111
- <h3>acpc_dealer_information_spec.rb</h3>
112
- <h4><span class="green">100.0 %</span> covered</h4>
113
- <div>
114
- <b>5</b> relevant lines.
115
- <span class="green"><b>5</b> lines covered</span> and
116
- <span class="red"><b>0</b> lines missed.</span>
117
- </div>
118
- </div>
119
-
120
- <pre>
121
- <ol>
122
-
123
- <li class="never" data-hits="" data-linenumber="1">
124
-
125
-
126
- <code class="ruby"></code>
127
- </li>
128
-
129
- <li class="covered" data-hits="1" data-linenumber="2">
130
- <span class="hits">1</span>
131
-
132
- <code class="ruby">require_relative &#39;support/spec_helper&#39;</code>
133
- </li>
134
-
135
- <li class="never" data-hits="" data-linenumber="3">
136
-
137
-
138
- <code class="ruby"></code>
139
- </li>
140
-
141
- <li class="covered" data-hits="1" data-linenumber="4">
142
- <span class="hits">1</span>
143
-
144
- <code class="ruby">require &#39;acpc_poker_basic_proxy/communication_logic/acpc_dealer_information&#39;</code>
145
- </li>
146
-
147
- <li class="never" data-hits="" data-linenumber="5">
148
-
149
-
150
- <code class="ruby"></code>
151
- </li>
152
-
153
- <li class="covered" data-hits="1" data-linenumber="6">
154
- <span class="hits">1</span>
155
-
156
- <code class="ruby">describe AcpcPokerBasicProxy::CommunicationLogic::AcpcDealerInformation do</code>
157
- </li>
158
-
159
- <li class="covered" data-hits="1" data-linenumber="7">
160
- <span class="hits">1</span>
161
-
162
- <code class="ruby"> it &#39;&#39; do</code>
163
- </li>
164
-
165
- <li class="covered" data-hits="1" data-linenumber="8">
166
- <span class="hits">1</span>
167
-
168
- <code class="ruby"> skip &quot;Since this class only holds data right now, there&#39;s no need for tests&quot;</code>
169
- </li>
170
-
171
- <li class="never" data-hits="" data-linenumber="9">
172
-
173
-
174
- <code class="ruby"> end</code>
175
- </li>
176
-
177
- <li class="never" data-hits="" data-linenumber="10">
178
-
179
-
180
- <code class="ruby">end</code>
181
- </li>
182
-
183
- </ol>
184
- </pre>
185
- </div>
186
-
187
- <div class="source_table" id="2dbea4ee5e8728a37f0ffe80b3d210c1c27ea88f">
188
- <div class="header">
189
- <h3>action_sender_spec.rb</h3>
190
- <h4><span class="green">100.0 %</span> covered</h4>
191
- <div>
192
- <b>48</b> relevant lines.
193
- <span class="green"><b>48</b> lines covered</span> and
194
- <span class="red"><b>0</b> lines missed.</span>
195
- </div>
196
- </div>
197
-
198
- <pre>
199
- <ol>
200
-
201
- <li class="never" data-hits="" data-linenumber="1">
202
-
203
-
204
- <code class="ruby"></code>
205
- </li>
206
-
207
- <li class="covered" data-hits="1" data-linenumber="2">
208
- <span class="hits">1</span>
209
-
210
- <code class="ruby">require_relative &#39;support/spec_helper&#39;</code>
211
- </li>
212
-
213
- <li class="never" data-hits="" data-linenumber="3">
214
-
215
-
216
- <code class="ruby"></code>
217
- </li>
218
-
219
- <li class="covered" data-hits="1" data-linenumber="4">
220
- <span class="hits">1</span>
221
-
222
- <code class="ruby">require &#39;acpc_poker_types/poker_action&#39;</code>
223
- </li>
224
-
225
- <li class="covered" data-hits="1" data-linenumber="5">
226
- <span class="hits">1</span>
227
-
228
- <code class="ruby">require &#39;acpc_poker_types/match_state&#39;</code>
229
- </li>
230
-
231
- <li class="covered" data-hits="1" data-linenumber="6">
232
- <span class="hits">1</span>
233
-
234
- <code class="ruby">require &#39;acpc_poker_types/acpc_dealer_data/poker_match_data&#39;</code>
235
- </li>
236
-
237
- <li class="covered" data-hits="1" data-linenumber="7">
238
- <span class="hits">1</span>
239
-
240
- <code class="ruby">require &#39;acpc_dealer&#39;</code>
241
- </li>
242
-
243
- <li class="never" data-hits="" data-linenumber="8">
244
-
245
-
246
- <code class="ruby"></code>
247
- </li>
248
-
249
- <li class="covered" data-hits="1" data-linenumber="9">
250
- <span class="hits">1</span>
251
-
252
- <code class="ruby">require &#39;acpc_poker_basic_proxy/communication_logic/action_sender&#39;</code>
253
- </li>
254
-
255
- <li class="never" data-hits="" data-linenumber="10">
256
-
257
-
258
- <code class="ruby"></code>
259
- </li>
260
-
261
- <li class="covered" data-hits="1" data-linenumber="11">
262
- <span class="hits">1</span>
263
-
264
- <code class="ruby">include AcpcPokerBasicProxy::CommunicationLogic</code>
265
- </li>
266
-
267
- <li class="covered" data-hits="1" data-linenumber="12">
268
- <span class="hits">1</span>
269
-
270
- <code class="ruby">include AcpcPokerTypes</code>
271
- </li>
272
-
273
- <li class="never" data-hits="" data-linenumber="13">
274
-
275
-
276
- <code class="ruby"></code>
277
- </li>
278
-
279
- <li class="covered" data-hits="1" data-linenumber="14">
280
- <span class="hits">1</span>
281
-
282
- <code class="ruby">describe ActionSender do</code>
283
- </li>
284
-
285
- <li class="covered" data-hits="1" data-linenumber="15">
286
- <span class="hits">1</span>
287
-
288
- <code class="ruby"> before(:each) do</code>
289
- </li>
290
-
291
- <li class="covered" data-hits="6" data-linenumber="16">
292
- <span class="hits">6</span>
293
-
294
- <code class="ruby"> @connection = MiniTest::Mock.new</code>
295
- </li>
296
-
297
- <li class="covered" data-hits="6" data-linenumber="17">
298
- <span class="hits">6</span>
299
-
300
- <code class="ruby"> @match_state = AcpcDealerData::PokerMatchData.parse_files(</code>
301
- </li>
302
-
303
- <li class="never" data-hits="" data-linenumber="18">
304
-
305
-
306
- <code class="ruby"> match_logs[0].actions_file_path,</code>
307
- </li>
308
-
309
- <li class="never" data-hits="" data-linenumber="19">
310
-
311
-
312
- <code class="ruby"> match_logs[0].results_file_path,</code>
313
- </li>
314
-
315
- <li class="never" data-hits="" data-linenumber="20">
316
-
317
-
318
- <code class="ruby"> match_logs[0].player_names,</code>
319
- </li>
320
-
321
- <li class="never" data-hits="" data-linenumber="21">
322
-
323
-
324
- <code class="ruby"> AcpcDealer::DEALER_DIRECTORY,</code>
325
- </li>
326
-
327
- <li class="never" data-hits="" data-linenumber="22">
328
-
329
-
330
- <code class="ruby"> 1</code>
331
- </li>
332
-
333
- <li class="never" data-hits="" data-linenumber="23">
334
-
335
-
336
- <code class="ruby"> ).data[0].data[0].action_message.state</code>
337
- </li>
338
-
339
- <li class="never" data-hits="" data-linenumber="24">
340
-
341
-
342
- <code class="ruby"> end</code>
343
- </li>
344
-
345
- <li class="never" data-hits="" data-linenumber="25">
346
-
347
-
348
- <code class="ruby"></code>
349
- </li>
350
-
351
- <li class="covered" data-hits="1" data-linenumber="26">
352
- <span class="hits">1</span>
353
-
354
- <code class="ruby"> describe &quot;#send_action&quot; do</code>
355
- </li>
356
-
357
- <li class="covered" data-hits="1" data-linenumber="27">
358
- <span class="hits">1</span>
359
-
360
- <code class="ruby"> it &#39;does not send an illegal action and raises an exception&#39; do</code>
361
- </li>
362
-
363
- <li class="never" data-hits="" data-linenumber="28">
364
-
365
-
366
- <code class="ruby"> -&gt; do</code>
367
- </li>
368
-
369
- <li class="covered" data-hits="1" data-linenumber="29">
370
- <span class="hits">1</span>
371
-
372
- <code class="ruby"> ActionSender.send_action(@connection, @match_state, &#39;illegal action format&#39;)</code>
373
- </li>
374
-
375
- <li class="covered" data-hits="1" data-linenumber="30">
376
- <span class="hits">1</span>
377
-
378
- <code class="ruby"> end.must_raise ActionSender::IllegalActionFormat</code>
379
- </li>
380
-
381
- <li class="never" data-hits="" data-linenumber="31">
382
-
383
-
384
- <code class="ruby"> end</code>
385
- </li>
386
-
387
- <li class="covered" data-hits="1" data-linenumber="32">
388
- <span class="hits">1</span>
389
-
390
- <code class="ruby"> it &#39;raises an exception if the given match state does not have the proper format&#39; do</code>
391
- </li>
392
-
393
- <li class="never" data-hits="" data-linenumber="33">
394
-
395
-
396
- <code class="ruby"> -&gt; do</code>
397
- </li>
398
-
399
- <li class="covered" data-hits="1" data-linenumber="34">
400
- <span class="hits">1</span>
401
-
402
- <code class="ruby"> ActionSender.send_action(@connection, &#39;illegal match state format&#39;, PokerAction::CALL)</code>
403
- </li>
404
-
405
- <li class="covered" data-hits="1" data-linenumber="35">
406
- <span class="hits">1</span>
407
-
408
- <code class="ruby"> end.must_raise MatchState::IncompleteMatchState</code>
409
- </li>
410
-
411
- <li class="never" data-hits="" data-linenumber="36">
412
-
413
-
414
- <code class="ruby"> end</code>
415
- </li>
416
-
417
- <li class="covered" data-hits="1" data-linenumber="37">
418
- <span class="hits">1</span>
419
-
420
- <code class="ruby"> it &#39;can send all legal actions through the provided connection without a modifier&#39; do</code>
421
- </li>
422
-
423
- <li class="covered" data-hits="1" data-linenumber="38">
424
- <span class="hits">1</span>
425
-
426
- <code class="ruby"> PokerAction::ACTIONS.each do |action|</code>
427
- </li>
428
-
429
- <li class="covered" data-hits="5" data-linenumber="39">
430
- <span class="hits">5</span>
431
-
432
- <code class="ruby"> action_that_should_be_sent = @match_state.to_s + &quot;:#{action}&quot;</code>
433
- </li>
434
-
435
- <li class="covered" data-hits="5" data-linenumber="40">
436
- <span class="hits">5</span>
437
-
438
- <code class="ruby"> @connection.expect :write, nil, [action_that_should_be_sent]</code>
439
- </li>
440
-
441
- <li class="never" data-hits="" data-linenumber="41">
442
-
443
-
444
- <code class="ruby"></code>
445
- </li>
446
-
447
- <li class="covered" data-hits="5" data-linenumber="42">
448
- <span class="hits">5</span>
449
-
450
- <code class="ruby"> ActionSender.send_action @connection, @match_state, action</code>
451
- </li>
452
-
453
- <li class="never" data-hits="" data-linenumber="43">
454
-
455
-
456
- <code class="ruby"> end</code>
457
- </li>
458
-
459
- <li class="never" data-hits="" data-linenumber="44">
460
-
461
-
462
- <code class="ruby"> end</code>
463
- </li>
464
-
465
- <li class="covered" data-hits="1" data-linenumber="45">
466
- <span class="hits">1</span>
467
-
468
- <code class="ruby"> it &#39;does not send legal unmodifiable actions that have a modifier and raises an exception&#39; do</code>
469
- </li>
470
-
471
- <li class="covered" data-hits="1" data-linenumber="46">
472
- <span class="hits">1</span>
473
-
474
- <code class="ruby"> (PokerAction::ACTIONS - PokerAction::MODIFIABLE_ACTIONS).each do |unmodifiable_action|</code>
475
- </li>
476
-
477
- <li class="never" data-hits="" data-linenumber="47">
478
-
479
-
480
- <code class="ruby"> -&gt; do</code>
481
- </li>
482
-
483
- <li class="covered" data-hits="3" data-linenumber="48">
484
- <span class="hits">3</span>
485
-
486
- <code class="ruby"> ActionSender.send_action(@connection, @match_state, unmodifiable_action + 9001.to_s)</code>
487
- </li>
488
-
489
- <li class="covered" data-hits="3" data-linenumber="49">
490
- <span class="hits">3</span>
491
-
492
- <code class="ruby"> end.must_raise ActionSender::IllegalActionFormat</code>
493
- </li>
494
-
495
- <li class="never" data-hits="" data-linenumber="50">
496
-
497
-
498
- <code class="ruby"> end</code>
499
- </li>
500
-
501
- <li class="never" data-hits="" data-linenumber="51">
502
-
503
-
504
- <code class="ruby"> end</code>
505
- </li>
506
-
507
- <li class="covered" data-hits="1" data-linenumber="52">
508
- <span class="hits">1</span>
509
-
510
- <code class="ruby"> it &#39;can send all legal modifiable actions through the provided connection with a modifier&#39; do</code>
511
- </li>
512
-
513
- <li class="covered" data-hits="1" data-linenumber="53">
514
- <span class="hits">1</span>
515
-
516
- <code class="ruby"> PokerAction::MODIFIABLE_ACTIONS.each do |action|</code>
517
- </li>
518
-
519
- <li class="covered" data-hits="2" data-linenumber="54">
520
- <span class="hits">2</span>
521
-
522
- <code class="ruby"> arbitrary_modifier = 9001</code>
523
- </li>
524
-
525
- <li class="covered" data-hits="2" data-linenumber="55">
526
- <span class="hits">2</span>
527
-
528
- <code class="ruby"> action_string = action + arbitrary_modifier.to_s</code>
529
- </li>
530
-
531
- <li class="covered" data-hits="2" data-linenumber="56">
532
- <span class="hits">2</span>
533
-
534
- <code class="ruby"> action_that_should_be_sent = @match_state.to_s + &quot;:#{action_string}&quot;</code>
535
- </li>
536
-
537
- <li class="covered" data-hits="2" data-linenumber="57">
538
- <span class="hits">2</span>
539
-
540
- <code class="ruby"> @connection.expect :write, nil, [action_that_should_be_sent]</code>
541
- </li>
542
-
543
- <li class="never" data-hits="" data-linenumber="58">
544
-
545
-
546
- <code class="ruby"></code>
547
- </li>
548
-
549
- <li class="covered" data-hits="2" data-linenumber="59">
550
- <span class="hits">2</span>
551
-
552
- <code class="ruby"> ActionSender.send_action @connection, @match_state, action_string</code>
553
- </li>
554
-
555
- <li class="never" data-hits="" data-linenumber="60">
556
-
557
-
558
- <code class="ruby"> end</code>
559
- </li>
560
-
561
- <li class="never" data-hits="" data-linenumber="61">
562
-
563
-
564
- <code class="ruby"> end</code>
565
- </li>
566
-
567
- <li class="covered" data-hits="1" data-linenumber="62">
568
- <span class="hits">1</span>
569
-
570
- <code class="ruby"> it &#39;works for all test data examples&#39; do</code>
571
- </li>
572
-
573
- <li class="covered" data-hits="1" data-linenumber="63">
574
- <span class="hits">1</span>
575
-
576
- <code class="ruby"> match_logs.each do |log_description|</code>
577
- </li>
578
-
579
- <li class="covered" data-hits="4" data-linenumber="64">
580
- <span class="hits">4</span>
581
-
582
- <code class="ruby"> match = AcpcDealerData::PokerMatchData.parse_files(</code>
583
- </li>
584
-
585
- <li class="never" data-hits="" data-linenumber="65">
586
-
587
-
588
- <code class="ruby"> log_description.actions_file_path,</code>
589
- </li>
590
-
591
- <li class="never" data-hits="" data-linenumber="66">
592
-
593
-
594
- <code class="ruby"> log_description.results_file_path,</code>
595
- </li>
596
-
597
- <li class="never" data-hits="" data-linenumber="67">
598
-
599
-
600
- <code class="ruby"> log_description.player_names,</code>
601
- </li>
602
-
603
- <li class="never" data-hits="" data-linenumber="68">
604
-
605
-
606
- <code class="ruby"> AcpcDealer::DEALER_DIRECTORY,</code>
607
- </li>
608
-
609
- <li class="never" data-hits="" data-linenumber="69">
610
-
611
-
612
- <code class="ruby"> 60</code>
613
- </li>
614
-
615
- <li class="never" data-hits="" data-linenumber="70">
616
-
617
-
618
- <code class="ruby"> )</code>
619
- </li>
620
-
621
- <li class="covered" data-hits="4" data-linenumber="71">
622
- <span class="hits">4</span>
623
-
624
- <code class="ruby"> match.for_every_seat! do |seat|</code>
625
- </li>
626
-
627
- <li class="covered" data-hits="10" data-linenumber="72">
628
- <span class="hits">10</span>
629
-
630
- <code class="ruby"> match.for_every_hand! do</code>
631
- </li>
632
-
633
- <li class="covered" data-hits="600" data-linenumber="73">
634
- <span class="hits">600</span>
635
-
636
- <code class="ruby"> match.for_every_turn! do</code>
637
- </li>
638
-
639
- <li class="covered" data-hits="6811" data-linenumber="74">
640
- <span class="hits">6811</span>
641
-
642
- <code class="ruby"> next unless match.current_hand.next_action</code>
643
- </li>
644
-
645
- <li class="never" data-hits="" data-linenumber="75">
646
-
647
-
648
- <code class="ruby"></code>
649
- </li>
650
-
651
- <li class="covered" data-hits="6211" data-linenumber="76">
652
- <span class="hits">6211</span>
653
-
654
- <code class="ruby"> from_player_message = match.current_hand.next_action.state</code>
655
- </li>
656
-
657
- <li class="covered" data-hits="6211" data-linenumber="77">
658
- <span class="hits">6211</span>
659
-
660
- <code class="ruby"> seat_taking_action = match.current_hand.next_action.seat</code>
661
- </li>
662
-
663
- <li class="covered" data-hits="6211" data-linenumber="78">
664
- <span class="hits">6211</span>
665
-
666
- <code class="ruby"> action = match.current_hand.next_action.action</code>
667
- </li>
668
-
669
- <li class="never" data-hits="" data-linenumber="79">
670
-
671
-
672
- <code class="ruby"></code>
673
- </li>
674
-
675
- <li class="covered" data-hits="6211" data-linenumber="80">
676
- <span class="hits">6211</span>
677
-
678
- <code class="ruby"> action_that_should_be_sent = &quot;#{from_player_message.to_s}:#{action.to_acpc}&quot;</code>
679
- </li>
680
-
681
- <li class="never" data-hits="" data-linenumber="81">
682
-
683
-
684
- <code class="ruby"></code>
685
- </li>
686
-
687
- <li class="covered" data-hits="6211" data-linenumber="82">
688
- <span class="hits">6211</span>
689
-
690
- <code class="ruby"> @connection.expect :write, nil, [action_that_should_be_sent]</code>
691
- </li>
692
-
693
- <li class="never" data-hits="" data-linenumber="83">
694
-
695
-
696
- <code class="ruby"></code>
697
- </li>
698
-
699
- <li class="covered" data-hits="6211" data-linenumber="84">
700
- <span class="hits">6211</span>
701
-
702
- <code class="ruby"> ActionSender.send_action @connection, from_player_message, action</code>
703
- </li>
704
-
705
- <li class="never" data-hits="" data-linenumber="85">
706
-
707
-
708
- <code class="ruby"> end</code>
709
- </li>
710
-
711
- <li class="never" data-hits="" data-linenumber="86">
712
-
713
-
714
- <code class="ruby"> end</code>
715
- </li>
716
-
717
- <li class="never" data-hits="" data-linenumber="87">
718
-
719
-
720
- <code class="ruby"> end</code>
721
- </li>
722
-
723
- <li class="never" data-hits="" data-linenumber="88">
724
-
725
-
726
- <code class="ruby"> end</code>
727
- </li>
728
-
729
- <li class="never" data-hits="" data-linenumber="89">
730
-
731
-
732
- <code class="ruby"> end</code>
733
- </li>
734
-
735
- <li class="never" data-hits="" data-linenumber="90">
736
-
737
-
738
- <code class="ruby"> end</code>
739
- </li>
740
-
741
- <li class="never" data-hits="" data-linenumber="91">
742
-
743
-
744
- <code class="ruby">end</code>
745
- </li>
746
-
747
- </ol>
748
- </pre>
749
- </div>
750
-
751
- <div class="source_table" id="481520361b6598d44a41e4d9dd50099a0ffd76c9">
752
- <div class="header">
753
- <h3>basic_proxy_spec.rb</h3>
754
- <h4><span class="green">100.0 %</span> covered</h4>
755
- <div>
756
- <b>38</b> relevant lines.
757
- <span class="green"><b>38</b> lines covered</span> and
758
- <span class="red"><b>0</b> lines missed.</span>
759
- </div>
760
- </div>
761
-
762
- <pre>
763
- <ol>
764
-
765
- <li class="never" data-hits="" data-linenumber="1">
766
-
767
-
768
- <code class="ruby"></code>
769
- </li>
770
-
771
- <li class="covered" data-hits="1" data-linenumber="2">
772
- <span class="hits">1</span>
773
-
774
- <code class="ruby">require_relative &#39;support/spec_helper&#39;</code>
775
- </li>
776
-
777
- <li class="never" data-hits="" data-linenumber="3">
778
-
779
-
780
- <code class="ruby"></code>
781
- </li>
782
-
783
- <li class="covered" data-hits="1" data-linenumber="4">
784
- <span class="hits">1</span>
785
-
786
- <code class="ruby">require &#39;acpc_poker_types/match_state&#39;</code>
787
- </li>
788
-
789
- <li class="covered" data-hits="1" data-linenumber="5">
790
- <span class="hits">1</span>
791
-
792
- <code class="ruby">require &#39;acpc_poker_types/poker_action&#39;</code>
793
- </li>
794
-
795
- <li class="covered" data-hits="1" data-linenumber="6">
796
- <span class="hits">1</span>
797
-
798
- <code class="ruby">require &#39;acpc_poker_types/acpc_dealer_data/poker_match_data&#39;</code>
799
- </li>
800
-
801
- <li class="covered" data-hits="1" data-linenumber="7">
802
- <span class="hits">1</span>
803
-
804
- <code class="ruby">require &#39;acpc_dealer&#39;</code>
805
- </li>
806
-
807
- <li class="never" data-hits="" data-linenumber="8">
808
-
809
-
810
- <code class="ruby"></code>
811
- </li>
812
-
813
- <li class="covered" data-hits="1" data-linenumber="9">
814
- <span class="hits">1</span>
815
-
816
- <code class="ruby">require &#39;acpc_poker_basic_proxy/basic_proxy&#39;</code>
817
- </li>
818
-
819
- <li class="covered" data-hits="1" data-linenumber="10">
820
- <span class="hits">1</span>
821
-
822
- <code class="ruby">require &#39;acpc_poker_basic_proxy/communication_logic/action_sender&#39;</code>
823
- </li>
824
-
825
- <li class="never" data-hits="" data-linenumber="11">
826
-
827
-
828
- <code class="ruby"></code>
829
- </li>
830
-
831
- <li class="covered" data-hits="1" data-linenumber="12">
832
- <span class="hits">1</span>
833
-
834
- <code class="ruby">include AcpcPokerBasicProxy</code>
835
- </li>
836
-
837
- <li class="covered" data-hits="1" data-linenumber="13">
838
- <span class="hits">1</span>
839
-
840
- <code class="ruby">include AcpcPokerTypes</code>
841
- </li>
842
-
843
- <li class="covered" data-hits="1" data-linenumber="14">
844
- <span class="hits">1</span>
845
-
846
- <code class="ruby">include CommunicationLogic</code>
847
- </li>
848
-
849
- <li class="covered" data-hits="1" data-linenumber="15">
850
- <span class="hits">1</span>
851
-
852
- <code class="ruby">include AcpcDealerData</code>
853
- </li>
854
-
855
- <li class="never" data-hits="" data-linenumber="16">
856
-
857
-
858
- <code class="ruby"></code>
859
- </li>
860
-
861
- <li class="covered" data-hits="1" data-linenumber="17">
862
- <span class="hits">1</span>
863
-
864
- <code class="ruby">describe BasicProxy do</code>
865
- </li>
866
-
867
- <li class="covered" data-hits="1" data-linenumber="18">
868
- <span class="hits">1</span>
869
-
870
- <code class="ruby"> before(:each) do</code>
871
- </li>
872
-
873
- <li class="covered" data-hits="2" data-linenumber="19">
874
- <span class="hits">2</span>
875
-
876
- <code class="ruby"> port_number = 9001</code>
877
- </li>
878
-
879
- <li class="covered" data-hits="2" data-linenumber="20">
880
- <span class="hits">2</span>
881
-
882
- <code class="ruby"> host_name = &#39;localhost&#39;</code>
883
- </li>
884
-
885
- <li class="covered" data-hits="2" data-linenumber="21">
886
- <span class="hits">2</span>
887
-
888
- <code class="ruby"> millisecond_response_timeout = 0</code>
889
- </li>
890
-
891
- <li class="covered" data-hits="2" data-linenumber="22">
892
- <span class="hits">2</span>
893
-
894
- <code class="ruby"> delaer_info = AcpcDealerInformation.new host_name, port_number, millisecond_response_timeout</code>
895
- </li>
896
-
897
- <li class="covered" data-hits="2" data-linenumber="23">
898
- <span class="hits">2</span>
899
-
900
- <code class="ruby"> @dealer_communicator = mock &#39;AcpcDealerCommunicator&#39;</code>
901
- </li>
902
-
903
- <li class="never" data-hits="" data-linenumber="24">
904
-
905
-
906
- <code class="ruby"></code>
907
- </li>
908
-
909
- <li class="covered" data-hits="2" data-linenumber="25">
910
- <span class="hits">2</span>
911
-
912
- <code class="ruby"> AcpcDealerCommunicator.expects(:new).once.with(port_number, host_name, millisecond_response_timeout).returns(@dealer_communicator)</code>
913
- </li>
914
-
915
- <li class="never" data-hits="" data-linenumber="26">
916
-
917
-
918
- <code class="ruby"></code>
919
- </li>
920
-
921
- <li class="covered" data-hits="2" data-linenumber="27">
922
- <span class="hits">2</span>
923
-
924
- <code class="ruby"> @patient = BasicProxy.new delaer_info</code>
925
- </li>
926
-
927
- <li class="never" data-hits="" data-linenumber="28">
928
-
929
-
930
- <code class="ruby"> end</code>
931
- </li>
932
-
933
- <li class="never" data-hits="" data-linenumber="29">
934
-
935
-
936
- <code class="ruby"></code>
937
- </li>
938
-
939
- <li class="covered" data-hits="1" data-linenumber="30">
940
- <span class="hits">1</span>
941
-
942
- <code class="ruby"> it &#39;given a sequence of match states and actions, it properly sends and receives them&#39; do</code>
943
- </li>
944
-
945
- <li class="covered" data-hits="1" data-linenumber="31">
946
- <span class="hits">1</span>
947
-
948
- <code class="ruby"> match_logs.each do |log_description|</code>
949
- </li>
950
-
951
- <li class="covered" data-hits="4" data-linenumber="32">
952
- <span class="hits">4</span>
953
-
954
- <code class="ruby"> match = PokerMatchData.parse_files(</code>
955
- </li>
956
-
957
- <li class="never" data-hits="" data-linenumber="33">
958
-
959
-
960
- <code class="ruby"> log_description.actions_file_path,</code>
961
- </li>
962
-
963
- <li class="never" data-hits="" data-linenumber="34">
964
-
965
-
966
- <code class="ruby"> log_description.results_file_path,</code>
967
- </li>
968
-
969
- <li class="never" data-hits="" data-linenumber="35">
970
-
971
-
972
- <code class="ruby"> log_description.player_names,</code>
973
- </li>
974
-
975
- <li class="never" data-hits="" data-linenumber="36">
976
-
977
-
978
- <code class="ruby"> AcpcDealer::DEALER_DIRECTORY,</code>
979
- </li>
980
-
981
- <li class="never" data-hits="" data-linenumber="37">
982
-
983
-
984
- <code class="ruby"> 10</code>
985
- </li>
986
-
987
- <li class="never" data-hits="" data-linenumber="38">
988
-
989
-
990
- <code class="ruby"> )</code>
991
- </li>
992
-
993
- <li class="covered" data-hits="4" data-linenumber="39">
994
- <span class="hits">4</span>
995
-
996
- <code class="ruby"> match.for_every_seat! do |seat|</code>
997
- </li>
998
-
999
- <li class="covered" data-hits="10" data-linenumber="40">
1000
- <span class="hits">10</span>
1001
-
1002
- <code class="ruby"> match.for_every_hand! do</code>
1003
- </li>
1004
-
1005
- <li class="covered" data-hits="100" data-linenumber="41">
1006
- <span class="hits">100</span>
1007
-
1008
- <code class="ruby"> match.for_every_turn! do</code>
1009
- </li>
1010
-
1011
- <li class="covered" data-hits="1232" data-linenumber="42">
1012
- <span class="hits">1232</span>
1013
-
1014
- <code class="ruby"> action = if match.current_hand.next_action</code>
1015
- </li>
1016
-
1017
- <li class="covered" data-hits="1132" data-linenumber="43">
1018
- <span class="hits">1132</span>
1019
-
1020
- <code class="ruby"> match.current_hand.next_action.action</code>
1021
- </li>
1022
-
1023
- <li class="never" data-hits="" data-linenumber="44">
1024
-
1025
-
1026
- <code class="ruby"> else</code>
1027
- </li>
1028
-
1029
- <li class="covered" data-hits="100" data-linenumber="45">
1030
- <span class="hits">100</span>
1031
-
1032
- <code class="ruby"> nil</code>
1033
- </li>
1034
-
1035
- <li class="never" data-hits="" data-linenumber="46">
1036
-
1037
-
1038
- <code class="ruby"> end</code>
1039
- </li>
1040
-
1041
- <li class="covered" data-hits="1232" data-linenumber="47">
1042
- <span class="hits">1232</span>
1043
-
1044
- <code class="ruby"> match_state = match.current_hand.current_match_state</code>
1045
- </li>
1046
-
1047
- <li class="never" data-hits="" data-linenumber="48">
1048
-
1049
-
1050
- <code class="ruby"></code>
1051
- </li>
1052
-
1053
- <li class="covered" data-hits="1232" data-linenumber="49">
1054
- <span class="hits">1232</span>
1055
-
1056
- <code class="ruby"> @dealer_communicator.stubs(:gets).returns(match_state.to_s)</code>
1057
- </li>
1058
-
1059
- <li class="never" data-hits="" data-linenumber="50">
1060
-
1061
-
1062
- <code class="ruby"></code>
1063
- </li>
1064
-
1065
- <li class="covered" data-hits="1232" data-linenumber="51">
1066
- <span class="hits">1232</span>
1067
-
1068
- <code class="ruby"> @patient.receive_match_state!.must_equal match_state</code>
1069
- </li>
1070
-
1071
- <li class="never" data-hits="" data-linenumber="52">
1072
-
1073
-
1074
- <code class="ruby"></code>
1075
- </li>
1076
-
1077
- <li class="covered" data-hits="1232" data-linenumber="53">
1078
- <span class="hits">1232</span>
1079
-
1080
- <code class="ruby"> if action &amp;&amp; match_state == match.current_hand.next_action.state &amp;&amp; match.current_hand.next_action.seat == seat</code>
1081
- </li>
1082
-
1083
- <li class="never" data-hits="" data-linenumber="54">
1084
-
1085
-
1086
- <code class="ruby"></code>
1087
- </li>
1088
-
1089
- <li class="covered" data-hits="431" data-linenumber="55">
1090
- <span class="hits">431</span>
1091
-
1092
- <code class="ruby"> ActionSender.expects(:send_action).once.with(@dealer_communicator, match_state.to_s, action)</code>
1093
- </li>
1094
-
1095
- <li class="never" data-hits="" data-linenumber="56">
1096
-
1097
-
1098
- <code class="ruby"></code>
1099
- </li>
1100
-
1101
- <li class="covered" data-hits="431" data-linenumber="57">
1102
- <span class="hits">431</span>
1103
-
1104
- <code class="ruby"> @patient.send_action(action)</code>
1105
- </li>
1106
-
1107
- <li class="never" data-hits="" data-linenumber="58">
1108
-
1109
-
1110
- <code class="ruby"> end</code>
1111
- </li>
1112
-
1113
- <li class="never" data-hits="" data-linenumber="59">
1114
-
1115
-
1116
- <code class="ruby"> end</code>
1117
- </li>
1118
-
1119
- <li class="never" data-hits="" data-linenumber="60">
1120
-
1121
-
1122
- <code class="ruby"> end</code>
1123
- </li>
1124
-
1125
- <li class="never" data-hits="" data-linenumber="61">
1126
-
1127
-
1128
- <code class="ruby"> end</code>
1129
- </li>
1130
-
1131
- <li class="never" data-hits="" data-linenumber="62">
1132
-
1133
-
1134
- <code class="ruby"> end</code>
1135
- </li>
1136
-
1137
- <li class="never" data-hits="" data-linenumber="63">
1138
-
1139
-
1140
- <code class="ruby"> end</code>
1141
- </li>
1142
-
1143
- <li class="never" data-hits="" data-linenumber="64">
1144
-
1145
-
1146
- <code class="ruby"></code>
1147
- </li>
1148
-
1149
- <li class="covered" data-hits="1" data-linenumber="65">
1150
- <span class="hits">1</span>
1151
-
1152
- <code class="ruby"> describe &#39;#send_action&#39; do</code>
1153
- </li>
1154
-
1155
- <li class="covered" data-hits="1" data-linenumber="66">
1156
- <span class="hits">1</span>
1157
-
1158
- <code class="ruby"> it &#39;raises an exception if a match state was not received before an action was sent&#39; do</code>
1159
- </li>
1160
-
1161
- <li class="covered" data-hits="2" data-linenumber="67">
1162
- <span class="hits">2</span>
1163
-
1164
- <code class="ruby"> -&gt; {@patient.send_action(mock(&#39;PokerAction&#39;))}.must_raise BasicProxy::InitialMatchStateNotYetReceived</code>
1165
- </li>
1166
-
1167
- <li class="never" data-hits="" data-linenumber="68">
1168
-
1169
-
1170
- <code class="ruby"> end</code>
1171
- </li>
1172
-
1173
- <li class="never" data-hits="" data-linenumber="69">
1174
-
1175
-
1176
- <code class="ruby"> end</code>
1177
- </li>
1178
-
1179
- <li class="never" data-hits="" data-linenumber="70">
1180
-
1181
-
1182
- <code class="ruby">end</code>
1183
- </li>
1184
-
1185
- </ol>
1186
- </pre>
1187
- </div>
1188
-
1189
- <div class="source_table" id="9fc603b73eef7325707cdadffd0b52551b49e031">
1190
- <div class="header">
1191
- <h3>match_state_receiver_spec.rb</h3>
1192
- <h4><span class="green">100.0 %</span> covered</h4>
1193
- <div>
1194
- <b>17</b> relevant lines.
1195
- <span class="green"><b>17</b> lines covered</span> and
1196
- <span class="red"><b>0</b> lines missed.</span>
1197
- </div>
1198
- </div>
1199
-
1200
- <pre>
1201
- <ol>
1202
-
1203
- <li class="never" data-hits="" data-linenumber="1">
1204
-
1205
-
1206
- <code class="ruby"></code>
1207
- </li>
1208
-
1209
- <li class="covered" data-hits="1" data-linenumber="2">
1210
- <span class="hits">1</span>
1211
-
1212
- <code class="ruby">require_relative &#39;support/spec_helper&#39;</code>
1213
- </li>
1214
-
1215
- <li class="never" data-hits="" data-linenumber="3">
1216
-
1217
-
1218
- <code class="ruby"></code>
1219
- </li>
1220
-
1221
- <li class="covered" data-hits="1" data-linenumber="4">
1222
- <span class="hits">1</span>
1223
-
1224
- <code class="ruby">require &#39;acpc_dealer&#39;</code>
1225
- </li>
1226
-
1227
- <li class="covered" data-hits="1" data-linenumber="5">
1228
- <span class="hits">1</span>
1229
-
1230
- <code class="ruby">require &#39;acpc_poker_types&#39;</code>
1231
- </li>
1232
-
1233
- <li class="never" data-hits="" data-linenumber="6">
1234
-
1235
-
1236
- <code class="ruby"></code>
1237
- </li>
1238
-
1239
- <li class="covered" data-hits="1" data-linenumber="7">
1240
- <span class="hits">1</span>
1241
-
1242
- <code class="ruby">require &#39;acpc_poker_basic_proxy/communication_logic/match_state_receiver&#39;</code>
1243
- </li>
1244
-
1245
- <li class="covered" data-hits="1" data-linenumber="8">
1246
- <span class="hits">1</span>
1247
-
1248
- <code class="ruby">require &#39;acpc_poker_basic_proxy/communication_logic/acpc_dealer_communicator&#39;</code>
1249
- </li>
1250
-
1251
- <li class="never" data-hits="" data-linenumber="9">
1252
-
1253
-
1254
- <code class="ruby"></code>
1255
- </li>
1256
-
1257
- <li class="covered" data-hits="1" data-linenumber="10">
1258
- <span class="hits">1</span>
1259
-
1260
- <code class="ruby">describe AcpcPokerBasicProxy::CommunicationLogic::MatchStateReceiver do</code>
1261
- </li>
1262
-
1263
- <li class="covered" data-hits="1" data-linenumber="11">
1264
- <span class="hits">1</span>
1265
-
1266
- <code class="ruby"> before(:each) do</code>
1267
- </li>
1268
-
1269
- <li class="covered" data-hits="1" data-linenumber="12">
1270
- <span class="hits">1</span>
1271
-
1272
- <code class="ruby"> @connection = MiniTest::Mock.new</code>
1273
- </li>
1274
-
1275
- <li class="never" data-hits="" data-linenumber="13">
1276
-
1277
-
1278
- <code class="ruby"> end</code>
1279
- </li>
1280
-
1281
- <li class="never" data-hits="" data-linenumber="14">
1282
-
1283
-
1284
- <code class="ruby"></code>
1285
- </li>
1286
-
1287
- <li class="covered" data-hits="1" data-linenumber="15">
1288
- <span class="hits">1</span>
1289
-
1290
- <code class="ruby"> describe &quot;#receive_matchstate_string&quot; do</code>
1291
- </li>
1292
-
1293
- <li class="covered" data-hits="1" data-linenumber="16">
1294
- <span class="hits">1</span>
1295
-
1296
- <code class="ruby"> it &#39;receives matchstate strings properly&#39; do</code>
1297
- </li>
1298
-
1299
- <li class="covered" data-hits="1" data-linenumber="17">
1300
- <span class="hits">1</span>
1301
-
1302
- <code class="ruby"> match_logs.each do |log_description|</code>
1303
- </li>
1304
-
1305
- <li class="covered" data-hits="4" data-linenumber="18">
1306
- <span class="hits">4</span>
1307
-
1308
- <code class="ruby"> match = AcpcPokerTypes::AcpcDealerData::PokerMatchData.parse_files(</code>
1309
- </li>
1310
-
1311
- <li class="never" data-hits="" data-linenumber="19">
1312
-
1313
-
1314
- <code class="ruby"> log_description.actions_file_path,</code>
1315
- </li>
1316
-
1317
- <li class="never" data-hits="" data-linenumber="20">
1318
-
1319
-
1320
- <code class="ruby"> log_description.results_file_path,</code>
1321
- </li>
1322
-
1323
- <li class="never" data-hits="" data-linenumber="21">
1324
-
1325
-
1326
- <code class="ruby"> log_description.player_names,</code>
1327
- </li>
1328
-
1329
- <li class="never" data-hits="" data-linenumber="22">
1330
-
1331
-
1332
- <code class="ruby"> AcpcDealer::DEALER_DIRECTORY,</code>
1333
- </li>
1334
-
1335
- <li class="never" data-hits="" data-linenumber="23">
1336
-
1337
-
1338
- <code class="ruby"> 60</code>
1339
- </li>
1340
-
1341
- <li class="never" data-hits="" data-linenumber="24">
1342
-
1343
-
1344
- <code class="ruby"> )</code>
1345
- </li>
1346
-
1347
- <li class="covered" data-hits="4" data-linenumber="25">
1348
- <span class="hits">4</span>
1349
-
1350
- <code class="ruby"> match.for_every_seat! do |seat|</code>
1351
- </li>
1352
-
1353
- <li class="covered" data-hits="10" data-linenumber="26">
1354
- <span class="hits">10</span>
1355
-
1356
- <code class="ruby"> match.for_every_hand! do</code>
1357
- </li>
1358
-
1359
- <li class="covered" data-hits="600" data-linenumber="27">
1360
- <span class="hits">600</span>
1361
-
1362
- <code class="ruby"> match.for_every_turn! do</code>
1363
- </li>
1364
-
1365
- <li class="covered" data-hits="6811" data-linenumber="28">
1366
- <span class="hits">6811</span>
1367
-
1368
- <code class="ruby"> @connection.expect(:gets, match.current_hand.current_match_state.to_s)</code>
1369
- </li>
1370
-
1371
- <li class="never" data-hits="" data-linenumber="29">
1372
-
1373
-
1374
- <code class="ruby"></code>
1375
- </li>
1376
-
1377
- <li class="never" data-hits="" data-linenumber="30">
1378
-
1379
-
1380
- <code class="ruby"> AcpcPokerBasicProxy::CommunicationLogic::MatchStateReceiver</code>
1381
- </li>
1382
-
1383
- <li class="covered" data-hits="6811" data-linenumber="31">
1384
- <span class="hits">6811</span>
1385
-
1386
- <code class="ruby"> .receive_match_state(@connection).must_equal match.current_hand.current_match_state</code>
1387
- </li>
1388
-
1389
- <li class="never" data-hits="" data-linenumber="32">
1390
-
1391
-
1392
- <code class="ruby"> end</code>
1393
- </li>
1394
-
1395
- <li class="never" data-hits="" data-linenumber="33">
1396
-
1397
-
1398
- <code class="ruby"> end</code>
1399
- </li>
1400
-
1401
- <li class="never" data-hits="" data-linenumber="34">
1402
-
1403
-
1404
- <code class="ruby"> end</code>
1405
- </li>
1406
-
1407
- <li class="never" data-hits="" data-linenumber="35">
1408
-
1409
-
1410
- <code class="ruby"> end</code>
1411
- </li>
1412
-
1413
- <li class="never" data-hits="" data-linenumber="36">
1414
-
1415
-
1416
- <code class="ruby"> end</code>
1417
- </li>
1418
-
1419
- <li class="never" data-hits="" data-linenumber="37">
1420
-
1421
-
1422
- <code class="ruby"> end</code>
1423
- </li>
1424
-
1425
- <li class="never" data-hits="" data-linenumber="38">
1426
-
1427
-
1428
- <code class="ruby">end</code>
1429
- </li>
1430
-
1431
- </ol>
1432
- </pre>
1433
- </div>
1434
-
1435
69
  </div>
1436
70
  </div>
1437
71
  </body>