ruby-mpd 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,33 @@
1
+ class MPD
2
+ # Standard MPD error.
3
+ class Error < StandardError; end
4
+ # When something goes wrong with the connection
5
+ class ConnectionError < Error; end
6
+
7
+ # When the server returns an error. Superclass. Used for ACK_ERROR_UNKNOWN too.
8
+ class ServerError < Error; end
9
+
10
+ class NotListError < ServerError; end # ACK_ERROR_NOT_LIST <-- unused?
11
+ # ACK_ERROR_ARG - There was an error with one of the arguments.
12
+ class ServerArgumentError < ServerError; end
13
+ # MPD server password incorrect - ACK_ERROR_PASSWORD
14
+ class IncorrectPassword < ServerError; end
15
+ # ACK_ERROR_PERMISSION - not permitted to use the command.
16
+ # (Mostly, the solution is to connect via UNIX domain socket)
17
+ class PermissionError < ServerError; end
18
+
19
+ # ACK_ERROR_NO_EXIST - The requested resource was not found
20
+ class NotFound < ServerError; end
21
+ # ACK_ERROR_PLAYLIST_MAX - Playlist is at the max size
22
+ class PlaylistMaxError < ServerError; end
23
+ # ACK_ERROR_SYSTEM - One of the systems has errored.
24
+ class SystemError < ServerError; end
25
+ # ACK_ERROR_PLAYLIST_LOAD - unused?
26
+ class PlaylistLoadError < ServerError; end
27
+ # ACK_ERROR_UPDATE_ALREADY - Already updating the DB.
28
+ class AlreadyUpdating < ServerError; end
29
+ # ACK_ERROR_PLAYER_SYNC - not playing.
30
+ class NotPlaying < ServerError; end
31
+ # ACK_ERROR_EXIST - the resource already exists.
32
+ class AlreadyExists < ServerError; end
33
+ end
@@ -11,11 +11,13 @@ class MPD
11
11
  if word.is_a?(TrueClass) || word.is_a?(FalseClass)
12
12
  word ? '1' : '0' # convert bool to 1 or 0
13
13
  elsif word.is_a?(Range)
14
- if word.end == -1 #negative means to end of range
14
+ if word.end == -1 # negative means to end of range
15
15
  "#{word.begin}:"
16
16
  else
17
17
  "#{word.begin}:#{word.end + (word.exclude_end? ? 0 : 1)}"
18
18
  end
19
+ elsif word.is_a?(MPD::Song)
20
+ word.file
19
21
  else
20
22
  # escape any strings with space (wrap in double quotes)
21
23
  word = word.to_s
@@ -36,9 +38,14 @@ class MPD
36
38
  FLOAT_KEYS = [:mixrampdb, :elapsed]
37
39
  BOOL_KEYS = [:repeat, :random, :single, :consume, :outputenabled]
38
40
 
39
- # Parses key-value pairs into correct class
40
- # @todo special parsing of playlist, it's a int in :status and a string in :listplaylists
41
41
 
42
+ # Commands, where it makes sense to always explicitly return an array.
43
+ RETURN_ARRAY = [:channels, :outputs, :readmessages, :list, :listall,
44
+ :listallinfo, :find, :search, :listplaylists, :listplaylist, :playlistfind,
45
+ :playlistsearch, :plchanges, :tagtypes, :commands, :notcommands, :urlhandlers,
46
+ :decoders, :listplaylistinfo]
47
+
48
+ # Parses key-value pairs into correct class.
42
49
  def parse_key key, value
43
50
  if INT_KEYS.include? key
44
51
  value.to_i
@@ -113,11 +120,21 @@ class MPD
113
120
  end
114
121
  end
115
122
 
123
+ # Parses the response, determining per-command on what parsing logic
124
+ # to use (build_response vs build_grouped_response).
125
+ #
126
+ # @return [Array<Hash>, Array<String>, String, Integer] Parsed response.
127
+ def parse_response(command, string)
128
+ # return explicit array if needed
129
+ return RETURN_ARRAY.include?(command) ? [] : true if string.is_a?(TrueClass)
130
+ command == :listall ? build_grouped_response(string) : build_response(command, string)
131
+ end
132
+
116
133
  # Parses the response into appropriate objects (either a single object,
117
134
  # or an array of objects or an array of hashes).
118
135
  #
119
136
  # @return [Array<Hash>, Array<String>, String, Integer] Parsed response.
120
- def build_response(string)
137
+ def build_response(command, string)
121
138
  return [] if string.nil? || !string.is_a?(String)
122
139
 
123
140
  chunks = make_chunks(string)
@@ -128,15 +145,15 @@ class MPD
128
145
  result << (is_hash ? build_hash(chunk) : parse_line(chunk))
129
146
  end
130
147
 
131
- # if list has only one element, return it, else return array
132
- result = list.length == 1 ? list.first : list
148
+ # if list has only one element and not set to explicit array, return it, else return array
149
+ result = (list.length == 1 && !RETURN_ARRAY.include?(command)) ? list.first : list
133
150
  return result
134
151
  end
135
152
 
136
153
  # Parse the response into groups that have the same key (used for file lists,
137
154
  # groups together files, directories and playlists).
138
155
  # @return [Hash<Array>] A hash of key groups.
139
- def build_groups(string)
156
+ def build_grouped_response(string)
140
157
  return [] if string.nil? || !string.is_a?(String)
141
158
 
142
159
  string.split("\n").each_with_object({}) do |line, hash|
@@ -9,15 +9,12 @@ class MPD
9
9
  # plugins instead of the hard-coded simple m3u parser. They can access
10
10
  # playlists in the music directory (relative path including the suffix) or
11
11
  # remote playlists (absolute URI with a supported scheme).
