diff --git a/lib/mplayer-ruby/slave_video_commands.rb b/lib/mplayer-ruby/slave_video_commands.rb index 5e36702..7c06922 100644 --- a/lib/mplayer-ruby/slave_video_commands.rb +++ b/lib/mplayer-ruby/slave_video_commands.rb @@ -157,8 +157,13 @@ def vo_rootwin(value = nil) # nil Take a single screenshot. # :toggle Start/stop taking screenshot of each frame. def screenshot(toggle=nil) - switch = toggle == :toggle ? 1 : 0 - send "screenshot #{switch}" + switch, pattern = case toggle + when :toggle + [ 1, // ] + else + [ 0, /screenshot/ ] + end + (send("screenshot #{switch}", pattern)) =~ /(shot\d*\.png)/ ? $~[1] : "" end # Increases or descreases the panscan range by . maximum is 1.0. @@ -234,4 +239,4 @@ def change_rectangle(coord,value,type = :relative) end end -end \ No newline at end of file +end diff --git a/test/slave_video_commands_test.rb b/test/slave_video_commands_test.rb index 16158b9..ddbea8b 100644 --- a/test/slave_video_commands_test.rb +++ b/test/slave_video_commands_test.rb @@ -224,14 +224,27 @@ context "screenshot" do context "take screenshot" do - setup { mock_stdin @player, "screenshot 0" } - asserts("screenshot") { @player.screenshot } + setup do + mock_stdin @player, "screenshot 0" + mock_stdout @player, "", "*** screenshot 'shot0001.png' ***" + end + asserts("screenshot") { @player.screenshot == 'shot0001.png' } end context "start/stop screenshot" do - setup { mock_stdin @player, "screenshot 1" } + setup do + mock_stdin @player, "screenshot 1" + end asserts("screenshot :toggle") { @player.screenshot :toggle } end + + context "no file output on toggle" do + setup do + mock_stdin @player, "screenshot 1" + dont_allow(@player.stdout).gets + end + asserts("screenshot :toggle") { @player.screenshot(:toggle) == "" } + end end context "panscan" do