pirate_game 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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