12
- #
13
- # Changes: rm -> destroy. listplaylistinfo -> songs. Playlist prefixes
14
- # dropped also of course. Listplaylist not used, kinda inferior to listplaylistinfo
15
12
  class Playlist
16
13
 
17
14
  attr_accessor :name
18
15
 
19
16
  def initialize(mpd, options)
20
- @name = options[:playlist]
17
+ @name = options.is_a?(Hash) ? options[:playlist] : options.to_s
21
18
  @mpd = mpd
22
19
  #@last_modified = options[:'last-modified']
23
20
  end
@@ -25,7 +22,9 @@ class MPD
25
22
  # Lists the songs in the playlist. Playlist plugins are supported.
26
23
  # @return [Array<MPD::Song>] songs in the playlist.
27
24
  def songs
28
- mpd.build_songs_list @mpd.send_command(:listplaylistinfo, @name)
25
+ @mpd.send_command(:listplaylistinfo, @name).map {|hash| Song.new(hash) }
26
+ rescue NotFound
27
+ return [] # we rescue in the case the playlist doesn't exist.
29
28
  end
30
29
 
31
30
  # Loads the playlist into the current queue. Playlist plugins are supported.
@@ -51,7 +50,7 @@ class MPD
51
50
  # and +:any+ to match against all available tags.
52
51
  # @macro returnraise
53
52
  def searchadd(type, what)
54
- send_command :searchaddpl, @name, type, what
53
+ @mpd.send_command :searchaddpl, @name, type, what
55
54
  end
56
55
 
57
56
  # Clears the playlist.
@@ -1,4 +1,5 @@
1
1
  class MPD
2
+ # This namespace contains "plugins", which get included into the main class.
2
3
  module Plugins
3
4
  # = Client to client commands
4
5
  #
@@ -30,9 +31,7 @@ class MPD
30
31
  end
31
32
 
32
33
  # Obtain a list of all channels.
33
- # @return [Array<String>]
34
- # @return [String] if only one channel exists.
35
- # @return [true] if no channels exist.
34
+ # @return [Array<String>] a list of channels
36
35
  def channels
37
36
  send_command :channels
38
37
  end
@@ -40,8 +39,6 @@ class MPD
40
39
  # Reads messages for this client. The response is an array of
41
40
  # hashes with +:channel+ and +:message+ keys or true if no messages.
42
41
  # @return [Array<Hash>] Messages recieved.
43
- # @return [Hash] if only one message recieved
44
- # @return [true] if no messages.
45
42
  def readmessages
46
43
  send_command :readmessages
47
44
  end
@@ -1,8 +1,6 @@
1
1
  class MPD
2
2
  module Plugins
3
- # Commands for controlling playback. Changes have been made to {#seek},
4
- # command maps to +seekcur+ from MPD and the original seek command is
5
- # {#seekpos} here.
3
+ # Commands for controlling playback.
6
4
  module Controls
7
5
  # Plays the next song in the playlist.
8
6
  # @macro returnraise
@@ -11,7 +9,6 @@ class MPD
11
9
  end
12
10
 
13
11
  # Resume/pause playback.
14
- # @note The use of pause without an argument is deprecated in MPD.
15
12
  # @macro returnraise
16
13
  def pause=(toggle)
17
14
  send_command :pause, toggle
@@ -46,7 +43,7 @@ class MPD
46
43
  # @since MPD 0.17
47
44
  # @param [Integer, String] time Position within the current song.
48
45
  # @param [Hash] options Either +:id+ or +:pos+ can be specified.
49
- # Returns true if successful,
46
+ # @macro returnraise
50
47
  def seek(time, options = {})
51
48
  if options[:id]
52
49
  send_command :seekid, options[:id], time
@@ -1,9 +1,6 @@
1
1
  class MPD
2
2
  module Plugins
3
3
  # Commands for interacting with the music database.
4
- #
5
- # Changes: listallinfo -> songs, searchaddpl in MPD::Playlist#searchadd.
6
- # search merges search, find, searchadd and findadd
7
4
  module Database
8
5
 
9
6
  # Counts the number of songs and their total playtime
@@ -22,7 +19,13 @@ class MPD
22
19
  send_command :list, type, arg
23
20
  end
24
21
 
25
- # listall
22
+ # List all of the files in the database, starting at path.
23
+ # If path isn't specified, the root of the database is used.
24
+ #
25
+ # @return [Hash<String>] hash with array keys :file, :directory and :playlist.
26
+ def files(path = nil)
27
+ send_command :listall, path
28
+ end
26
29
 
27
30
  # List all of the songs in the database starting at path.
28
31
  # If path isn't specified, the root of the database is used
@@ -32,7 +35,8 @@ class MPD
32
35
  build_songs_list send_command(:listallinfo, path)
33
36
  end
34
37
 
35
- # lsinfo
38
+ # lsinfo - Clients that are connected via UNIX domain socket may use this
39
+ # command to read the tags of an arbitrary local file (URI beginning with "file:///").
36
40
 
37
41
  # Searches for any song that contains +what+ in the +type+ field.
38
42
  # Searches are case insensitive by default, however you can enable
@@ -68,11 +72,45 @@ class MPD
68
72
 
69
73
  # Same as {#update}, but also rescans unmodified files.
70
74
  #
71
- # @return [Integer] Update job ID
75
+ # @return (see #update)
72
76
  def rescan(path = nil)
73
77
  send_command :rescan, path
74
78
  end
75
79
 
