From 250956d0df7c1f06843b0bc3a0c33ea9f2b2a642 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 22 Jan 2016 11:10:57 +0000 Subject: mpd: beginnings of list support --- lib/dtas/mpd_emu_client.rb | 25 +++++++++++++++++++++++++ test/test_mpd_emu.rb | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/lib/dtas/mpd_emu_client.rb b/lib/dtas/mpd_emu_client.rb index f073b9e..3691ff1 100644 --- a/lib/dtas/mpd_emu_client.rb +++ b/lib/dtas/mpd_emu_client.rb @@ -32,6 +32,7 @@ class DTAS::MpdEmuClient # :nodoc: @rbuf = ''.b @wbuf = nil @cmd_listnum = 0 + @cmd_list = nil out("OK #{SERVER}\n") end @@ -62,6 +63,10 @@ class DTAS::MpdEmuClient # :nodoc: end end + def unknown_cmd(cmd) + %Q!#{err(:ERROR_UNKNOWN)} unknown command "#{cmd}"\n! + end + def err(sym) "[#{ACK[sym]}@#@cmd_listnum {}" end @@ -74,6 +79,26 @@ class DTAS::MpdEmuClient # :nodoc: out("OK\n") end + def mpdcmd_command_list_begin + if @cmd_list + @cmd_list << 'command_list_begin' # will trigger failure + else + @cmd_list = [] + end + end + + def mpdcmd_command_list_end + @cmd_list or return out(unknown_cmd('command_list_end')) + list = @cmd_list + @cmd_list = nil + list.each do |cmd| + case cmd + when 'command_list_begin', 'command_list_ok_begin' + return out(unknown_cmd(cmd)) + end + end + end + def mpdcmd_stats out("artists: \n" \ "albums: \n" \ diff --git a/test/test_mpd_emu.rb b/test/test_mpd_emu.rb index 869bff4..e536459 100644 --- a/test/test_mpd_emu.rb +++ b/test/test_mpd_emu.rb @@ -51,6 +51,14 @@ class TestMpdEmu < Testcase assert_nil @c.read(1) end + def test_bad_list_states + %w(command_list_end).each do |cmd| + @c.write "#{cmd}\n" + assert_equal %Q![5@0 {} unknown command "#{cmd}"\n!, @c.gets + assert_nil IO.select([@c], nil, nil, 0) + end + end + # to ensure output buffering works: module BigOutput WAKE = IO.pipe -- cgit v1.2.3-24-ge0c7