mplayer-ruby 0.1.0 → 0.2.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.
@@ -1,75 +1,28 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
1
  # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
4
 
6
- Gem::Specification.new do |s|
7
- s.name = %q{mplayer-ruby}
8
- s.version = "0.1.0"
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "mplayer-ruby"
7
+ gem.version = "0.2.0"
8
+ gem.date = %q{2010-02-01}
9
+ gem.authors = ["Arthur Chiu"]
10
+ gem.email = %q{mr.arthur.chiu@gmail.com}
11
+ gem.description = %q{A Ruby wrapper for MPlayer}
12
+ gem.summary = %q{Ruby wrapper for MPlayer}
13
+ gem.homepage = %q{http://github.com/achiu/mplayer-ruby}
14
+ gem.rdoc_options = ["--charset=UTF-8"]
15
+ gem.extra_rdoc_files = Dir["*.rdoc"]
9
16
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Arthur Chiu"]
12
- s.date = %q{2010-02-01}
13
- s.description = %q{A Ruby wrapper for MPlayer}
14
- s.email = %q{mr.arthur.chiu@gmail.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc",
18
- "TODO"
19
- ]
20
- s.files = [
21
- ".document",
22
- ".gitignore",
23
- "LICENSE",
24
- "README.rdoc",
25
- "Rakefile",
26
- "TODO",
27
- "VERSION",
28
- "examples/general_playback.rb",
29
- "lib/mplayer-ruby.rb",
30
- "lib/mplayer-ruby/slave.rb",
31
- "lib/mplayer-ruby/slave_commands.rb",
32
- "lib/mplayer-ruby/slave_video_commands.rb",
33
- "mplayer-ruby.gemspec",
34
- "test.watchr",
35
- "test/mplayer-ruby_test.rb",
36
- "test/slave_commands_test.rb",
37
- "test/slave_test.rb",
38
- "test/slave_video_commands_test.rb",
39
- "test/test.mp3",
40
- "test/teststrap.rb"
41
- ]
42
- s.homepage = %q{http://github.com/achiu/mplayer-ruby}
43
- s.rdoc_options = ["--charset=UTF-8"]
44
- s.require_paths = ["lib"]
45
- s.rubygems_version = %q{1.3.5}
46
- s.summary = %q{Ruby wrapper for MPlayer}
47
- s.test_files = [
48
- "test/mplayer-ruby_test.rb",
49
- "test/slave_commands_test.rb",
50
- "test/slave_test.rb",
51
- "test/slave_video_commands_test.rb",
52
- "test/teststrap.rb",
53
- "examples/general_playback.rb"
54
- ]
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ["lib"]
55
21
 
56
- if s.respond_to? :specification_version then
57
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
- s.specification_version = 3
22
+ gem.add_dependency "open4", "~> 1.3.0"
59
23
 
60
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
- s.add_development_dependency(%q<riot>, [">= 0.10.11"])
62
- s.add_development_dependency(%q<rr>, [">= 0.10.5"])
63
- s.add_runtime_dependency(%q<open4>, [">= 1.0.1"])
64
- else
65
- s.add_dependency(%q<riot>, [">= 0.10.11"])
66
- s.add_dependency(%q<rr>, [">= 0.10.5"])
67
- s.add_dependency(%q<open4>, [">= 1.0.1"])
68
- end
69
- else
70
- s.add_dependency(%q<riot>, [">= 0.10.11"])
71
- s.add_dependency(%q<rr>, [">= 0.10.5"])
72
- s.add_dependency(%q<open4>, [">= 1.0.1"])
73
- end
74
- end
24
+ gem.add_development_dependency "rake", "~> 10.1.0"
25
+ gem.add_development_dependency "riot", "~> 0.12.6"
26
+ gem.add_development_dependency "rr", "~> 1.1.2"
75
27
 
28
+ end
@@ -1,84 +1,80 @@
1
1
  require File.expand_path("teststrap", File.dirname(__FILE__))
2
2
 
3
- context "MPlayer::Player" do
4
- setup do
5
- mock(Open4).popen4("/usr/bin/mplayer -slave -quiet test/test.mp3") { [true,true,true,true] }
6
- stub(true).gets { "playback" }
7
- @player = MPlayer::Slave.new('test/test.mp3')
8
- end
3
+ context "MPlayer::SlaveCommands" do
4
+ setup_player
9
5
 
10
6
  context "pause" do
11
- setup { mock_send @player, "pause" }
7
+ setup { mock_command @player, "pause" }
12
8
  asserts("returns true") { @player.pause }
13
9
  end
14
10
 
15
11
  context "quit" do
16
12
  setup do
17
- mock_send @player, "quit"
18
- mock(@player.stdin).close { true }
13
+ mock_command @player, "quit"
14
+ mock(@player.stdin).close { true } ; @player
19
15
  end
20
16
  asserts("returns true") { @player.quit }
21
17
  end
22
18
 
23
19
  context "volume" do
20
+ asserts("incorrect action") { @player.volume :boo }.equals false
24
21
 
25
22
  context "increases" do
26
- setup { mock_send @player, "volume 1","Volume: 10 %\n",/Volume/ }
23
+ setup { mock_command @player, "volume 1","Volume: 10 %\n",/Volume/ }
27
24
  asserts("returns true") { @player.volume :up }.equals "10"
28
25
  end
29
26
 
30
27
  context "decreases" do
31
- setup { mock_send @player, "volume 0","Volume: 10 %\n",/Volume/ }
28
+ setup { mock_command @player, "volume 0","Volume: 10 %\n",/Volume/ }
32
29
  asserts("returns true") { @player.volume :down }.equals "10"
33
30
  end
34
31
 
35
32
  context "sets volume" do
36
- setup { mock_send @player, "volume 40 1","Volume: 10 %\n",/Volume/ }
33
+ setup { mock_command @player, "volume 40 1","Volume: 10 %\n",/Volume/ }
37
34
  asserts("returns true") { @player.volume :set,40 }.equals "10"
38
35
  end
39
-
40
- context "incorrect action" do
41
- setup { @player.volume :boo }
42
- asserts("returns false").equals false
43
- end
44
36
  end
45
37
 
46
38
  context "seek" do
47
39
 
48
40
  context "by relative" do
49
- setup { mock_send @player, "seek 5 0","Position: 10 %\n",/Position/ }
41
+ setup { mock_command @player, "seek 5 0","Position: 10 %\n",/Position/ }
50
42
  asserts("seek 5") { @player.seek 5 }
43
+ end
44
+
45
+ context "explicit relative" do
46
+ setup { mock_command @player, "seek 5 0","Position: 10 %\n",/Position/ }
51
47
  asserts("seek 5,:relative") { @player.seek 5,:relative }.equals "10"
52
48
  end
53
49
 
54
50
  context "by percentage" do
55
- setup { mock_send @player, "seek 5 1","Position: 10 %\n",/Position/ }
51
+ setup { mock_command @player, "seek 5 1","Position: 10 %\n",/Position/ }
56
52
  asserts("seek 5,:percent") { @player.seek 5,:percent }.equals "10"
57
53
  end
58
54
 
59
55
  context "by absolute" do
60
- setup { mock_send @player, "seek 5 2","Position: 10 %\n",/Position/ }
56
+ setup { mock_command @player, "seek 5 2","Position: 10 %\n",/Position/ }
61
57
  asserts("seek 5,:absolute") { @player.seek 5,:absolute }.equals "10"
62
58
  end
63
59
  end
64
60
 
65
61
  context "edl_mark" do
66
- setup { mock_send @player, "edl_mark"}
62
+ setup { mock_command @player, "edl_mark"}
67
63
  asserts("returns true") { @player.edl_mark }
68
64
  end
69
65
 
70
66
  context "speed_incr" do
71
- setup { mock_send @player, "speed_incr 5","Speed: x 10",/Speed/ }
67
+ setup { mock_command @player, "speed_incr 5","Speed: x 10",/Speed/ }
72
68
  asserts("speed_incr 5") { @player.speed_incr 5 }.equals "10"
73
69
  end
74
70
 
75
71
  context "speed_mult" do
76
- setup { mock_send @player, "speed_mult 5","Speed: x 10",/Speed/ }
72
+ setup { mock_command @player, "speed_mult 5","Speed: x 10",/Speed/ }
77
73
  asserts("speed_mult 5") { @player.speed_mult 5 }.equals "10"
78
74
  end
79
75
 
80
76
  context "speed_set" do
81
- setup { mock_send @player, "speed_set 5","Speed: x 10",/Speed/ }
77
+ setup { mock_command @player, "speed_set 5","Speed: x 10",/Speed/ }
82
78
  asserts("speed_set 5") { @player.speed_set 5 }.equals "10"
83
79
  end
84
80
 
@@ -103,25 +99,33 @@ context "MPlayer::Player" do
103
99
  context "set" do
104
100
  setup { mock(@player).speed_set(5) { true } }
105
101
  asserts("speed 5") { @player.speed 5 }
102
+ end
103
+
104
+ context "explicit set" do
105
+ setup { mock(@player).speed_set(5) { true } }
106
106
  asserts("speed 5, :set") { @player.speed 5,:set }
107
107
  end
108
108
  end
109
109
 
110
110
  context "frame_step" do
111
- setup { mock_send @player, "frame_step" }
111
+ setup { mock_command @player, "frame_step" }
112
112
  asserts("returns true") { @player.frame_step }
113
113
  end
114
114
 
115
115
  context "pt_step" do
116
116
 
117
117
  context "forced" do
118
- setup { mock_send @player, "pt_step 5 1" }
118
+ setup { mock_command @player, "pt_step 5 1" }
119
119
  asserts("pt_step 5, :force") { @player.pt_step 5, :force }
120
120
  end
121
121
 
122
122
  context "not forced" do
123
- setup { mock_send @player, "pt_step 5 0" }
123
+ setup { mock_command @player, "pt_step 5 0" }
124
124
  asserts("pt_step 5") { @player.pt_step 5 }
125
+ end
126
+
127
+ context "explicit not forced" do
128
+ setup { mock_command @player, "pt_step 5 0" }
125
129
  asserts("pt_step 5, :no_force") { @player.pt_step 5, :no_force }
126
130
  end
127
131
  end
@@ -129,60 +133,68 @@ context "MPlayer::Player" do
129
133
  context "pt_up_step" do
130
134
 
131
135
  context "forced" do
132
- setup { mock_send @player, "pt_up_step 5 1"}
136
+ setup { mock_command @player, "pt_up_step 5 1"}
133
137
  asserts("pt_up_step 5, :force") { @player.pt_up_step 5, :force }
134
138
  end
135
139
 
136
140
  context "not forced" do
137
- setup { mock_send @player, "pt_up_step 5 0" }
141
+ setup { mock_command @player, "pt_up_step 5 0" }
138
142
  asserts("pt_up_step 5") { @player.pt_up_step 5 }
143
+ end
144
+
145
+ context "explicit not forced" do
146
+ setup { mock_command @player, "pt_up_step 5 0" }
139
147
  asserts("pt_up_step 5, :no_force") { @player.pt_up_step 5, :no_force }
140
148
  end
141
149
  end
142
150
 
143
151
  context "alt_src_step" do
144
- setup { mock_send @player, "alt_src_step 5" }
152
+ setup { mock_command @player, "alt_src_step 5" }
145
153
  asserts("returns true") { @player.alt_src_step 5 }
146
154
  end
147
155
 
148
156
  context "loop" do
149
157
 
150
158
  context "none" do
151
- setup { mock_send @player,"loop -1" }
159
+ setup { mock_command @player,"loop -1" }
152
160
  asserts("loop :none") { @player.loop :none }
153
161
  end
154
162
 
155
163
  context "forever" do
156
- setup { mock_send @player, "loop 0" }
164
+ setup { mock_command @player, "loop 0" }
157
165
  asserts("loop") { @player.loop }
166
+ end
167
+
168
+ context "explicit forever" do
169
+ setup { mock_command @player, "loop 0" }
158
170
  asserts("loop :forever") { @player.loop :forever }
159
171
  end
160
172
 
161
173
  context "set value" do
162
- setup { mock_send @player,"loop 5" }
174
+ setup { mock_command @player,"loop 5" }
163
175
  asserts("loop :set, 5") { @player.loop :set, 5 }
164
176
  end
165
177
  end
166
178
 
167
179
  context "use_master" do
168
- setup { mock_send @player, "use_master" }
180
+ setup { mock_command @player, "use_master" }
169
181
  asserts("returns true") { @player.use_master }
170
182
  end
171
183
 
172
184
  context "mute" do
173
185
 
174
186
  context "toggle" do
175
- setup { mock_send @player, "mute", "Mute: enabled",/Mute/}
187
+ setup { mock_command @player, "mute", "Mute: enabled",/Mute/}
176
188
  asserts("returns true") { @player.mute }.equals "enabled"
177
189
  end
178
190
 
179
191
  context "set on" do
180
- setup { mock_send @player, "mute 1","Mute: enabled",/Mute/}
192
+ setup { mock_command @player, "mute 1","Mute: enabled",/Mute/}
181
193
  asserts("mute :on") { @player.mute :on }.equals "enabled"
182
194
  end
183
195
 
184
196
  context "set off" do
185
- setup { mock_send @player, "mute 0","Mute: enabled",/Mute/}
197
+ setup { mock_command @player, "mute 0","Mute: enabled",/Mute/}
186
198
  asserts("mute :off") { @player.mute :off }.equals "enabled"
187
199
  end
188
200
  end
@@ -199,7 +211,7 @@ context "MPlayer::Player" do
199
211
  when "file_name" then "ANS_FILENAME"
200
212
  else "ANS_#{info.upcase}"
201
213
  end
202
- setup { mock_send @player, "get_#{info}","#{resp}='100'",/#{resp}/ }
214
+ setup { mock_command @player, "get_#{info}","#{resp}='100'",/#{resp}/ }
203
215
  asserts("get :#{info}") { @player.get info.to_sym }
204
216
  end
205
217
  end
@@ -208,32 +220,59 @@ context "MPlayer::Player" do
208
220
  context "load_file" do
209
221
 
210
222
  asserts("invalid file") { @player.load_file 'booger' }.raises ArgumentError,"Invalid File"
211
- context "append" do
212
- setup { mock_send @player, "loadfile test/test.mp3 1" }
213
- asserts("load_file test/test.mp3, :append") { @player.load_file 'test/test.mp3', :append }
214
- end
223
+ [
224
+ ["url", "http://www.example.com/test.mp3"],
225
+ ["file", "test/test.mp3"]
226
+ ].each do |kind, location|
227
+ context kind do
228
+ context "append" do
229
+ setup { mock_command @player, "loadfile \"#{location}\" 1" }
230
+ asserts("load_file #{location}, :append") { @player.load_file location, :append }
231
+ end
232
+
233
+ context "no append" do
234
+ setup { mock_command @player, "loadfile \"#{location}\" 0" }
235
+ asserts("load_file #{location}") { @player.load_file location }
236
+ end
215
237
 
216
- context "no append" do
217
- setup { mock_send @player, "loadfile test/test.mp3 0" }
218
- asserts("load_file test/test.mp3") { @player.load_file 'test/test.mp3' }
219
- asserts("load_file test/test.mp3, :no_append") { @player.load_file 'test/test.mp3', :no_append }
238
+ context "explicit no append" do
239
+ setup { mock_command @player, "loadfile \"#{location}\" 0" }
240
+ asserts("load_file #{location}, :no_append") { @player.load_file location, :no_append }
241
+ end
242
+ end
220
243
  end
221
244
  end
222
245
 
223
246
  context "load_list" do
224
247
 
225
248
  asserts("invalid playlist") { @player.load_list 'booger' }.raises ArgumentError,"Invalid File"
226
- context "append" do
227
- setup { mock_send @player, "loadlist test/test.mp3 1" }
228
- asserts("load_list test/test.mp3, :append") { @player.load_list 'test/test.mp3', :append }
229
- end
249
+ [
250
+ ["url", "http://www.example.com/test.mp3"],
251
+ ["file", "test/test.mp3"]
252
+ ].each do |kind, location|
253
+ context kind do
254
+ context "append" do
255
+ setup { mock_command @player, "loadlist \"#{location}\" 1" }
256
+ asserts("load_list #{location}, :append") { @player.load_list location, :append }
257
+ end
258
+
259
+ context "no append" do
260
+ setup { mock_command @player, "loadlist \"#{location}\" 0" }
261
+ asserts("load_list #{location}") { @player.load_list location }
262
+ #asserts("load_list #{location}, :no_append") { @player.load_list location, :no_append }
263
+ end
230
264
 
231
- context "no append" do
232
- setup { mock_send @player, "loadlist test/test.mp3 0" }
233
- asserts("load_list test/test.mp3") { @player.load_list 'test/test.mp3' }
234
- asserts("load_list test/test.mp3, :no_append") { @player.load_list 'test/test.mp3', :no_append }
265
+ context "explicit no append" do
266
+ setup { mock_command @player, "loadlist \"#{location}\" 0" }
267
+ asserts("load_list #{location}, :no_append") { @player.load_list location, :no_append }
268
+ end
269
+ end
235
270
  end
236
271
  end
237
272
 
273
+ context "balance" do
274
+ setup { mock_command @player, "balance 2.1" }
275
+ asserts("blance 2.1") { @player.balance 2.1 }
276
+ end
238
277
 
239
278
  end
@@ -0,0 +1,243 @@
1
+ require File.expand_path("teststrap", File.dirname(__FILE__))
2
+
3
+ context "MPlayer::SlaveSubCommands" do
4
+ setup_player
5
+
6
+ context "sub_delay" do
7
+
8
+ context "absolute" do
9
+ setup { mock_stdin @player, "sub_delay 5 1" }
10
+ asserts("sub_delay 5") { @player.sub_delay 5 }
11
+ end
12
+
13
+ context "explicit absolute" do
14
+ setup { mock_stdin @player, "sub_delay 5 1" }
15
+ asserts("sub_delay 5, :absolute") { @player.sub_delay 5,:absolute }
16
+ end
17
+
18
+ context "relative" do
19
+ setup { mock_stdin @player, "sub_delay 5 0" }
20
+ asserts("sub_delay 5, :relative") { @player.sub_delay 5, :relative }
21
+ end
22
+ end
23
+
24
+ context "sub_step" do
25
+
26
+ context "next" do
27
+ setup { mock_stdin @player, "sub_step 5" }
28
+ asserts("sub_step 5") { @player.sub_step 5 }
29
+ end
30
+
31
+ context "explicit next" do
32
+ setup { mock_stdin @player, "sub_step 5" }
33
+ asserts("sub_step 5,:next") { @player.sub_step 5, :next }
34
+ end
35
+
36
+ context "prev" do
37
+ setup { mock_stdin @player, "sub_step -5" }
38
+ asserts("sub_step -5") { @player.sub_step -5 }
39
+ end
40
+
41
+ context "explicit prev" do
42
+ setup { mock_stdin @player, "sub_step -5" }
43
+ asserts("sub_step 5,:backward") { @player.sub_step 5,:prev }
44
+ end
45
+ end
46
+
47
+ context "sub_pos" do
48
+ context "by relative" do
49
+ setup { mock_stdin @player, "sub_pos 5 0" }
50
+ asserts("sub_pos 5") { @player.sub_pos 5 }
51
+ end
52
+
53
+ context "by explicit relative" do
54
+ setup { mock_stdin @player, "sub_pos 5 0" }
55
+ asserts("sub_pos 5,:relative") { @player.sub_pos 5,:relative }
56
+ end
57
+
58
+ context "by absolute" do
59
+ setup { mock_stdin @player, "sub_pos 5 1" }
60
+ asserts("sub_pos 5,:absolute") { @player.sub_pos 5,:absolute }
61
+ end
62
+ end
63
+
64
+ context "sub_alignment" do
65
+
66
+ context "toggle" do
67
+ setup { mock_stdin @player, "sub_alignment" }
68
+ asserts("returns true") { @player.sub_alignment }
69
+ end
70
+
71
+ context "top" do
72
+ setup { mock_stdin @player, "sub_alignment 0" }
73
+ asserts("sub_alignment :top") { @player.sub_alignment :top }
74
+ end
75
+
76
+ context "center" do
77
+ setup { mock_stdin @player, "sub_alignment 1" }
78
+ asserts("sub_alignment :top") { @player.sub_alignment :center }
79
+ end
80
+
81
+ context "bottom" do
82
+ setup { mock_stdin @player, "sub_alignment 2" }
83
+ asserts("sub_alignment :top") { @player.sub_alignment :bottom }
84
+ end
85
+ end
86
+
87
+ context "sub_visibility" do
88
+
89
+ context "toggle" do
90
+ setup { mock_stdin @player, "sub_visibility" }
91
+ asserts("sub_visiblity") { @player.sub_visibility }
92
+ end
93
+
94
+ context "on" do
95
+ setup { mock_stdin @player, "sub_visibility 1" }
96
+ asserts("sub_visibility :on") { @player.sub_visibility :on }
97
+ end
98
+
99
+ context "off" do
100
+ setup { mock_stdin @player, "sub_visibility 0" }
101
+ asserts("sub_visibility :off") { @player.sub_visibility :off }
102
+ end
103
+ end
104
+
105
+ context "sub_load" do
106
+
107
+ asserts("invalid file") { @player.sub_load "booger" }.raises ArgumentError,"Invalid File"
108
+ context "valid file" do
109
+ setup { mock_stdin @player, "sub_load test/test.mp3" }
110
+ asserts("sub_load 'test/test.mp3'") { @player.sub_load "test/test.mp3" }
111
+ end
112
+ end
113
+
114
+ context "sub_remove" do
115
+
116
+ context "all" do
117
+ setup { mock_stdin @player, "sub_remove -1" }
118
+ asserts("sub_remove") { @player.sub_remove }
119
+ end
120
+
121
+ context "explicit all" do
122
+ setup { mock_stdin @player, "sub_remove -1" }
123
+ asserts("sub_remove :all") { @player.sub_remove :all }
124
+ end
125
+
126
+ context "index" do
127
+ setup { mock_stdin @player, "sub_remove 1" }
128
+ asserts("sub_remove 1") { @player.sub_remove 1 }
129
+ end
130
+ end
131
+
132
+ context "sub_select" do
133
+
134
+ context "select" do
135
+ setup { mock_stdin @player, "sub_select 1" }
136
+ asserts("sub_select 1") { @player.sub_select 1 }
137
+ end
138
+
139
+ context "cycle" do
140
+ setup { mock_stdin @player, "sub_select -2" }
141
+ asserts("sub_select") { @player.sub_select }
142
+ end
143
+
144
+ context "explicit cycle" do
145
+ setup { mock_stdin @player, "sub_select -2" }
146
+ asserts("sub_select :cycle") { @player.sub_select :cycle }
147
+ end
148
+ end
149
+
150
+ context "sub_source" do
151
+
152
+ context "sub" do
153
+ setup { mock_stdin @player, "sub_source 0" }
154
+ asserts("sub_source :sub") { @player.sub_source :sub }
155
+ end
156
+
157
+ context "vobsub" do
158
+ setup { mock_stdin @player, "sub_source 1"}
159
+ asserts("sub_source :vobsub") { @player.sub_source :vobsub }
160
+ end
161
+
162
+ context "demux" do
163
+ setup { mock_stdin @player, "sub_source 2" }
164
+ asserts("sub_source :demux") { @player.sub_source :demux }
165
+ end
166
+
167
+ context "off" do
168
+ setup { mock_stdin @player, "sub_source -1" }
169
+ asserts("sub_source :off") { @player.sub_source :off }
170
+ end
171
+
172
+ context "cycle" do
173
+ setup { mock_stdin @player, "sub_source -2" }
174
+ asserts("sub_source :cycle") { @player.sub_source :cycle }
175
+ end
176
+
177
+ context "explicit cycle" do
178
+ setup { mock_stdin @player, "sub_source -2" }
179
+ asserts("sub_source") { @player.sub_source }
180
+ end
181
+ end
182
+
183
+ %w[sub_file sub_vob sub_demux].each do |sub|
184
+
185
+ context sub do
186
+
187
+ context "index" do
188
+ setup { mock_stdin @player, "#{sub} 1" }
189
+ asserts("#{sub} 1") { @player.method(sub).call 1 }
190
+ end
191
+
192
+ context "off" do
193
+ setup { mock_stdin @player, "#{sub} -1" }
194
+ asserts("#{sub} :off") { @player.method(sub).call :off}
195
+ end
196
+
197
+ context "cycle" do
198
+ setup { mock_stdin @player, "#{sub} -2" }
199
+ asserts("#{sub} :cycle") { @player.method(sub).call :cycle }
200
+ end
201
+
202
+ context "explicit cycle" do
203
+ setup { mock_stdin @player, "#{sub} -2" }
204
+ asserts("#{sub}") { @player.method(sub).call }
205
+ end
206
+ end
207
+ end
208
+
209
+ context "sub_scale" do
210
+ context "by relative" do
211
+ setup { mock_stdin @player, "sub_scale 5 0" }
212
+ asserts("sub_scale 5") { @player.sub_scale 5 }
213
+ end
214
+
215
+ context "explicitly by relative" do
216
+ setup { mock_stdin @player, "sub_scale 5 0" }
217
+ asserts("sub_scale 5,:relative") { @player.sub_scale 5,:relative }
218
+ end
219
+
220
+ context "by absolute" do
221
+ setup { mock_stdin @player, "sub_scale 5 1" }
222
+ asserts("sub_scale 5,:absolute") { @player.sub_scale 5,:absolute }
223
+ end
224
+ end
225
+
226
+ context "forced_subs_only" do
227
+ context "toggle" do
228
+ setup { mock_stdin @player, "forced_subs_only" }
229
+ asserts("forced_subs_only") { @player.forced_subs_only }
230
+ end
231
+
232
+ context "on" do
233
+ setup { mock_stdin @player, "forced_subs_only 1" }
234
+ asserts("forced_subs_only :on") { @player.forced_subs_only :on }
235
+ end
236
+
237
+ context "off" do
238
+ setup { mock_stdin @player, "forced_subs_only 0" }
239
+ asserts("forced_subs_only :off") { @player.forced_subs_only :off }
240
+ end
241
+ end
242
+
243
+ end