80
+ # unofficial
81
+
82
+ # List all of the directories in the database, starting at path.
83
+ # If path isn't specified, the root of the database is used.
84
+ #
85
+ # @return [Array<String>] Array of directory names
86
+ def directories(path = nil)
87
+ response = send_command(:listall, path)
88
+ return response[:directory]
89
+ end
90
+
91
+ # Lists all of the albums in the database.
92
+ # The optional argument is for specifying an artist to list
93
+ # the albums for
94
+ #
95
+ # @return [Array<String>] An array of album names.
96
+ def albums(artist = nil)
97
+ list :album, artist
98
+ end
99
+
100
+ # Lists all of the artists in the database.
101
+ #
102
+ # @return [Array<String>] An array of artist names.
103
+ def artists
104
+ list :artist
105
+ end
106
+
107
+ # List all of the songs by an artist.
108
+ #
109
+ # @return [Array<MPD::Song>]
110
+ def songs_by_artist(artist)
111
+ search :artist, artist
112
+ end
113
+
76
114
  end
77
115
  end
78
116
  end
@@ -14,8 +14,11 @@ class MPD
14
14
  # Get the currently playing song
15
15
  #
16
16
  # @return [MPD::Song]
17
+ # @return [nil] if there is no song playing
17
18
  def current_song
18
- Song.new send_command :currentsong
19
+ hash = send_command :currentsong
20
+ # if there is no current song (we get true, then return nil)
21
+ hash.is_a?(TrueClass) ? nil : Song.new(hash)
19
22
  end
20
23
 
21
24
  # Waits until there is a noteworthy change in one or more of MPD's subsystems.
@@ -41,9 +44,9 @@ class MPD
41
44
  #
42
45
  # @since MPD 0.14
43
46
  # @param [Symbol] masks A list of subsystems we want to be notified on.
44
- def idle(*masks)
45
- send_command(:idle, *masks)
46
- end
47
+ #def idle(*masks)
48
+ # send_command(:idle, *masks)
49
+ #end
47
50
 
48
51
  # MPD status: volume, time, modes...
49
52
  # * *volume*: 0-100
@@ -1,8 +1,6 @@
1
1
  class MPD
2
2
  module Plugins
3
3
  # Commands related to setting various aspects and modes of playback.
4
- #
5
- # Changes: setvol -> volume.
6
4
  module PlaybackOptions
7
5
 
8
6
  # Enable/disable consume mode.
@@ -26,6 +24,7 @@ class MPD
26
24
  # volume so use negative values, I prefer -17dB. In the absence of mixramp
27
25
  # tags crossfading will be used. See http://sourceforge.net/projects/mixramp
28
26
  # @param [Float] decibels Maximum volume level in decibels.
27
+ # @macro returnraise
29
28
  def mixrampdb=(decibels)
30
29
  send_command :mixrampdb, decibels
31
30
  end
@@ -33,6 +32,7 @@ class MPD
33
32
  # Additional time subtracted from the overlap calculated by mixrampdb.
34
33
  # A value of "nan" or Float::NAN disables MixRamp overlapping and falls
35
34
  # back to crossfading.
35
+ # @macro returnraise
36
36
  def mixrampdelay=(seconds)
37
37
  send_command :mixrampdelay, seconds
38
38
  end
@@ -51,7 +51,7 @@ class MPD
51
51
 
52
52
  # Sets the volume level. (Maps to MPD's +setvol+)
53
53
  # @param [Integer] vol Volume level between 0 and 100.
54
- # @macro returnraise
54
+ # @return [Integer] The new volume level.
55
55
  def volume=(vol)
56
56
  send_command :setvol, vol
57
57
  end
@@ -1,13 +1,11 @@
1
1
  class MPD
2
2
  module Plugins
3
3
  # These commands manipulate stored playlists.
4
- #
5
- # Changes: listplaylists -> playlists.
6
4
  module Playlists
7
5
 
8
6
  # List all of the playlists in the database
9
7
  #
10
- # @return [Array<Hash>] Array of playlists
8
+ # @return [Array<MPD::Playlist>] Array of playlists
11
9
  def playlists
12
10
  send_command(:listplaylists).map {|opt| MPD::Playlist.new(self, opt)}
13
11
  end
@@ -2,17 +2,14 @@ class MPD
2
2
  module Plugins
3
3
  # These commands manipulate the current playlist, what's playing now.
4
4
  # For a distinction between this and other playlists, this is called
5
- # queue.
6
- # Changes: playlistinfo -> queue, plchanges -> queue_changes,
7
- # playlistid -> song_with_id, playlistfind -> queue_find,
8
- # playlistsearch -> queue_search, prio -> song_priority.
5
+ # queue.
9
6
  module Queue
10
7
 
11
8
  # List the current playlist/queue.
12
9
  # An Integer or Range can be used to limit the information returned
13
10
  # to a specific subset.
14
11
  #
15
- # @return [MPD::Song, Array<MPD::Song>] Array of songs in the queue
12
+ # @return [Array<MPD::Song>] Array of songs in the queue
16
13
  # or a single song.
17
14
  def queue(limit=nil)
18
15
  build_songs_list send_command(:playlistinfo, limit)
@@ -27,6 +24,7 @@ class MPD
27
24
 
28
25
  # Adds a song to the queue (*non-recursive*) and returns the song id.
29
26
  # Optionally, one can specify the position on which to add the song (since MPD 0.14).
27
+ # @return [Integer] id of the song that was added.
30
28
  def addid(path, pos=nil)
31
29
  send_command :addid, pos
32
30
  end
@@ -1,8 +1,6 @@
1
1
  class MPD
2
2
  module Plugins
3
3
  # Informational commands regarding MPD's internals and config.
4
- #
5
- # Changes: tagtypes was mapped to tags and gets fetched only once.
6
4
  module Reflection
7
5
  # Returns the config of MPD (currently only music_directory).
8
6
  # Only works if connected trough an UNIX domain socket.
@@ -36,7 +34,9 @@ class MPD
36
34
  send_command :decoders
37
35
  end
38
36
 
39
- # Get a list of available song metadata.
37
+ # Get a list of available song metadata fields. This gets only
38
+ # mapped once per-connect (it gets remapped if you connect and
39
+ # disconnect).
40
40
  # @return [Array] An array of tags.
