pirate_game 0.0.1

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.
@@ -0,0 +1,14 @@
1
+ require 'minitest/autorun'
2
+ require 'pirate_game'
3
+
4
+ class TestPirateGameBridge < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @bridge = PirateGame::Bridge.new(%w[Foo Bar], %w[Foo Bar Baz Buz])
8
+ end
9
+
10
+ def test_initialize
11
+ assert_equal 2, @bridge.items.length
12
+ assert_equal 4, @bridge.stage_items.length
13
+ end
14
+ end
@@ -0,0 +1,148 @@
1
+ require 'minitest/autorun'
2
+ require 'pirate_game'
3
+
4
+ class TestPirateGameClient < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @ts = Rinda::TupleSpace.new
8
+
9
+ @client = PirateGame::Client.new(name: 'foo')
10
+
11
+ @client.instance_variable_set :@mothership, @ts
12
+ end
13
+
14
+ def test_initialize
15
+ assert_empty @client.log_book
16
+ assert_nil @client.bridge
17
+ assert_equal :select_game, @client.state
18
+ end
19
+
20
+ def test_set_state
21
+ @client.set_state :pub
22
+
23
+ assert_equal :pub, @client.state
24
+
25
+ assert_raises RuntimeError do
26
+ @client.set_state :foobar
27
+ end
28
+
29
+ assert_equal :pub, @client.state
30
+ end
31
+
32
+ def test_action_time_left
33
+ assert_equal 0, @client.action_time_left
34
+
35
+ @client.issue_command 'Test'
36
+
37
+ assert_in_epsilon 8, @client.action_time_left, 0.1
38
+ end
39
+
40
+ def test_clicked
41
+ make_services
42
+
43
+ @client.clicked 'Test'
44
+
45
+ tuple = @ts.read [:button, nil, nil, nil]
46
+
47
+ assert_equal :button, tuple.shift
48
+ assert_equal 'Test', tuple.shift
49
+ assert_includes (Time.now.to_i - 1..Time.now.to_i), tuple.shift
50
+ assert_equal DRb.uri, tuple.shift
51
+ end
52
+
53
+ def test_issue_command
54
+ @client.issue_command 'Test'
55
+
56
+ assert @client.waiting?
57
+ assert_match /Test/, @client.current_action
58
+
59
+ @client.clicked 'Test'
60
+
61
+ Thread.pass while @client.command_start
62
+
63
+ refute @client.waiting?
64
+ assert_nil @client.current_action
65
+ end
66
+
67
+ def test_start_stage
68
+ assert_nil @client.bridge
69
+
70
+ @client.start_stage(%w[foo bar], %w[foo bar baz buz])
71
+
72
+ assert @client.bridge
73
+
74
+ assert_includes @client.bridge.items, 'foo'
75
+ assert_includes @client.bridge.items, 'bar'
76
+ assert_equal 4, @client.bridge.stage_items.length
77
+ end
78
+
79
+ def test_renewer
80
+ renewer = @client.renewer
81
+
82
+ assert_equal 8, renewer.renew
83
+ end
84
+
85
+ def test_return_to_pub
86
+ @client.start_stage(%w[foo bar], %w[foo bar baz buz])
87
+
88
+ assert @client.bridge
89
+
90
+ @client.return_to_pub
91
+
92
+ assert_nil @client.bridge
93
+ end
94
+
95
+ def test_teammates
96
+ make_services
97
+
98
+ assert_includes @client.teammates, 'Davy'
99
+ assert_includes @client.teammates, 'Eric'
100
+ end
101
+
102
+ def test_broadcast
103
+ make_services
104
+
105
+ @client.broadcast 'Hello'
106
+
107
+ refute_empty @client.log_book
108
+
109
+ assert_equal 2, @client.log_book.length
110
+ assert_includes @client.log_book.collect{|msg, name| msg}, 'Hello'
111
+ assert_includes @client.log_book.collect{|msg, name| name}, @client.name
112
+ end
113
+
114
+ def test_wait_for_action
115
+ @client.clicked 'Test'
116
+
117
+ @client.wait_for_action 'Test'
118
+
119
+ action = @ts.read [:action, nil, nil, nil]
120
+
121
+ action.shift
122
+
123
+ assert_equal 'Test', action.shift
124
+ assert_kind_of Time, action.shift
125
+ assert_equal DRb.uri, action.shift
126
+ end
127
+
128
+ def test_wait_for_action_expired
129
+ @client.completion_time = 0
130
+ @client.wait_for_action 'Test'
131
+
132
+ assert true, 'did not hang up'
133
+ end
134
+
135
+ def test_waiting_eh
136
+ refute @client.waiting?
137
+
138
+ @client.issue_command 'Test'
139
+
140
+ assert @client.waiting?
141
+ end
142
+
143
+ def make_services
144
+ def @client.registered_services
145
+ [['Davy', DRb.uri], ['Eric', DRb.uri]]
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,107 @@
1
+ require 'minitest/autorun'
2
+ require 'pirate_game'
3
+
4
+ class TestPirateGameGameMaster < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @client = PirateGame::Client.new name: 'user'
8
+
9
+ @game_master = PirateGame::GameMaster.new(name: 'Foo')
10
+
11
+ DRb.stop_service if DRb.primary_server
12
+ DRb.start_service nil, @client
13
+ end
14
+
15
+ def test_initialize
16
+ assert_nil @game_master.stage
17
+ end
18
+
19
+ def test_increment_stage
20
+ assert_nil @game_master.stage
21
+ assert_empty @game_master.stage_ary
22
+
23
+ @game_master.increment_stage
24
+
25
+ refute_nil @game_master.stage
26
+ assert_equal 1, @game_master.stage.level
27
+ assert_equal 1, @game_master.stage_ary.length
28
+
29
+ @game_master.increment_stage
30
+
31
+ refute_nil @game_master.stage
32
+ assert_equal 2, @game_master.stage.level
33
+ assert_equal 2, @game_master.stage_ary.length
34
+ end
35
+
36
+ def test_startable_eh
37
+
38
+ # should not be startable when no players exist
39
+ assert_equal 0, @game_master.num_players
40
+ refute @game_master.startable?
41
+ refute @game_master.start
42
+ assert_nil @game_master.stage
43
+
44
+ # should be startable after making services
45
+ make_services
46
+
47
+ assert @game_master.startable?
48
+ assert @game_master.start
49
+
50
+ # should not be startable when stage is failed
51
+ @game_master.stage.begin_time = Time.at 0
52
+
53
+ assert @game_master.stage.failure?
54
+ refute @game_master.startable?
55
+ refute @game_master.start
56
+
57
+ # should be startable when stage is success
58
+ 10.times do
59
+ @game_master.stage.complete 'test', 'test'
60
+ end
61
+
62
+ assert @game_master.stage.success?
63
+ assert @game_master.startable?
64
+ end
65
+
66
+ def test_start
67
+ make_services
68
+ assert @game_master.start
69
+
70
+ assert @game_master.stage
71
+ assert_equal 1, @game_master.stage.level
72
+ assert_equal 1, @game_master.stage_ary.length
73
+
74
+ 10.times do
75
+ @game_master.stage.complete 'test', 'test'
76
+ end
77
+ @game_master.stage.begin_time = Time.at 0
78
+
79
+ assert @game_master.start
80
+ assert_equal 2, @game_master.stage.level
81
+ assert_equal 2, @game_master.stage_ary.length
82
+
83
+ assert_equal [1,2], @game_master.stage_ary.collect{|s| s.level}
84
+ end
85
+
86
+ def test_update
87
+ assert_equal 0, @game_master.num_players
88
+ assert_empty @game_master.player_names
89
+
90
+ make_services
91
+
92
+ assert_equal 0, @game_master.num_players
93
+ assert_empty @game_master.player_names
94
+
95
+ assert @game_master.update
96
+
97
+ assert_equal 2, @game_master.num_players
98
+ assert_equal %w[Davy Eric], @game_master.player_names.sort
99
+ end
100
+
101
+ def make_services
102
+ def @game_master.read_registered_services
103
+ [['Davy', DRb.uri], ['Eric', DRb.uri]]
104
+ end
105
+ end
106
+
107
+ end
@@ -0,0 +1,34 @@
1
+ require 'minitest/autorun'
2
+ require 'pirate_game'
3
+
4
+ class TestPirateGameLogBook < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @log_book = PirateGame::LogBook.new
8
+ end
9
+
10
+ def test_initialize
11
+ assert_empty @log_book
12
+ end
13
+
14
+ def test_add
15
+ @log_book.add 'Day One', 'Davy'
16
+
17
+ assert_equal 1, @log_book.length
18
+ assert_equal ['Day One', 'Davy'], @log_book.first
19
+ end
20
+
21
+ def test_maintain_size
22
+ 10.times do |i|
23
+ @log_book.add "Day #{i+1}", 'Davy'
24
+ end
25
+
26
+ assert_equal 10, @log_book.length
27
+
28
+ @log_book.add "Another Day", 'Eric'
29
+
30
+ assert_equal 10, @log_book.length
31
+ assert_equal ['Day 2', 'Davy'], @log_book.first
32
+ assert @log_book.detect{|msg,auth| auth == 'Eric'}
33
+ end
34
+ end
@@ -0,0 +1,116 @@
1
+ require 'minitest/autorun'
2
+ require 'pirate_game'
3
+
4
+ class TestPirateGameStage < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @stage = PirateGame::Stage.new 1, 3
8
+ end
9
+
10
+ def test_increment
11
+ @inc = @stage.increment
12
+
13
+ assert_equal 2, @inc.level
14
+ assert_equal @stage.players, @inc.players
15
+ end
16
+
17
+ def test_time_left
18
+ assert_operator 30, :>=, @stage.time_left
19
+ assert_operator 28, :<, @stage.time_left
20
+ end
21
+
22
+ def test_status_in_progress
23
+ assert_equal 'In Progress', @stage.status
24
+ assert @stage.in_progress?
25
+ refute @stage.failure?
26
+ refute @stage.success?
27
+ end
28
+
29
+ def test_status_success
30
+ 10.times { @stage.complete 'foo', 'bar' }
31
+
32
+ complete_stage
33
+
34
+ assert_equal 'Success', @stage.status
35
+ assert @stage.success?
36
+ refute @stage.in_progress?
37
+ refute @stage.failure?
38
+ end
39
+
40
+ def test_status_failed
41
+ complete_stage
42
+
43
+ assert_equal 'Failure', @stage.status
44
+ assert @stage.failure?
45
+ refute @stage.success?
46
+ refute @stage.in_progress?
47
+ end
48
+
49
+ def test_generate_all_items
50
+ assert_equal 18, @stage.all_items.uniq.length
51
+ end
52
+
53
+ def test_bridge_for_player
54
+ bridge = @stage.bridge_for_player
55
+
56
+ assert_equal 6, bridge.length
57
+
58
+ @stage.bridge_for_player
59
+ @stage.bridge_for_player
60
+
61
+ assert_nil @stage.bridge_for_player
62
+ end
63
+
64
+ def test_actions_completed
65
+ assert_equal 0, @stage.actions_completed
66
+
67
+ @stage.complete 'Foo', 'from bob'
68
+
69
+ assert_equal 1, @stage.actions_completed
70
+ end
71
+
72
+ def test_required_actions
73
+ assert_equal 10, @stage.required_actions
74
+
75
+ @stage = PirateGame::Stage.new(5, 4)
76
+
77
+ assert_equal 29, @stage.required_actions
78
+
79
+ @stage = PirateGame::Stage.new(10, 2)
80
+
81
+ assert_equal 25, @stage.required_actions
82
+ end
83
+
84
+ def test_stage_passed_eh
85
+ refute @stage.passed?
86
+
87
+ 9.times do
88
+ @stage.complete 'foo', 'bar'
89
+ end
90
+
91
+ refute @stage.passed?
92
+
93
+ @stage.complete 'for', 'the win'
94
+
95
+ assert @stage.passed?
96
+ end
97
+
98
+ def test_rundown
99
+ 10.times { @stage.complete 'foo', 'bar' }
100
+
101
+ assert_nil @stage.rundown
102
+
103
+ complete_stage
104
+
105
+ rundown = {:stage => 1, :total_actions => 10, :player_breakdown => {'bar' => 10}}
106
+
107
+ assert_equal rundown, @stage.rundown
108
+ end
109
+
110
+ def complete_stage
111
+ def @stage.begin_time
112
+ Time.now - 360
113
+ end
114
+ end
115
+
116
+ end
@@ -0,0 +1,15 @@
1
+ require 'minitest/autorun'
2
+ require 'pirate_game'
3
+
4
+ class TestPirateGameTimeoutRenewer < MiniTest::Unit::TestCase
5
+
6
+ def test_renew
7
+ r = PirateGame::TimeoutRenewer.new 5
8
+
9
+ assert_equal 5, r.renew
10
+
11
+ assert_equal true, r.renew
12
+ end
13
+
14
+ end
15
+
metadata ADDED
@@ -0,0 +1,204 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pirate_game
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Davy Stevenson
9
+ - Eric Hodel
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-11-09 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json
17
+ version_requirements: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.8.0
22
+ none: false
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 1.8.0
28
+ none: false
29
+ prerelease: false
30
+ type: :runtime
31
+ - !ruby/object:Gem::Dependency
32
+ name: pirate_command
33
+ version_requirements: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '0.0'
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.2
41
+ none: false
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '0.0'
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: 0.0.2
50
+ none: false
51
+ prerelease: false
52
+ type: :runtime
53
+ - !ruby/object:Gem::Dependency
54
+ name: shuttlecraft
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: '0.0'
60
+ none: false
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '0.0'
66
+ none: false
67
+ prerelease: false
68
+ type: :runtime
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '4.7'
76
+ none: false
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ~>
80
+ - !ruby/object:Gem::Version
81
+ version: '4.7'
82
+ none: false
83
+ prerelease: false
84
+ type: :development
85
+ - !ruby/object:Gem::Dependency
86
+ name: rdoc
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: '4.0'
92
+ none: false
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ~>
96
+ - !ruby/object:Gem::Version
97
+ version: '4.0'
98
+ none: false
99
+ prerelease: false
100
+ type: :development
101
+ - !ruby/object:Gem::Dependency
102
+ name: hoe
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ version: '3.7'
108
+ none: false
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ~>
112
+ - !ruby/object:Gem::Version
113
+ version: '3.7'
114
+ none: false
115
+ prerelease: false
116
+ type: :development
117
+ description: |-
118
+ You insouciant scalawags will share the experience of a lifetime as you play a game built atop DRb and Shoes based generally upon the phenomenon known as Spaceteam! Except with Pirates!!
119
+
120
+ Team up with your fellow pirates to plunder the high seas! Yarrrr….☠
121
+ email:
122
+ - davy.stevenson@gmail.com
123
+ - drbrain@segment7.net
124
+ executables:
125
+ - game_master
126
+ - pirate_game
127
+ extensions: []
128
+ extra_rdoc_files:
129
+ - History.rdoc
130
+ - Manifest.txt
131
+ - README.md
132
+ files:
133
+ - .autotest
134
+ - History.rdoc
135
+ - Manifest.txt
136
+ - README.md
137
+ - Rakefile
138
+ - bin/game_master
139
+ - bin/pirate_game
140
+ - config.json
141
+ - imgs/jolly_roger.jpg
142
+ - imgs/jolly_roger_sm.png
143
+ - imgs/pirate_ship.png
144
+ - imgs/pirate_ship_sm.png
145
+ - lib/pirate_game.rb
146
+ - lib/pirate_game/animation.rb
147
+ - lib/pirate_game/background.rb
148
+ - lib/pirate_game/boot.rb
149
+ - lib/pirate_game/bridge.rb
150
+ - lib/pirate_game/bridge_button.rb
151
+ - lib/pirate_game/client.rb
152
+ - lib/pirate_game/client_app.rb
153
+ - lib/pirate_game/game_master.rb
154
+ - lib/pirate_game/image.rb
155
+ - lib/pirate_game/log_book.rb
156
+ - lib/pirate_game/master_app.rb
157
+ - lib/pirate_game/protocol.rb
158
+ - lib/pirate_game/shoes4_patch.rb
159
+ - lib/pirate_game/stage.rb
160
+ - lib/pirate_game/timeout_renewer.rb
161
+ - lib/pirate_game/wave.rb
162
+ - lib/pirate_game/waving_item.rb
163
+ - state_diagram.graffle
164
+ - test/test_pirate_game_bridge.rb
165
+ - test/test_pirate_game_client.rb
166
+ - test/test_pirate_game_game_master.rb
167
+ - test/test_pirate_game_log_book.rb
168
+ - test/test_pirate_game_stage.rb
169
+ - test/test_pirate_game_timeout_renewer.rb
170
+ - .gemtest
171
+ homepage: https://github.com/davy/pirate_game
172
+ licenses:
173
+ - MIT
174
+ post_install_message:
175
+ rdoc_options:
176
+ - --main
177
+ - README.md
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - '>='
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ none: false
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ none: false
192
+ requirements: []
193
+ rubyforge_project: pirate_game
194
+ rubygems_version: 1.8.24
195
+ signing_key:
196
+ specification_version: 3
197
+ summary: You insouciant scalawags will share the experience of a lifetime as you play a game built atop DRb and Shoes based generally upon the phenomenon known as Spaceteam! Except with Pirates!! Team up with your fellow pirates to plunder the high seas! Yarrrr….☠
198
+ test_files:
199
+ - test/test_pirate_game_bridge.rb
200
+ - test/test_pirate_game_client.rb
201
+ - test/test_pirate_game_game_master.rb
202
+ - test/test_pirate_game_log_book.rb
203
+ - test/test_pirate_game_stage.rb
204
+ - test/test_pirate_game_timeout_renewer.rb