1 /****************************************************************************************
2  * Copyright (c) 2009 Maximilian Kossick <maximilian.kossick@googlemail.com>            *
3  *                                                                                      *
4  * This program is free software; you can redistribute it and/or modify it under        *
5  * the terms of the GNU General Public License as published by the Free Software        *
6  * Foundation; either version 2 of the License, or (at your option) any later           *
7  * version.                                                                             *
8  *                                                                                      *
9  * This program is distributed in the hope that it will be useful, but WITHOUT ANY      *
10  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A      *
11  * PARTICULAR PURPOSE. See the GNU General Public License for more details.             *
12  *                                                                                      *
13  * You should have received a copy of the GNU General Public License along with         *
14  * this program.  If not, see <http://www.gnu.org/licenses/>.                           *
15  ****************************************************************************************/
16 
17 #ifndef METAMOCK_H
18 #define METAMOCK_H
19 
20 #include "core/meta/Meta.h"
21 #include "core/meta/Statistics.h"
22 #include "core/meta/support/MetaConstants.h"
23 
24 #include <QDateTime>
25 #include <QVariantMap>
26 
27 /**
28   * This class provides simple mocks for meta classes.
29   * it will look for the keys defined in meta/MetaConstants.h
30   * in the given QVariantMap and return those values in the respective methods.
31   */
32 class MetaMock : public Meta::Track, Meta::Statistics
33 {
34 public:
MetaMock(const QVariantMap & data)35     MetaMock( const QVariantMap &data ) : Meta::Track(), m_data( data ), m_labels( Meta::LabelList() ) {}
~MetaMock()36     ~MetaMock() override {}
37 
album()38     Meta::AlbumPtr album() const override { return m_album; }
year()39     Meta::YearPtr year() const override { return m_year; }
genre()40     Meta::GenrePtr genre() const override { return m_genre; }
artist()41     Meta::ArtistPtr artist() const override { return m_artist; }
composer()42     Meta::ComposerPtr composer() const override { return m_composer; }
43 
name()44     QString name() const override { return m_data.value( Meta::Field::TITLE ).toString(); }
prettyName()45     QString prettyName() const override { return name(); }
playableUrl()46     QUrl playableUrl() const override { return m_data.value( Meta::Field::URL ).value<QUrl>(); }
prettyUrl()47     QString prettyUrl() const override { return playableUrl().url(); }
uidUrl()48     QString uidUrl() const override { return m_data.value( Meta::Field::UNIQUEID ).toString(); }
notPlayableReason()49     QString notPlayableReason() const override { return QStringLiteral( "dummy reason" ); }
comment()50     QString comment() const override { return m_data.value( Meta::Field::COMMENT ).toString(); }
bpm()51     qreal bpm() const override { return m_data.value( Meta::Field::BPM ).toDouble(); }
length()52     qint64 length() const override { return m_data.value( Meta::Field::LENGTH ).toInt(); }
filesize()53     int filesize() const override { return m_data.value( Meta::Field::FILESIZE ).toInt(); }
sampleRate()54     int sampleRate() const override { return m_data.value( Meta::Field::SAMPLERATE ).toInt(); }
bitrate()55     int bitrate() const override { return m_data.value( Meta::Field::BITRATE ).toInt(); }
createDate()56     QDateTime createDate() const override { return QDateTime(); }    //field missing
trackNumber()57     int trackNumber() const override { return m_data.value( Meta::Field::TRACKNUMBER ).toInt(); }
discNumber()58     int discNumber() const override { return m_data.value( Meta::Field::DISCNUMBER ).toInt(); }
type()59     QString type() const override { return "Mock"; }
60 
labels()61     Meta::LabelList labels() const override { return m_labels; }
62 
statistics()63     Meta::StatisticsPtr statistics() override { return Meta::StatisticsPtr( this ); }
64 
65     // Meta::Statistics getters
score()66     double score() const override { return m_data.value( Meta::Field::SCORE ).toDouble(); }
rating()67     int rating() const override { return m_data.value( Meta::Field::RATING ).toInt(); }
firstPlayed()68     QDateTime firstPlayed() const override { return m_data.value( Meta::Field::FIRST_PLAYED ).toDateTime(); }
lastPlayed()69     QDateTime lastPlayed() const override { return m_data.value( Meta::Field::LAST_PLAYED ).toDateTime(); }
playCount()70     int playCount() const override { return m_data.value( Meta::Field::PLAYCOUNT ).toInt(); }
71 
72     // Meta::Statistics setters
setScore(double newScore)73     void setScore( double newScore ) override { m_data[Meta::Field::SCORE].setValue( newScore ); }
setRating(int newRating)74     void setRating( int newRating ) override { m_data[Meta::Field::RATING].setValue( newRating ); }
setFirstPlayed(const QDateTime & date)75     void setFirstPlayed( const QDateTime &date ) override { m_data[Meta::Field::FIRST_PLAYED].setValue( date ); }
setLastPlayed(const QDateTime & date)76     void setLastPlayed( const QDateTime &date ) override { m_data[Meta::Field::LAST_PLAYED].setValue( date ); }
setPlayCount(int newPlayCount)77     void setPlayCount( int newPlayCount ) override { m_data[Meta::Field::PLAYCOUNT].setValue( newPlayCount ); }
78 
79 public:
80     QVariantMap m_data;
81     Meta::ArtistPtr m_artist;
82     Meta::AlbumPtr m_album;
83     Meta::GenrePtr m_genre;
84     Meta::YearPtr m_year;
85     Meta::ComposerPtr m_composer;
86     Meta::LabelList m_labels;
87 };
88 
89 class MockYear : public Meta::Year
90 {
91 public:
MockYear(const QString & name)92     MockYear( const QString &name )
93         : Meta::Year()
94         , m_name( name ) {}
95 
name()96     QString name() const override { return m_name; }
prettyName()97     QString prettyName() const override { return m_name; }
tracks()98     Meta::TrackList tracks() override { return Meta::TrackList(); }
99 
100     QString m_name;
101 };
102 
103 class MockGenre : public Meta::Genre
104 {
105 public:
MockGenre(const QString & name)106     MockGenre( const QString &name )
107         : Meta::Genre()
108         , m_name( name ) {}
109 
name()110     QString name() const override { return m_name; }
prettyName()111     QString prettyName() const override { return m_name; }
tracks()112     Meta::TrackList tracks() override { return Meta::TrackList(); }
113 
114     QString m_name;
115 };
116 
117 class MockComposer : public Meta::Composer
118 {
119 public:
MockComposer(const QString & name)120     MockComposer( const QString &name )
121         : Meta::Composer()
122         , m_name( name ) {}
123 
name()124     QString name() const override { return m_name; }
prettyName()125     QString prettyName() const override { return m_name; }
tracks()126     Meta::TrackList tracks() override { return Meta::TrackList(); }
127 
128     QString m_name;
129 };
130 
131 class MockArtist : public Meta::Artist
132 {
133 public:
MockArtist(const QString & name)134     MockArtist( const QString &name )
135         : Meta::Artist()
136         , m_name( name ) {}
137 
name()138     QString name() const override { return m_name; }
prettyName()139     QString prettyName() const override { return m_name; }
tracks()140     Meta::TrackList tracks() override { return Meta::TrackList(); }
albums()141     Meta::AlbumList albums() { return Meta::AlbumList(); }
142 
143     QString m_name;
144 };
145 
146 class MockAlbum : public Meta::Album
147 {
148 public:
149     MockAlbum( const QString &name, const Meta::ArtistPtr &albumArtist = Meta::ArtistPtr() )
Album()150         : Meta::Album()
151         , m_name( name )
152         , m_albumArtist( albumArtist ) {}
153 
name()154     QString name() const override { return m_name; }
prettyName()155     QString prettyName() const override { return m_name; }
tracks()156     Meta::TrackList tracks() override { return Meta::TrackList(); }
hasAlbumArtist()157     bool hasAlbumArtist() const override { return ( m_albumArtist ) ? true : false; }
albumArtist()158     Meta::ArtistPtr albumArtist() const override { return m_albumArtist; }
isCompilation()159     bool isCompilation() const override { return !hasAlbumArtist(); }
160 
161     QString m_name;
162     Meta::ArtistPtr m_albumArtist;
163 };
164 
165 class MockLabel : public Meta::Label
166 {
167     public:
MockLabel(const QString & name)168         MockLabel( const QString &name )
169             : Meta::Label()
170             , m_name( name ) {}
171 
name()172     QString name() const override { return m_name; }
173 
174     QString m_name;
175 };
176 
177 #endif // METAMOCK_H
178