41
41
  def tags
42
42
  @tags ||= send_command(:tagtypes).map {|tag| tag.downcase }
data/lib/ruby-mpd/song.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  class MPD; end
2
2
 
3
- # This class is a glorified Hash used to represent a song.
3
+ # Object representation of a song.
4
4
  #
5
5
  # If the field doesn't exist or isn't set, nil will be returned
6
6
  class MPD::Song
7
+ # length in seconds
8
+ attr_accessor :time
9
+
7
10
  def initialize(options)
8
- @data = {}
11
+ @data = {} #allowed fields are @types + :file
12
+ @time = options.delete(:time).first #HAXX for array return
9
13
  @data.merge! options
10
14
  end
11
15
 
@@ -14,10 +18,12 @@ class MPD::Song
14
18
  self.file == another.file
15
19
  end
16
20
 
21
+ # @return [String] A formatted representation of the song length ("1:02")
17
22
  def length
18
- return "#{(@data.time / 60)}:#{"%02d" % (@data.time % 60)}"
23
+ return "#{(@time / 60)}:#{"%02d" % (@time % 60)}"
19
24
  end
20
25
 
26
+ # Pass any unknown calls over to the data hash.
21
27
  def method_missing(m, *a)
22
28
  key = m #.to_s
23
29
  if key =~ /=$/
data/ruby-mpd.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
  Gem::Specification.new do |s|
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.name = 'ruby-mpd'
6
- s.version = '0.1.5'
6
+ s.version = '0.1.7'
7
7
  s.homepage = 'https://github.com/archSeer/ruby-mpd'
8
8
  s.authors = ["Blaž Hrastnik"]
9
9
  s.email = ['speed.the.bboy@gmail.com']
@@ -1,35 +1,24 @@
1
1
  #
2
- # Unit tests for librmpd
2
+ # Unit tests for ruby-mpd
3
3
  #
4
- # This uses the included mpdserver.rb test server
5
4
 
6
- require '../lib/librmpd'
7
- require '../lib/mpdserver'
5
+ require '../lib/ruby-mpd'
8
6
  require 'test/unit'
9
7
 
10
8
  class MPDTester < Test::Unit::TestCase
11
9
 
12
10
  def setup
13
11
  begin
14
- @port = 93932
15
- @server = MPDTestServer.new @port
16
- @server.start
17
- rescue Errno::EADDRINUSE
18
- @port = 94942
19
- @server = MPDTestServer.new @port
20
- @server.start
21
- end
22
- @mpd = MPD.new 'localhost', @port
12
+ @mpd = MPD.new 'localhost', 94942
23
13
  end
24
14
 
25
15
  def teardown
26
16
  @mpd.disconnect
27
- @server.stop
28
17
  end
29
18
 
30
19
  def test_connect
31
20
  ret = @mpd.connect
32
- assert_match /OK MPD [0-9.]*\n/, ret
21
+ assert ret
33
22
  end
34
23
 
35
24
  def test_connected?
@@ -73,10 +62,10 @@ class MPDTester < Test::Unit::TestCase
73
62
  assert_equal 'Are You Shpongled?', pls[0].album
74
63
  assert_equal 'Shpongle Falls', pls[0].title
75
64
 
76
- assert_raise(MPD::MPDError) {@mpd.add('Does/Not/Exist')}
65
+ assert_raise(MPD::ServerError) {@mpd.add('Does/Not/Exist')}
77
66
 
78
67
  @mpd.disconnect
79
- assert_raise(MPD::MPDError) {@mpd.add('Shpongle')}
68
+ assert_raise(MPD::ServerError) {@mpd.add('Shpongle')}
80
69
  end
81
70
 
82
71
  def test_clear
@@ -94,7 +83,7 @@ class MPDTester < Test::Unit::TestCase
94
83
  assert_equal 0, pls.size
95
84
 
96
85
  @mpd.disconnect
97
- assert_raise(MPD::MPDError) {@mpd.clear}
86
+ assert_raise(MPD::ServerError) {@mpd.clear}
98
87
  end
99
88
 
100
89
  def test_clearerror
@@ -104,7 +93,7 @@ class MPDTester < Test::Unit::TestCase
104
93
  assert @mpd.clearerror
105
94
 
106
95
  @mpd.disconnect
107
- assert_raise(MPD::MPDError) {@mpd.clearerror}
96
+ assert_raise(MPD::ServerError) {@mpd.clearerror}
108
97
  end
109
98
 
110
99
  def test_crossfade
@@ -116,8 +105,8 @@ class MPDTester < Test::Unit::TestCase
116
105
  assert_equal '40', @mpd.status['xfade']
117
106
 
118
107
  @mpd.disconnect
119
- assert_raise(MPD::MPDError) {@mpd.crossfade = 20}
120
- assert_raise(MPD::MPDError) {@mpd.crossfade}
108
+ assert_raise(MPD::ServerError) {@mpd.crossfade = 20}
109
+ assert_raise(MPD::ServerError) {@mpd.crossfade}
121
110
  end
122
111
 
123
112
  def test_current_song
@@ -155,7 +144,7 @@ class MPDTester < Test::Unit::TestCase
155
144
  assert_equal '1', s.track
156
145
 
157
146
  @mpd.disconnect
158
- assert_raise(MPD::MPDError) {@mpd.current_song}
147
+ assert_raise(MPD::ServerError) {@mpd.current_song}
159
148
  end
160
149
 
161
150
  def test_delete
@@ -171,10 +160,10 @@ class MPDTester < Test::Unit::TestCase
171
160
  assert_not_equal 'No On Ever Dreams', song.title
172
161
  end
173
162
 
