rubygame 2.3.0-x86-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. data/CREDITS +60 -0
  2. data/LICENSE +504 -0
  3. data/NEWS +252 -0
  4. data/README +123 -0
  5. data/ROADMAP +109 -0
  6. data/Rakefile +438 -0
  7. data/doc/extended_readme.rdoc +49 -0
  8. data/doc/getting_started.rdoc +47 -0
  9. data/doc/macosx_install.rdoc +70 -0
  10. data/doc/windows_install.rdoc +123 -0
  11. data/ext/rubygame/rubygame_core.so +0 -0
  12. data/ext/rubygame/rubygame_event.c +644 -0
  13. data/ext/rubygame/rubygame_event.h +48 -0
  14. data/ext/rubygame/rubygame_event.o +0 -0
  15. data/ext/rubygame/rubygame_gfx.c +942 -0
  16. data/ext/rubygame/rubygame_gfx.h +101 -0
  17. data/ext/rubygame/rubygame_gfx.o +0 -0
  18. data/ext/rubygame/rubygame_gfx.so +0 -0
  19. data/ext/rubygame/rubygame_gl.c +154 -0
  20. data/ext/rubygame/rubygame_gl.h +32 -0
  21. data/ext/rubygame/rubygame_gl.o +0 -0
  22. data/ext/rubygame/rubygame_image.c +252 -0
  23. data/ext/rubygame/rubygame_image.h +41 -0
  24. data/ext/rubygame/rubygame_image.o +0 -0
  25. data/ext/rubygame/rubygame_image.so +0 -0
  26. data/ext/rubygame/rubygame_joystick.c +247 -0
  27. data/ext/rubygame/rubygame_joystick.h +41 -0
  28. data/ext/rubygame/rubygame_joystick.o +0 -0
  29. data/ext/rubygame/rubygame_main.c +155 -0
  30. data/ext/rubygame/rubygame_main.h +36 -0
  31. data/ext/rubygame/rubygame_main.o +0 -0
  32. data/ext/rubygame/rubygame_mixer.c +1024 -0
  33. data/ext/rubygame/rubygame_mixer.h +36 -0
  34. data/ext/rubygame/rubygame_mixer.o +0 -0
  35. data/ext/rubygame/rubygame_mixer.so +0 -0
  36. data/ext/rubygame/rubygame_music.c +1017 -0
  37. data/ext/rubygame/rubygame_music.h +29 -0
  38. data/ext/rubygame/rubygame_music.o +0 -0
  39. data/ext/rubygame/rubygame_screen.c +448 -0
  40. data/ext/rubygame/rubygame_screen.h +43 -0
  41. data/ext/rubygame/rubygame_screen.o +0 -0
  42. data/ext/rubygame/rubygame_shared.c +272 -0
  43. data/ext/rubygame/rubygame_shared.h +68 -0
  44. data/ext/rubygame/rubygame_shared.o +0 -0
  45. data/ext/rubygame/rubygame_sound.c +863 -0
  46. data/ext/rubygame/rubygame_sound.h +29 -0
  47. data/ext/rubygame/rubygame_sound.o +0 -0
  48. data/ext/rubygame/rubygame_surface.c +1151 -0
  49. data/ext/rubygame/rubygame_surface.h +62 -0
  50. data/ext/rubygame/rubygame_surface.o +0 -0
  51. data/ext/rubygame/rubygame_time.c +183 -0
  52. data/ext/rubygame/rubygame_time.h +32 -0
  53. data/ext/rubygame/rubygame_time.o +0 -0
  54. data/ext/rubygame/rubygame_ttf.c +599 -0
  55. data/ext/rubygame/rubygame_ttf.h +69 -0
  56. data/ext/rubygame/rubygame_ttf.o +0 -0
  57. data/ext/rubygame/rubygame_ttf.so +0 -0
  58. data/lib/rubygame.rb +41 -0
  59. data/lib/rubygame/clock.rb +128 -0
  60. data/lib/rubygame/color.rb +79 -0
  61. data/lib/rubygame/color/models/base.rb +111 -0
  62. data/lib/rubygame/color/models/hsl.rb +153 -0
  63. data/lib/rubygame/color/models/hsv.rb +149 -0
  64. data/lib/rubygame/color/models/rgb.rb +78 -0
  65. data/lib/rubygame/color/palettes/css.rb +49 -0
  66. data/lib/rubygame/color/palettes/palette.rb +100 -0
  67. data/lib/rubygame/color/palettes/x11.rb +177 -0
  68. data/lib/rubygame/constants.rb +238 -0
  69. data/lib/rubygame/event.rb +313 -0
  70. data/lib/rubygame/ftor.rb +370 -0
  71. data/lib/rubygame/hotspot.rb +265 -0
  72. data/lib/rubygame/keyconstants.rb +237 -0
  73. data/lib/rubygame/mediabag.rb +94 -0
  74. data/lib/rubygame/named_resource.rb +254 -0
  75. data/lib/rubygame/queue.rb +288 -0
  76. data/lib/rubygame/rect.rb +612 -0
  77. data/lib/rubygame/sfont.rb +223 -0
  78. data/lib/rubygame/sprite.rb +511 -0
  79. data/samples/FreeSans.ttf +0 -0
  80. data/samples/GPL.txt +340 -0
  81. data/samples/README +40 -0
  82. data/samples/chimp.bmp +0 -0
  83. data/samples/chimp.rb +302 -0
  84. data/samples/demo_gl.rb +151 -0
  85. data/samples/demo_gl_tex.rb +197 -0
  86. data/samples/demo_music.rb +77 -0
  87. data/samples/demo_rubygame.rb +296 -0
  88. data/samples/demo_sfont.rb +52 -0
  89. data/samples/demo_ttf.rb +193 -0
  90. data/samples/demo_utf8.rb +53 -0
  91. data/samples/fist.bmp +0 -0
  92. data/samples/load_and_blit.rb +22 -0
  93. data/samples/panda.png +0 -0
  94. data/samples/punch.wav +0 -0
  95. data/samples/ruby.png +0 -0
  96. data/samples/song.ogg +0 -0
  97. data/samples/term16.png +0 -0
  98. data/samples/whiff.wav +0 -0
  99. data/test/audio_spec.rb +236 -0
  100. data/test/color_spec.rb +544 -0
  101. data/test/image.png +0 -0
  102. data/test/music_spec.rb +727 -0
  103. data/test/named_resource_spec.rb +211 -0
  104. data/test/short.ogg +0 -0
  105. data/test/sound_spec.rb +564 -0
  106. data/test/surface_spec.rb +219 -0
  107. data/test/test_crop.rb +45 -0
  108. data/test/test_rect.rb +841 -0
  109. metadata +174 -0
