updating tests to match new mpd 0.14 behaviour
[audio-mpd.git] / t / 30-collection.t
blob7b03b4ad79f4f3b4b18f6560479e8f6051ee1a1a
1 #!perl
3 # This file is part of Audio::MPD
4 # Copyright (c) 2007-2009 Jerome Quelin, all rights reserved.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the same terms as Perl itself.
11 use strict;
12 use warnings;
14 use Audio::MPD;
15 use Test::More;
17 # are we able to test module?
18 eval 'use Audio::MPD::Test';
19 plan skip_all => $@ if $@ =~ s/\n+Compilation failed.*//s;
21 plan tests => 76;
22 my $mpd = Audio::MPD->new;
23 my @list;
27 # testing collection accessor.
28 my $coll = $mpd->collection;
29 isa_ok( $coll, 'Audio::MPD::Collection',
30         'collection return an Audio::MPD::Collection object' );
34 # testing all_items.
35 @list = $coll->all_items;
36 is( scalar @list, 6, 'all_items return all 6 items' );
37 isa_ok( $_, 'Audio::MPD::Common::Item', 'all_items return AMCI objects' )
38     for @list;
39 @list = $coll->all_items( 'dir1' );
40 is( scalar @list, 3, 'all_items can be restricted to a subdir' );
41 is( $list[0]->directory, 'dir1', 'all_items return a subdir first' );
42 is( $list[1]->artist, 'dir1-artist', 'all_items can be restricted to a subdir' );
46 # testing all_items_simple.
47 @list = $coll->all_items_simple;
48 is( scalar @list, 6, 'all_items_simple return all 6 items' );
49 isa_ok( $_, 'Audio::MPD::Common::Item', 'all_items_simple return AMCI objects' )
50     for @list;
51 @list = $coll->all_items_simple( 'dir1' );
52 is( scalar @list, 3, 'all_items_simple can be restricted to a subdir' );
53 is( $list[0]->directory, 'dir1', 'all_items_simple return a subdir first' );
54 is( $list[1]->artist, undef, 'all_items_simple does not return full tags' );
58 # testing items_in_dir.
59 @list = $coll->items_in_dir;
60 is( scalar @list, 4, 'items_in_dir defaults to root' );
61 isa_ok( $_, 'Audio::MPD::Common::Item', 'items_in_dir return AMCI objects' ) for @list;
62 @list = $coll->items_in_dir( 'dir1' );
63 is( scalar @list, 2, 'items_in_dir can take a param' );
67 # testing all_songs.
68 @list = $coll->all_songs;
69 is( scalar @list, 4, 'all_songs return all 4 songs' );
70 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'all_items return AMCIS objects' ) for @list;
71 @list = $coll->all_songs( 'dir1' );
72 is( scalar @list, 2, 'all_songs can be restricted to a subdir' );
73 is( $list[0]->artist, 'dir1-artist', 'all_songs can be restricted to a subdir' );
77 # testing all_albums.
78 # note: mpd 0.14 also returns empty albums
79 @list = $coll->all_albums;
80 is( scalar @list, 2, 'all_albums return the albums' );
81 is( $list[1], 'our album', 'all_albums return strings' );
85 # testing all_artists.
86 # note: mpd 0.14 also returns empty artists
87 @list = $coll->all_artists;
88 is( scalar @list, 2, 'all_artists return the artists' );
89 is( $list[0], 'dir1-artist', 'all_artists return strings' );
93 # testing all_titles.
94 # note: mpd 0.14 also returns empty titles
95 @list = $coll->all_titles;
96 is( scalar @list, 4, 'all_titles return the titles' );
97 like( $list[0], qr/-title$/, 'all_titles return strings' );
101 # testing all_pathes.
102 @list = $coll->all_pathes;
103 is( scalar @list, 4, 'all_pathes return the pathes' );
104 like( $list[0], qr/\.ogg$/, 'all_pathes return strings' );
108 # testing all_playlists
109 @list = $coll->all_playlists;
110 is( scalar @list, 1, 'all_playlists return the playlists' );
111 is( $list[0], 'test', 'all_playlists return strings' );
115 # testing song.
116 my $path = 'dir1/title-artist-album.ogg';
117 my $song = $coll->song($path);
118 isa_ok( $song, 'Audio::MPD::Common::Item::Song', 'song return an AMCI::Song object' );
119 is( $song->file, $path, 'song return the correct song' );
120 is( $song->title, 'foo-title', 'song return a full AMCI::Song' );
124 # testing songs_with_filename_partial.
125 @list = $coll->songs_with_filename_partial('album');
126 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_with_filename_partial return AMCI::Song objects' )
127     for @list;
128 like( $list[0]->file, qr/album/, 'songs_with_filename_partial return the correct song' );
132 # testing albums_by_artist.
133 # note: mpd 0.14 also returns empty albums
134 @list = $coll->albums_by_artist( 'dir1-artist' );
135 is( scalar @list, 2, 'albums_by_artist return the album' );
136 is( $list[1], 'our album', 'albums_by_artist return plain strings' );
140 # testing songs_by_artist.
141 @list = $coll->songs_by_artist( 'dir1-artist' );
142 is( scalar @list, 2, 'songs_by_artist return all the songs found' );
143 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_by_artist return AMCI::Songs' ) for @list;
144 is( $list[0]->artist, 'dir1-artist', 'songs_by_artist return correct objects' );
148 # testing songs_by_artist_partial.
149 @list = $coll->songs_by_artist_partial( 'artist' );
150 is( scalar @list, 2, 'songs_by_artist_partial return all the songs found' );
151 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_by_artist_partial return AMCI::Songs' ) for @list;
152 like( $list[0]->artist, qr/artist/, 'songs_by_artist_partial return correct objects' );
156 # testing songs_from_album.
157 @list = $coll->songs_from_album( 'our album' );
158 is( scalar @list, 2, 'songs_from_album return all the songs found' );
159 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_from_album return AMCI::Songs' ) for @list;
160 is( $list[0]->album, 'our album', 'songs_from_album_partial return correct objects' );
164 # testing songs_from_album_partial.
165 @list = $coll->songs_from_album_partial( 'album' );
166 is( scalar @list, 2, 'songs_from_album_partial return all the songs found' );
167 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_from_album_partial return AMCI::Songs' ) for @list;
168 like( $list[0]->album, qr/album/, 'songs_from_album_partial return correct objects' );
172 # testing songs_with_title.
173 @list = $coll->songs_with_title( 'ok-title' );
174 is( scalar @list, 1, 'songs_with_title return all the songs found' );
175 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_with_title return AMCI::Songs' ) for @list;
176 is( $list[0]->title, 'ok-title', 'songs_with_title return correct objects' );
180 # testing songs_with_title_partial.
181 @list = $coll->songs_with_title_partial( 'title' );
182 is( scalar @list, 3, 'songs_with_title_partial return all the songs found' );
183 isa_ok( $_, 'Audio::MPD::Common::Item::Song', 'songs_with_title_partial return AMCI::Songs' ) for @list;
184 like( $list[0]->title, qr/title/, 'songs_with_title_partial return correct objects' );
187 exit;