174
- assert_raise(MPD::MPDError) {@mpd.delete(999)}
163
+ assert_raise(MPD::ServerError) {@mpd.delete(999)}
175
164
 
176
165
  @mpd.disconnect
177
- assert_raise(MPD::MPDError) {@mpd.delete(3)}
166
+ assert_raise(MPD::ServerError) {@mpd.delete(3)}
178
167
  end
179
168
 
180
169
  def test_deleteid
@@ -190,10 +179,10 @@ class MPDTester < Test::Unit::TestCase
190
179
  assert_not_equal 'No One Ever Dreams', song.title
191
180
  end
192
181
 
193
- assert_raise(MPD::MPDError) {@mpd.deleteid(999)}
182
+ assert_raise(MPD::ServerError) {@mpd.deleteid(999)}
194
183
 
195
184
  @mpd.disconnect
196
- assert_raise(MPD::MPDError) {@mpd.deleteid(11)}
185
+ assert_raise(MPD::ServerError) {@mpd.deleteid(11)}
197
186
  end
198
187
 
199
188
  def test_find
@@ -230,10 +219,10 @@ class MPDTester < Test::Unit::TestCase
230
219
  d = @mpd.find 'artist', 'no artist'
231
220
  assert_equal 0, d.size
232
221
 
233
- assert_raise(MPD::MPDError) {@mpd.find('error', 'no-such')}
222
+ assert_raise(MPD::ServerError) {@mpd.find('error', 'no-such')}
234
223
 
235
224
  @mpd.disconnect
236
- assert_raise(MPD::MPDError) {@mpd.find('album', 'Are You Shpongled')}
225
+ assert_raise(MPD::ServerError) {@mpd.find('album', 'Are You Shpongled')}
237
226
  end
238
227
 
239
228
  def test_kill
@@ -243,7 +232,7 @@ class MPDTester < Test::Unit::TestCase
243
232
 
244
233
  assert !@mpd.connected?
245
234
 
246
- assert_raise(MPD::MPDError) {@mpd.kill}
235
+ assert_raise(MPD::ServerError) {@mpd.kill}
247
236
  end
248
237
 
249
238
  def test_albums
@@ -264,7 +253,7 @@ class MPDTester < Test::Unit::TestCase
264
253
  assert_equal 'Nothing Lasts... But Nothing Is Lost', sh[1]
265
254
 
266
255
  @mpd.disconnect
267
- assert_raise(MPD::MPDError) {@mpd.albums}
256
+ assert_raise(MPD::ServerError) {@mpd.albums}
268
257
  end
269
258
 
270
259
  def test_artists
@@ -278,7 +267,7 @@ class MPDTester < Test::Unit::TestCase
278
267
  assert_equal 'Shpongle', artists[2]
279
268
 
280
269
  @mpd.disconnect
281
- assert_raise(MPD::MPDError) {@mpd.artists}
270
+ assert_raise(MPD::ServerError) {@mpd.artists}
282
271
  end
283
272
 
284
273
  def test_list
@@ -305,11 +294,11 @@ class MPDTester < Test::Unit::TestCase
305
294
  assert_equal 'Are You Shpongled?', arg[0]
306
295
  assert_equal 'Nothing Lasts... But Nothing Is Lost', arg[1]
307
296
 
308
- assert_raise(MPD::MPDError) {@mpd.list('fail')}
309
- assert_raise(MPD::MPDError) {@mpd.list('fail', 'Shpongle')}
297
+ assert_raise(MPD::ServerError) {@mpd.list('fail')}
298
+ assert_raise(MPD::ServerError) {@mpd.list('fail', 'Shpongle')}
310
299
 
311
300
  @mpd.disconnect
312
- assert_raise(MPD::MPDError) {@mpd.artists}
301
+ assert_raise(MPD::ServerError) {@mpd.artists}
313
302
  end
314
303
 
315
304
  def test_directories
@@ -333,10 +322,10 @@ class MPDTester < Test::Unit::TestCase
333
322
  assert_equal 'Shpongle/Are_You_Shpongled', shpongle[1]
334
323
  assert_equal 'Shpongle/Nothing_Lasts..._But_Nothing_Is_Lost', shpongle[2]
335
324
 
336
- assert_raise(MPD::MPDError) {@mpd.directories('no-dirs')}
325
+ assert_raise(MPD::ServerError) {@mpd.directories('no-dirs')}
337
326
 
338
327
  @mpd.disconnect
339
- assert_raise(MPD::MPDError) {@mpd.directories}
328
+ assert_raise(MPD::ServerError) {@mpd.directories}
340
329
  end
341
330
 
342
331
  def test_files
@@ -364,10 +353,10 @@ class MPDTester < Test::Unit::TestCase
364
353
  assert_equal 'Shpongle/Nothing_Lasts..._But_Nothing_Is_Lost/01.Botanical_Dimensions.ogg', sh[7]
365
354
  assert_equal 'Shpongle/Nothing_Lasts..._But_Nothing_Is_Lost/20.Falling_Awake.ogg', sh[26]
366
355
 
367
- assert_raise(MPD::MPDError) {@mpd.files('no-files')}
356
+ assert_raise(MPD::ServerError) {@mpd.files('no-files')}
368
357
 
369
358
  @mpd.disconnect
370
- assert_raise(MPD::MPDError) {@mpd.files}
359
+ assert_raise(MPD::ServerError) {@mpd.files}
371
360
  end
372
361
 
373
362
  def test_playlists
@@ -381,7 +370,7 @@ class MPDTester < Test::Unit::TestCase
381
370
  assert_equal 'Astral_Projection_-_Dancing_Galaxy', pls[1]
382
371
 
383
372
  @mpd.disconnect
384
- assert_raise(MPD::MPDError) {@mpd.playlists}
373
+ assert_raise(MPD::ServerError) {@mpd.playlists}
385
374
  end