@@ -0,0 +1,211 @@
1
+ require 'rubygame/named_resource'
2
+
3
+ include Rubygame
4
+
5
+
6
+ TEST_DIR = File.dirname(__FILE__)
7
+
8
+
9
+
10
+ describe NamedResource do
11
+
12
+
13
+ describe "instance names" do
14
+ before :each do
15
+ @class = Class.new {
16
+ include NamedResource
17
+
18
+ def initialize( name=nil )
19
+ self.name = name
20
+ end
21
+
22
+ def to_s
23
+ "#<InstanceNameExample #{name}>"
24
+ end
25
+ alias :inspect :to_s
26
+ }
27
+
28
+ @resource = @class.new( "my_name" )
29
+ end
30
+
31
+ it "should have a name" do
32
+ @resource.name.should == "my_name"
33
+ end
34
+
35
+ it "name string should be frozen" do
36
+ @resource.name.should be_frozen
37
+ end
38
+
39
+ it "should be able to set name" do
40
+ @resource.name = "new_name"
41
+ @resource.name.should == "new_name"
42
+ end
43
+
44
+ it "should reject non-string names" do
45
+ lambda { @resource.name = ["foo"] }.should raise_error(TypeError)
46
+ end
47
+ end
48
+
49
+
50
+ describe "resource table" do
51
+
52
+ describe "general" do
53
+ before :each do
54
+ @class = Class.new {
55
+ include NamedResource
56
+
57
+ class << self
58
+ attr_accessor :resources
59
+ end
60
+
61
+ def to_s
62
+ "#<ResourceTableExample>"
63
+ end
64
+ alias :inspect :to_s
65
+ }
66
+
67
+ @instance = @class.new
68
+ @class.resources["foo"] = @instance
69
+ end
70
+
71
+ it "should be able to get basename a name from a filename" do
72
+ @class.basename("/foo/bar/baz.ext").should == "baz.ext"
73
+ end
74
+
75
+ it "should return object with registered name" do
76
+ @class["foo"].should == @instance
77
+ end
78
+
79
+ it "should be able to register an object by name" do
80
+ @class["bar"] = @instance
81
+ @class["bar"].should == @instance
82
+ end
83
+
84
+ it "should only allow registering instances of that class" do
85
+ lambda { @class["bar"] = 3 }.should raise_error(TypeError)
86
+ end
87
+ end
88
+
89
+
90
+ describe "without autoload" do
91
+ before :each do
92
+ @class = Class.new {
93
+ include NamedResource
94
+
95
+ class << self
96
+ attr_accessor :resources
97
+ end
98
+
99
+ def to_s
100
+ "#<ResourceTableExample>"
101
+ end
102
+ alias :inspect :to_s
103
+ }
104
+ end
105
+
106
+ it "should return nil for unregistered names" do
107
+ @class["unassigned"].should be_nil
108
+ end
109
+ end
110
+
111
+
112
+ describe "with autoload" do
113
+ before :each do
114
+ @class = Class.new {
115
+ include NamedResource
116
+
117
+ class << self
118
+ attr_accessor :resources
119
+
120
+ def autoload( name )
121
+ instance = self.new
122
+ return instance
123
+ end
124
+ end
125
+
126
+ attr_accessor :name
127
+
128
+ def to_s
129
+ "#<ResourceTableExample>"
130
+ end
131
+ alias :inspect :to_s
132
+ }
133
+ end
134
+
135
+ it "should autoload unregistered names" do
136
+ instance = @class["bar"]
137
+ instance.name.should == "bar"
138
+ instance.should be_instance_of(@class)
139
+ end
140
+
141
+ it "should save autoloaded instances" do
142
+ @class.resources["bar"].should be_nil
143
+ instance = @class["bar"]
144
+ @class.resources["bar"].should == instance
145
+ end
146
+
147
+ it "should set the name of autoloaded instances" do
148
+ @class["bar"].name.should == "bar"
149
+ end
150
+ end
151
+
152
+
153
+ describe "autoload paths" do
154
+ before :each do
155
+ @class = Class.new {
156
+ include NamedResource
157
+
158
+ class << self
159
+ attr_accessor :resources
160
+
161
+ def autoload( name )
162
+ path = find_file( name )
163
+ if path
164
+ instance = self.new
165
+ instance.path = path
166
+ return instance
167
+ end
168
+ end
169
+
170
+ # Fake check to see if file exists
171
+ def exist?( path )
172
+ if( path == File.join("foo","bar") or
173
+ path == File.join("moo","bar") )
174
+ true
175
+ else
176
+ false
177
+ end
178
+ end
179
+ end
180
+
181
+ attr_accessor :name, :path
182
+
183
+ def to_s
184
+ "#<ResourceTableExample>"
185
+ end
186
+ alias :inspect :to_s
187
+ }
188
+
189
+ @some_dirs = [ "hoo", "woo", "foo", "moo" ]
190
+ end
191
+
192
+ it "should have an accessor for @autoload_paths" do
193
+ @class.autoload_dirs.should == []
194
+ @class.autoload_dirs.push("foo")
195
+ @class.autoload_dirs.should == ["foo"]
196
+ end
197
+
198
+ it "should use the first path which succeeds" do
199
+ @class.autoload_dirs = @some_dirs
200
+ @class["bar"].path.should == File.join("foo","bar")
201
+ end
202
+
203
+ it "should return nil if no path succeeds" do
204
+ @class.autoload_dirs = @some_dirs
205
+ @class["nothing"].should be_nil
206
+ end
207
+
208
+ end
209
+
210
+ end
211
+ end
data/test/short.ogg ADDED
Binary file
@@ -0,0 +1,564 @@
1
+ require 'rubygame'
2
+ include Rubygame
3
+
4
+ samples_dir = File.join( File.dirname(__FILE__), "..", "samples", "")
5
+ test_dir = File.dirname(__FILE__)
6
+
7
+ song = samples_dir + "song.ogg"
8
+ short = File.join( File.dirname(__FILE__), "short.ogg")
9
+ dne = samples_dir + "does_not_exist.ogg"
10
+ panda = samples_dir + "panda.png"
11
+
12
+
13
+
14
+ #########################
15
+ ## ##
16
+ ## INITIALIAZING ##
17
+ ## ##
18
+ #########################
19
+
20
+
21
+ describe Sound, "new" do
22
+ it "should raise NotImplementedError" do
23
+ lambda{ Sound.new }.should raise_error(NotImplementedError)
24
+ end
25
+ end
26
+
27
+
28
+ describe Sound, "load" do
29
+
30
+ before :each do
31
+ Rubygame.open_audio
32
+ @sound = Sound.load(song)
33
+ end
34
+
35
+ after :each do
36
+ Rubygame.close_audio
37
+ end
38
+
39
+ it "should have a volume of 1.0" do
40
+ @sound.volume.should == 1.0
41
+ end
42
+
43
+ it { @sound.should_not be_playing }
44
+ it { @sound.should_not be_paused }
45
+ it { @sound.should be_stopped }
46
+
47
+ end
48
+
49
+
50
+
51
+ describe Sound, "load without open audio" do
52
+
53
+ before :each do
54
+ @sound = Sound.load(song)
55
+ end
56
+
57
+ after :each do
58
+ Rubygame.close_audio
59
+ end
60
+
61
+ it "should open audio" do
62
+ Rubygame.open_audio.should be_false
63
+ end
64
+
65
+ it "should have a volume of 1.0" do
66
+ @sound.volume.should == 1.0
67
+ end
68
+
69
+ it { @sound.should_not be_playing }
70
+ it { @sound.should_not be_paused }
71
+ it { @sound.should be_stopped }
72
+
73
+ end
74
+
75
+
76
+
77
+ describe "loading Sound from nonexistent file" do
78
+
79
+ before :each do
80
+ Rubygame.open_audio
81
+ end
82
+
83
+ after :each do
84
+ Rubygame.close_audio
85
+ end
86
+
87
+ it "should raise SDLError" do
88
+ lambda { @sound = Sound.load(dne) }.should raise_error(SDLError)
89
+ end
90
+
91
+ end
92
+
93
+
94
+
95
+ describe "loading Sound from non-sound file" do
96
+
97
+ before :each do
98
+ Rubygame.open_audio
99
+ end
100
+
101
+ after :each do
102
+ Rubygame.close_audio
103
+ end
104
+
105
+ it "should raise SDLError" do
106
+ lambda { @sound = Sound.load(panda) }.should raise_error(SDLError)
107
+ end
108
+
109
+ end
110
+
111
+
112
+ describe Sound, "(named resource)" do
113
+ before :each do
114
+ Sound.autoload_dirs = [samples_dir]
115
+ end
116
+
117
+ after :each do
118
+ Sound.autoload_dirs = []
119
+ Sound.instance_eval { @resources = {} }
120
+ end
121
+
122
+ it "should include NamedResource" do
123
+ Sound.included_modules.should include(NamedResource)
124
+ end
125
+
126
+ it "should respond to :[]" do
127
+ Sound.should respond_to(:[])
128
+ end
129
+
130
+ it "should respond to :[]=" do
131
+ Sound.should respond_to(:[]=)
132
+ end
133
+
134
+ it "should allow setting resources" do
135
+ s = Sound.load(short)
136
+ Sound["short"] = s
137
+ Sound["short"].should == s
138
+ end
139
+
140
+ it "should reject non-Sound resources" do
141
+ lambda { Sound["foo"] = "bar" }.should raise_error(TypeError)
142
+ end
143
+
144
+ it "should autoload images as Sound instances" do
145
+ unless( Rubygame::VERSIONS[:sdl_mixer] )
146
+ raise "Can't test sound loading, no SDL_mixer installed."
147
+ end
148
+
149
+ Sound["whiff.wav"].should be_instance_of(Sound)
150
+ end
151
+
152
+ it "should return nil for nonexisting files" do
153
+ unless( Rubygame::VERSIONS[:sdl_mixer] )
154
+ raise "Can't test sound loading, no SDL_mixer installed."
155
+ end
156
+
157
+ Sound["foobar.wav"].should be_nil
158
+ end
159
+
160
+ it "should set names of autoload Sounds" do
161
+ unless( Rubygame::VERSIONS[:sdl_mixer] )
162
+ raise "Can't test sound loading, no SDL_mixer installed."
163
+ end
164
+
165
+ Sound["whiff.wav"].name.should == "whiff.wav"
166
+ end
167
+ end
168
+
169
+
170
+ #########################
171
+ ## ##
172
+ ## BASIC ##
173
+ ## ##
174
+ #########################
175
+
176
+
177
+ describe "Sound that is playing" do
178
+
179
+ before :each do
180
+ Rubygame.open_audio
181
+ @sound = Sound.load(song)
182
+ @sound.play
183
+ end
184
+
185
+ after :each do
186
+ Rubygame.close_audio
187
+ end
188
+
189
+ it { @sound.should be_playing }
190
+ it { @sound.should_not be_paused }
191
+ it { @sound.should_not be_stopped }
192
+
193
+ it "should be playing after being played again" do
194
+ @sound.play
195
+ @sound.should be_playing
196
+ end
197
+
198
+ it "should be paused after being paused" do
199
+ @sound.pause
200
+ @sound.should be_paused
201
+ end
202
+
203
+ it "should be stopped after being stopped" do
204
+ @sound.stop
205
+ @sound.should be_stopped
206
+ end
207
+
208
+ it "should be able to change volume" do
209
+ @sound.volume = 0.5
210
+ @sound.volume.should == 0.5
211
+ end
212
+
213
+ end
214
+
215
+
216
+ describe Sound, "played without open audio" do
217
+
218
+ before :each do
219
+ @sound = Sound.load(song)
220
+ Rubygame.close_audio
221
+ @sound.play
222
+ end
223
+
224
+ after :each do
225
+ Rubygame.close_audio
226
+ end
227
+
228
+ it "should open audio" do
229
+ Rubygame.open_audio.should be_false
230
+ end
231
+
232
+ it "should be playing" do
233
+ @sound.should be_playing
234
+ end
235
+
236
+ end
237
+
238
+
239
+ describe "Sound that is paused" do
240
+
241
+ before :each do
242
+ Rubygame.open_audio
243
+ @sound = Sound.load(song)
244
+ @sound.play
245
+ @sound.pause
246
+ end
247
+
248
+ after :each do
249
+ Rubygame.close_audio
250
+ end
251
+
252
+ it { @sound.should_not be_playing }
253
+ it { @sound.should be_paused }
254
+ it { @sound.should_not be_stopped }
255
+
256
+ it "should be playing after being played" do
257
+ @sound.play
258
+ @sound.should be_playing
259
+ end
260
+
261
+ it "should be playing after being unpaused" do
262
+ @sound.unpause
263
+ @sound.should be_playing
264
+ end
265
+
266
+ it "should still be paused after being paused again" do
267
+ @sound.pause
268
+ @sound.should be_paused
269
+ end
270
+
271
+ it "should be stopped after being stopped" do
272
+ @sound.stop
273
+ @sound.should be_stopped
274
+ end
275
+
276
+ it "should be able to change volume" do
277
+ @sound.volume = 0.5
278
+ @sound.volume.should == 0.5
279
+ end
280
+
281
+ end
282
+
283
+
284
+
285
+ describe "Sound that is stopped" do
286
+
287
+ before :each do
288
+ Rubygame.open_audio
289
+ @sound = Sound.load(song)
290
+ @sound.play
291
+ @sound.stop
292
+ end
293
+
294
+ after :each do
295
+ Rubygame.close_audio
296
+ end
297
+
298
+ it { @sound.should_not be_playing }
299
+ it { @sound.should_not be_paused }
300
+ it { @sound.should be_stopped }
301
+
302
+ it "should not be paused after being paused" do
303
+ @sound.pause
304
+ @sound.should_not be_paused
305
+ end
306
+
307
+ it "should be stopped after being stopped" do
308
+ @sound.stop
309
+ @sound.should be_stopped
310
+ end
311
+
312
+ it "should be playing after being played" do
313
+ @sound.play
314
+ @sound.should be_playing
315
+ end
316
+
317
+ it "should be able to change volume" do
318
+ @sound.volume = 0.5
319
+ @sound.volume.should == 0.5
320
+ end
321
+
322
+ end
323
+
324
+
325
+
326
+ #########################
327
+ ## ##
328
+ ## AUTO-STOPPING ##
329
+ ## ##
330
+ #########################
331
+
332
+
333
+ describe "Sound set to stop after 0.2 seconds" do
334
+
335
+ before :each do
336
+ Rubygame.open_audio
337
+ @sound = Sound.load(song)
338
+ @sound.volume = 0.01 # for programmer sanity
339
+ @sound.play( :stop_after => 0.2 )
340
+ end
341
+
342
+ after :each do
343
+ Rubygame.close_audio
344
+ end
345
+
346
+ it "should still be playing at 0.15 seconds" do
347
+ sleep 0.15
348
+ @sound.should be_playing
349
+ end
350
+
351
+ it "should be stopped at 0.25 seconds" do
352
+ sleep 0.25
353
+ @sound.should be_stopped
354
+ end
355
+
356
+ end
357
+
358
+
359
+
360
+ describe "Sound that is short" do
361
+
362
+ before :each do
363
+ Rubygame.open_audio
364
+ @sound = Sound.load(short)
365
+ @sound.volume = 0.01 # for programmer sanity
366
+ @sound.play
367
+ end
368
+
369
+ after :each do
370
+ Rubygame.close_audio
371
+ end
372
+
373
+ it "should be stopped after it has expired" do
374
+ sleep 0.15
375
+ @sound.should be_stopped
376
+ end
377
+
378
+ end
379
+
380
+
381
+
382
+ describe "Sound that repeats forever but stops after 0.3 seconds" do
383
+
384
+ before :each do
385
+ Rubygame.open_audio
386
+ @sound = Sound.load(short)
387
+ @sound.volume = 0.01 # for programmer sanity
388
+ @sound.play( :repeats => -1, :stop_after => 0.3 )
389
+ end
390
+
391
+ after :each do
392
+ Rubygame.close_audio
393
+ end
394
+
395
+ it "should still be playing at 0.25 second" do
396
+ sleep 0.25
397
+ @sound.should be_playing
398
+ end
399
+
400
+ it "should be stopped at 0.35 second" do
401
+ sleep 0.35
402
+ @sound.should be_stopped
403
+ end
404
+
405
+ end
406
+
407
+
408
+
409
+ #########################
410
+ ## ##
411
+ ## REPEATING ##
412
+ ## ##
413
+ #########################
414
+
415
+
416
+ describe "Sound that repeats forever" do
417
+
418
+ before :each do
419
+ Rubygame.open_audio
420
+ @sound = Sound.load(short)
421
+ @sound.volume = 0.01 # for programmer sanity
422
+ @sound.play( :repeats => -1 )
423
+ end
424
+
425
+ after :each do
426
+ Rubygame.close_audio
427
+ end
428
+
429
+ it "should still be playing at 0.3 seconds" do
430
+ sleep 0.3
431
+ @sound.should be_playing
432
+ end
433
+
434
+ end
435
+
436
+
437
+
438
+ describe "Sound that repeats 3 times" do
439
+
440
+ before :each do
441
+ Rubygame.open_audio
442
+ @sound = Sound.load(short)
443
+ @sound.volume = 0.01 # for programmer sanity
444
+ @sound.play( :repeats => 3 )
445
+ end
446
+
447
+ after :each do
448
+ Rubygame.close_audio
449
+ end
450
+
451
+ it "should still be playing after 3 plays" do
452
+ sleep 0.1*3
453
+ @sound.should be_playing
454
+ end
455
+
456
+ it "should be stopped after 4 plays" do
457
+ sleep 0.1*4 + 0.05
458
+ @sound.should be_stopped
459
+ end
460
+
461
+ end
462
+
463
+
464
+
465
+ #########################
466
+ ## ##
467
+ ## FADING ##
468
+ ## ##
469
+ #########################
470
+
471
+
472
+ describe "Sound that fades in for 0.2 seconds" do
473
+
474
+ before :each do
475
+ Rubygame.open_audio
476
+ @sound = Sound.load(short)
477
+ @sound.volume = 0.01 # for programmer sanity
478
+ @sound.play( :repeats => -1, :fade_in => 0.2 )
479
+ end
480
+
481
+ after :each do
482
+ Rubygame.close_audio
483
+ end
484
+
485
+ it "should be playing right away" do
486
+ @sound.should be_playing
487
+ end
488
+
489
+ it "should be fading in right away" do
490
+ @sound.should be_fading
491
+ @sound.fading?(:in).should be_true
492
+ end
493
+
494
+ it "should still be fading in after 0.15 seconds" do
495
+ sleep 0.15
496
+ @sound.should be_fading
497
+ @sound.fading?(:in).should be_true
498
+ end
499
+
500
+ it "should not be fading in after 0.25 seconds" do
501
+ sleep 0.25
502
+ @sound.should_not be_fading
503
+ @sound.fading?(:in).should be_false
504
+ end
505
+
506
+ it "should still be playing after it has faded in" do
507
+ sleep 0.25
508
+ @sound.should be_playing
509
+ end
510
+
511
+ it "should not allow changing volume" do
512
+ lambda { @sound.volume = 0.5 }.should raise_error(SDLError)
513
+ @sound.volume.should_not == 0.5
514
+ end
515
+
516
+ end
517
+
518
+
519
+ describe "Sound that fades out for 0.2 seconds" do
520
+
521
+ before :each do
522
+ Rubygame.open_audio
523
+ @sound = Sound.load(short)
524
+ @sound.volume = 0.01 # for programmer sanity
525
+ @sound.play( :repeats => -1 )
526
+ @sound.fade_out( 0.2 )
527
+ end
528
+
529
+ after :each do
530
+ Rubygame.close_audio
531
+ end
532
+
533
+ it "should be playing right away" do
534
+ @sound.should be_playing
535
+ end
536
+
537
+ it "should be fading out right away" do
538
+ @sound.should be_fading
539
+ @sound.fading?(:out).should be_true
540
+ end
541
+
542
+ it "should still be fading out after 0.25 seconds" do
543
+ sleep 0.15
544
+ @sound.should be_fading
545
+ @sound.fading?(:out).should be_true
546
+ end
547
+
548
+ it "should not be fading out after 0.35 seconds" do
549
+ sleep 0.25
550
+ @sound.should_not be_fading
551
+ @sound.fading?(:out).should be_false
552
+ end
553
+
554
+ it "should be stopped after it has faded out" do
555
+ sleep 0.25
556
+ @sound.should be_stopped
557
+ end
558
+
559
+ it "should not allow changing volume" do
560
+ lambda { @sound.volume = 0.5 }.should raise_error(SDLError)
561
+ @sound.volume.should_not == 0.5
562
+ end
563
+
564
+ end