diff --git a/mopidy/frontends/mpd/protocol/music_db.py b/mopidy/frontends/mpd/protocol/music_db.py index 8f41b199..00b9ec00 100644 --- a/mopidy/frontends/mpd/protocol/music_db.py +++ b/mopidy/frontends/mpd/protocol/music_db.py @@ -335,7 +335,7 @@ def rescan(context, uri=None): @handle_request( r'^search (?P("?([Aa]lbum|[Aa]rtist|[Dd]ate|[Ff]ile[name]*|' - r'[Tt]itle|[Aa]ny)"? "[^"]+"\s?)+)$') + r'[Tt]itle|[Aa]ny)"? "[^"]*"\s?)+)$') def search(context, mpd_query): """ *musicpd.org, music database section:* diff --git a/tests/frontends/mpd/protocol/music_db_test.py b/tests/frontends/mpd/protocol/music_db_test.py index 44999a4f..4539eb4c 100644 --- a/tests/frontends/mpd/protocol/music_db_test.py +++ b/tests/frontends/mpd/protocol/music_db_test.py @@ -362,6 +362,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search album "analbum"') self.assertInResponse('OK') + def test_search_album_without_filter_value(self): + self.sendRequest('search "album" ""') + self.assertInResponse('OK') + def test_search_artist(self): self.sendRequest('search "artist" "anartist"') self.assertInResponse('OK') @@ -370,6 +374,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search artist "anartist"') self.assertInResponse('OK') + def test_search_artist_without_filter_value(self): + self.sendRequest('search "artist" ""') + self.assertInResponse('OK') + def test_search_filename(self): self.sendRequest('search "filename" "afilename"') self.assertInResponse('OK') @@ -378,6 +386,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search filename "afilename"') self.assertInResponse('OK') + def test_search_filename_without_filter_value(self): + self.sendRequest('search "filename" ""') + self.assertInResponse('OK') + def test_search_file(self): self.sendRequest('search "file" "afilename"') self.assertInResponse('OK') @@ -386,6 +398,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search file "afilename"') self.assertInResponse('OK') + def test_search_file_without_filter_value(self): + self.sendRequest('search "file" ""') + self.assertInResponse('OK') + def test_search_title(self): self.sendRequest('search "title" "atitle"') self.assertInResponse('OK') @@ -394,6 +410,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search title "atitle"') self.assertInResponse('OK') + def test_search_title_without_filter_value(self): + self.sendRequest('search "title" ""') + self.assertInResponse('OK') + def test_search_any(self): self.sendRequest('search "any" "anything"') self.assertInResponse('OK') @@ -402,6 +422,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search any "anything"') self.assertInResponse('OK') + def test_search_any_without_filter_value(self): + self.sendRequest('search "any" ""') + self.assertInResponse('OK') + def test_search_date(self): self.sendRequest('search "date" "2002-01-01"') self.assertInResponse('OK') @@ -414,6 +438,10 @@ class MusicDatabaseSearchTest(protocol.BaseTestCase): self.sendRequest('search Date "2005"') self.assertInResponse('OK') + def test_search_date_without_filter_value(self): + self.sendRequest('search "date" ""') + self.assertInResponse('OK') + def test_search_else_should_fail(self): self.sendRequest('search "sometype" "something"') self.assertEqualResponse('ACK [2@0] {search} incorrect arguments')