386
375
 
387
376
  def test_songs
@@ -413,10 +402,10 @@ class MPDTester < Test::Unit::TestCase
413
402
  assert_equal 'Botanical Dimensions', sh[7].title
414
403
  assert_equal 'Falling Awake', sh[26].title
415
404
 
416
- assert_raise(MPD::MPDError) {@mpd.songs('no-songs')}
405
+ assert_raise(MPD::ServerError) {@mpd.songs('no-songs')}
417
406
 
418
407
  @mpd.disconnect
419
- assert_raise(MPD::MPDError) {@mpd.songs}
408
+ assert_raise(MPD::ServerError) {@mpd.songs}
420
409
  end
421
410
 
422
411
  def test_songs_by_artist
@@ -439,7 +428,7 @@ class MPDTester < Test::Unit::TestCase
439
428
  assert_equal 0, songs.size
440
429
 
441
430
  @mpd.disconnect
442
- assert_raise(MPD::MPDError) {@mpd.songs_by_artist('Shpongle')}
431
+ assert_raise(MPD::ServerError) {@mpd.songs_by_artist('Shpongle')}
443
432
  end
444
433
 
445
434
  def test_load
@@ -465,10 +454,10 @@ class MPDTester < Test::Unit::TestCase
465
454
  assert_equal 'Liquid Sun', pls[6].title
466
455
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', pls[7].title
467
456
 
468
- assert_raise(MPD::MPDError) {@mpd.load('No-PLS')}
457
+ assert_raise(MPD::ServerError) {@mpd.load('No-PLS')}
469
458
 
470
459
  @mpd.disconnect
471
- assert_raise(MPD::MPDError) {@mpd.load('Astral_Projection_-_Dancing_Galaxy')}
460
+ assert_raise(MPD::ServerError) {@mpd.load('Astral_Projection_-_Dancing_Galaxy')}
472
461
  end
473
462
 
474
463
  def test_move
@@ -495,10 +484,10 @@ class MPDTester < Test::Unit::TestCase
495
484
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', pls[6].title
496
485
  assert_equal 'Soundform', pls[7].title
497
486
 
498
- assert_raise(MPD::MPDError) {@mpd.move(999,1)}
487
+ assert_raise(MPD::ServerError) {@mpd.move(999,1)}
499
488
 
500
489
  @mpd.disconnect
501
- assert_raise(MPD::MPDError) {@mpd.move(3,1)}
490
+ assert_raise(MPD::ServerError) {@mpd.move(3,1)}
502
491
  end
503
492
 
504
493
  def test_moveid
@@ -525,10 +514,10 @@ class MPDTester < Test::Unit::TestCase
525
514
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', pls[6].title
526
515
  assert_equal 'Soundform', pls[7].title
527
516
 
528
- assert_raise(MPD::MPDError) {@mpd.moveid(999,1)}
517
+ assert_raise(MPD::ServerError) {@mpd.moveid(999,1)}
529
518
 
530
519
  @mpd.disconnect
531
- assert_raise(MPD::MPDError) {@mpd.moveid(10,1)}
520
+ assert_raise(MPD::ServerError) {@mpd.moveid(10,1)}
532
521
 
533
522
  end
534
523
 
@@ -546,7 +535,7 @@ class MPDTester < Test::Unit::TestCase
546
535
  assert_equal pos + 1, @mpd.status['song'].to_i
547
536
 
548
537
  @mpd.disconnect
549
- assert_raise(MPD::MPDError) {@mpd.next}
538
+ assert_raise(MPD::ServerError) {@mpd.next}
550
539
  end
551
540
 
552
541
  def test_pause
@@ -573,19 +562,19 @@ class MPDTester < Test::Unit::TestCase
573
562
  assert !@mpd.paused?
574
563
 
575
564
  @mpd.disconnect
576
- assert_raise(MPD::MPDError) {@mpd.pause = true}
577
- assert_raise(MPD::MPDError) {@mpd.paused?}
565
+ assert_raise(MPD::ServerError) {@mpd.pause = true}
566
+ assert_raise(MPD::ServerError) {@mpd.paused?}
578
567
  end
579
568
 
580
569
  def test_password
581
570
  @mpd.connect
582
571
 
583
- assert_raise(MPD::MPDError) {@mpd.password('wrong')}
572
+ assert_raise(MPD::ServerError) {@mpd.password('wrong')}
584
573
 
585
574
  assert @mpd.password('test')
586
575
 
587
576
  @mpd.disconnect
588
- assert_raise(MPD::MPDError) {@mpd.password('test')}
577
+ assert_raise(MPD::ServerError) {@mpd.password('test')}
589
578
  end
590
579
 
591
580
  def test_ping
@@ -594,7 +583,7 @@ class MPDTester < Test::Unit::TestCase
594
583
  assert @mpd.ping
595
584
 
596
585
  @mpd.disconnect
597
- assert_raise(MPD::MPDError) {@mpd.ping}
586
+ assert_raise(MPD::ServerError) {@mpd.ping}
598
587
  end
599
588
 
600
589
  def test_play
@@ -624,8 +613,8 @@ class MPDTester < Test::Unit::TestCase
624
613
  assert_equal 'Flying Into A Star', song.title
625
614
 
626
615
  @mpd.disconnect
627
- assert_raise(MPD::MPDError) {@mpd.play}
628
- assert_raise(MPD::MPDError) {@mpd.playing?}
616
+ assert_raise(MPD::ServerError) {@mpd.play}
617
+ assert_raise(MPD::ServerError) {@mpd.playing?}
629
618
  end
630
619
 
631
620
  def test_playid
@@ -655,8 +644,8 @@ class MPDTester < Test::Unit::TestCase
655
644
  assert_equal 'Flying Into A Star', song.title
656
645
 
657
646
  @mpd.disconnect
658
- assert_raise(MPD::MPDError) {@mpd.playid}
659
- assert_raise(MPD::MPDError) {@mpd.playing?}
647
+ assert_raise(MPD::ServerError) {@mpd.playid}
648
+ assert_raise(MPD::ServerError) {@mpd.playing?}
660
649
 
661
650
  end
662
651
 
@@ -674,7 +663,7 @@ class MPDTester < Test::Unit::TestCase
674
663
  assert_equal 9, ver
675
664
 
676
665
  @mpd.disconnect
677
- assert_raise(MPD::MPDError) {@mpd.playlist_version}
666
+ assert_raise(MPD::ServerError) {@mpd.playlist_version}
678
667
  end
679
668
 
680
669
  def test_playlist
@@ -700,7 +689,7 @@ class MPDTester < Test::Unit::TestCase
700
689
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', pls[7].title
701
690
 
702
691
  @mpd.disconnect
703
- assert_raise(MPD::MPDError) {@mpd.playlist}
692
+ assert_raise(MPD::ServerError) {@mpd.playlist}
704
693
  end
705
694
 
706
695
  def test_song_at_pos
@@ -717,10 +706,10 @@ class MPDTester < Test::Unit::TestCase
717
706
  assert_equal 'Liquid Sun', @mpd.song_at_pos(6).title
718
707
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', @mpd.song_at_pos(7).title
719
708
 
720
- assert_raise(MPD::MPDError) {@mpd.song_at_pos(999)}
709
+ assert_raise(MPD::ServerError) {@mpd.song_at_pos(999)}
721
710
 
722
711
  @mpd.disconnect
723
- assert_raise(MPD::MPDError) {@mpd.song_at_pos(0)}
712
+ assert_raise(MPD::ServerError) {@mpd.song_at_pos(0)}
724
713
  end
725
714
 
726
715
  def test_song_with_id
@@ -737,10 +726,10 @@ class MPDTester < Test::Unit::TestCase
737
726
  assert_equal 'Liquid Sun', @mpd.song_with_id(13).title
738
727
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', @mpd.song_with_id(14).title
739
728
 
740
- assert_raise(MPD::MPDError) {@mpd.song_with_id(999)}
729
+ assert_raise(MPD::ServerError) {@mpd.song_with_id(999)}
741
730
 
742
731
  @mpd.disconnect
743
- assert_raise(MPD::MPDError) {@mpd.song_with_id(10)}
732
+ assert_raise(MPD::ServerError) {@mpd.song_with_id(10)}
744
733
  end
745
734
 
746
735
  def test_playlist_changes
@@ -770,7 +759,7 @@ class MPDTester < Test::Unit::TestCase
770
759
  assert_equal 8, changes.size
771
760
 
772
761
  @mpd.disconnect
773
- assert_raise(MPD::MPDError) {@mpd.playlist_changes(9)}
762
+ assert_raise(MPD::ServerError) {@mpd.playlist_changes(9)}
774
763
  end
775
764
 
776
765
  def test_previous
@@ -791,7 +780,7 @@ class MPDTester < Test::Unit::TestCase
791
780
  assert_equal pos - 1, @mpd.status['song'].to_i
792
781
 
793
782
  @mpd.disconnect
794
- assert_raise(MPD::MPDError) {@mpd.previous}
783
+ assert_raise(MPD::ServerError) {@mpd.previous}
795
784
  end
796
785
 
797
786
  def test_random
@@ -804,8 +793,8 @@ class MPDTester < Test::Unit::TestCase
804
793
  assert !@mpd.random?
805
794
 
806
795
  @mpd.disconnect
807
- assert_raise(MPD::MPDError) {@mpd.random = false}
808
- assert_raise(MPD::MPDError) {@mpd.random?}
796
+ assert_raise(MPD::ServerError) {@mpd.random = false}
797
+ assert_raise(MPD::ServerError) {@mpd.random?}
809
798
  end
810
799
 
811
800
  def test_repeat
@@ -818,8 +807,8 @@ class MPDTester < Test::Unit::TestCase
818
807
  assert !@mpd.repeat?
819
808
 
820
809
  @mpd.disconnect
821
- assert_raise(MPD::MPDError) {@mpd.repeat = false}
822
- assert_raise(MPD::MPDError) {@mpd.repeat?}
810
+ assert_raise(MPD::ServerError) {@mpd.repeat = false}
811
+ assert_raise(MPD::ServerError) {@mpd.repeat?}
823
812
  end
824
813
 
825
814
  def test_rm
@@ -833,10 +822,10 @@ class MPDTester < Test::Unit::TestCase
833
822
 
834
823
  assert_equal 'Shpongle_-_Are_You_Shpongled', pls[0]
835
824
 
836
- assert_raise(MPD::MPDError) {@mpd.rm('Not-Exist')}
825
+ assert_raise(MPD::ServerError) {@mpd.rm('Not-Exist')}
837
826
 
838
827
  @mpd.disconnect
839
- assert_raise(MPD::MPDError) {@mpd.rm('Astral_Projection_-_Dancing_Galaxy')}
828
+ assert_raise(MPD::ServerError) {@mpd.rm('Astral_Projection_-_Dancing_Galaxy')}
840
829
  end
841
830
 
842
831
  def test_save
@@ -872,7 +861,7 @@ class MPDTester < Test::Unit::TestCase
872
861
  assert_equal '... and the Day Turned to Night', pls[14].title
873
862
 
874
863
  @mpd.disconnect
875
- assert_raise(MPD::MPDError) {@mpd.save('test')}
864
+ assert_raise(MPD::ServerError) {@mpd.save('test')}
876
865
  end
877
866
 
878
867
  def test_search
@@ -908,10 +897,10 @@ class MPDTester < Test::Unit::TestCase
908
897
  z = @mpd.search 'title', 'no-title'
909
898
  assert_equal 0, z.size
910
899
 
911
- assert_raise(MPD::MPDError) {@mpd.search('error', 'nosuch')}
900
+ assert_raise(MPD::ServerError) {@mpd.search('error', 'nosuch')}
912
901
 
913
902
  @mpd.disconnect
914
- assert_raise(MPD::MPDError) {@mpd.search('artist','searching')}
903
+ assert_raise(MPD::ServerError) {@mpd.search('artist','searching')}
915
904
  end
916
905
 
917
906
  def test_seek
@@ -940,7 +929,7 @@ class MPDTester < Test::Unit::TestCase
940
929
  assert_equal '200:585', status['time']
941
930
 
942
931
  @mpd.disconnect
943
- assert_raise(MPD::MPDError) {@mpd.seek(1, 100)}
932
+ assert_raise(MPD::ServerError) {@mpd.seek(1, 100)}
944
933
  end
945
934
 
946
935
  def test_seekid
@@ -969,7 +958,7 @@ class MPDTester < Test::Unit::TestCase
969
958
  assert_equal '200:585', status['time']
970
959
 
971
960
  @mpd.disconnect
972
- assert_raise(MPD::MPDError) {@mpd.seekid(1, 100)}
961
+ assert_raise(MPD::ServerError) {@mpd.seekid(1, 100)}
973
962
  end
974
963
 
975
964
  def test_volume
@@ -984,8 +973,8 @@ class MPDTester < Test::Unit::TestCase
984
973
  assert_equal vol, @mpd.volume
985
974
 
986
975
  @mpd.disconnect
987
- assert_raise(MPD::MPDError) {@mpd.volume = 10}
988
- assert_raise(MPD::MPDError) {@mpd.volume}
976
+ assert_raise(MPD::ServerError) {@mpd.volume = 10}
977
+ assert_raise(MPD::ServerError) {@mpd.volume}
989
978
  end
990
979
 
991
980
  def test_shuffle
@@ -1001,7 +990,7 @@ class MPDTester < Test::Unit::TestCase
1001
990
  assert_not_equal 'Dancing Galaxy', pls[0].title
1002
991
 
1003
992
  @mpd.disconnect
1004
- assert_raise(MPD::MPDError) {@mpd.shuffle}
993
+ assert_raise(MPD::ServerError) {@mpd.shuffle}
1005
994
  end
1006
995
 
1007
996
  def test_stats
@@ -1015,7 +1004,7 @@ class MPDTester < Test::Unit::TestCase
1015
1004
  assert_equal '500', stats['uptime']
1016
1005
 
1017
1006
  @mpd.disconnect
1018
- assert_raise(MPD::MPDError) {@mpd.stats}
1007
+ assert_raise(MPD::ServerError) {@mpd.stats}
1019
1008
  end
1020
1009
 
1021
1010
  def test_status
@@ -1028,7 +1017,7 @@ class MPDTester < Test::Unit::TestCase
1028
1017
  assert_equal '0', status['random']
1029
1018
 
1030
1019
  @mpd.disconnect
1031
- assert_raise(MPD::MPDError) {@mpd.status}
1020
+ assert_raise(MPD::ServerError) {@mpd.status}
1032
1021
  end
1033
1022
 
1034
1023
  def test_stop
@@ -1046,8 +1035,8 @@ class MPDTester < Test::Unit::TestCase
1046
1035
  assert !@mpd.playing?
1047
1036
 
1048
1037
  @mpd.disconnect
1049
- assert_raise(MPD::MPDError) {@mpd.stop}
1050
- assert_raise(MPD::MPDError) {@mpd.stopped?}
1038
+ assert_raise(MPD::ServerError) {@mpd.stop}
1039
+ assert_raise(MPD::ServerError) {@mpd.stopped?}
1051
1040
  end
1052
1041
 
1053
1042
  def test_swap
@@ -1081,10 +1070,10 @@ class MPDTester < Test::Unit::TestCase
1081
1070
  assert_equal 'Liquid Sun', pls[6].title
1082
1071
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', pls[1].title
1083
1072
 
1084
- assert_raise(MPD::MPDError) {@mpd.swap(999,1)}
1073
+ assert_raise(MPD::ServerError) {@mpd.swap(999,1)}
1085
1074
 
1086
1075
  @mpd.disconnect
1087
- assert_raise(MPD::MPDError) {@mpd.swap(2, 5)}
1076
+ assert_raise(MPD::ServerError) {@mpd.swap(2, 5)}
1088
1077
  end
1089
1078
 
1090
1079
  def test_swapid
@@ -1118,10 +1107,10 @@ class MPDTester < Test::Unit::TestCase
1118
1107
  assert_equal 'Liquid Sun', pls[6].title
1119
1108
  assert_equal 'Ambient Galaxy (Disco Valley Mix)', pls[1].title
1120
1109
 
1121
- assert_raise(MPD::MPDError) {@mpd.swapid(999,8)}
1110
+ assert_raise(MPD::ServerError) {@mpd.swapid(999,8)}
1122
1111
 
1123
1112
  @mpd.disconnect
1124
- assert_raise(MPD::MPDError) {@mpd.swapid(9, 12)}
1113
+ assert_raise(MPD::ServerError) {@mpd.swapid(9, 12)}
1125
1114
  end
1126
1115
 
1127
1116
  def test_update
@@ -1140,6 +1129,6 @@ class MPDTester < Test::Unit::TestCase
1140
1129
  assert_nil status['updating_db']
1141
1130
 
1142
1131
  @mpd.disconnect
1143
- assert_raise(MPD::MPDError) {@mpd.update}
1132
+ assert_raise(MPD::ServerError) {@mpd.update}
1144
1133
  end
1145
1134
  end