1 #include <gtest/gtest.h>
2
3 #include "track/trackrecord.h"
4
5 class TrackMetadataTest : public testing::Test {
6 };
7
TEST_F(TrackMetadataTest,parseArtistTitleFromFileName)8 TEST_F(TrackMetadataTest, parseArtistTitleFromFileName) {
9 {
10 mixxx::TrackInfo trackInfo;
11 trackInfo.parseArtistTitleFromFileName(" only - title ", false);
12 EXPECT_EQ(QString(), trackInfo.getArtist());
13 EXPECT_EQ("only - title", trackInfo.getTitle());
14 }
15 {
16 mixxx::TrackInfo trackInfo;
17 trackInfo.parseArtistTitleFromFileName(" only-title ", true);
18 EXPECT_EQ(QString(), trackInfo.getArtist());
19 EXPECT_EQ("only-title", trackInfo.getTitle());
20 }
21 {
22 mixxx::TrackInfo trackInfo;
23 trackInfo.parseArtistTitleFromFileName(" only -_title ", true);
24 EXPECT_EQ(QString(), trackInfo.getArtist());
25 EXPECT_EQ("only -_title", trackInfo.getTitle());
26 }
27 {
28 mixxx::TrackInfo trackInfo;
29 trackInfo.parseArtistTitleFromFileName(" only - title ", false);
30 EXPECT_EQ(QString(), trackInfo.getArtist());
31 EXPECT_EQ("only - title", trackInfo.getTitle());
32 }
33 {
34 mixxx::TrackInfo trackInfo;
35 trackInfo.parseArtistTitleFromFileName(" artist - title ", true);
36 EXPECT_EQ("artist", trackInfo.getArtist());
37 EXPECT_EQ("title", trackInfo.getTitle());
38 }
39 {
40 mixxx::TrackInfo trackInfo;
41 trackInfo.parseArtistTitleFromFileName(" only -\ttitle\t", true);
42 EXPECT_EQ(QString(), trackInfo.getArtist());
43 EXPECT_EQ("only -\ttitle", trackInfo.getTitle());
44 }
45 {
46 mixxx::TrackInfo trackInfo;
47 trackInfo.parseArtistTitleFromFileName(" - artist__-__title - ", true);
48 EXPECT_EQ("- artist_", trackInfo.getArtist());
49 EXPECT_EQ("_title -", trackInfo.getTitle());
50 }
51 {
52 mixxx::TrackInfo trackInfo;
53 trackInfo.parseArtistTitleFromFileName(" - only__-__title_-_", true);
54 EXPECT_EQ(QString(), trackInfo.getArtist());
55 EXPECT_EQ("- only__-__title_-_", trackInfo.getTitle());
56 }
57 {
58 mixxx::TrackInfo trackInfo;
59 trackInfo.parseArtistTitleFromFileName(" again - only_-_title _ ", true);
60 EXPECT_EQ(QString(), trackInfo.getArtist());
61 EXPECT_EQ("again - only_-_title _", trackInfo.getTitle());
62 }
63 }
64
TEST_F(TrackMetadataTest,mergeImportedMetadata)65 TEST_F(TrackMetadataTest, mergeImportedMetadata) {
66 // Existing track metadata (stored in the database) without extra properties
67 mixxx::TrackRecord oldTrackRecord;
68 mixxx::TrackMetadata* pOldTrackMetadata = oldTrackRecord.ptrMetadata();
69 pOldTrackMetadata->setStreamInfo(
70 mixxx::audio::StreamInfo{
71 mixxx::audio::SignalInfo{
72 mixxx::audio::ChannelCount(1),
73 mixxx::audio::SampleRate(10000),
74 },
75 mixxx::audio::Bitrate(100),
76 mixxx::Duration::fromSeconds(60),
77 });
78 mixxx::TrackInfo* pOldTrackInfo = pOldTrackMetadata->ptrTrackInfo();
79 pOldTrackInfo->setArtist("old artist");
80 pOldTrackInfo->setBpm(mixxx::Bpm(100));
81 pOldTrackInfo->setComment("old comment");
82 pOldTrackInfo->setComposer("old composer");
83 pOldTrackInfo->setGenre("old genre");
84 pOldTrackInfo->setGrouping("old grouping");
85 pOldTrackInfo->setKey("1A");
86 pOldTrackInfo->setReplayGain(mixxx::ReplayGain(0.1, 1));
87 pOldTrackInfo->setTitle("old title");
88 pOldTrackInfo->setTrackNumber("1");
89 pOldTrackInfo->setTrackTotal("10");
90 pOldTrackInfo->setYear("2001-01-01");
91 mixxx::AlbumInfo* pOldAlbumInfo = pOldTrackMetadata->ptrAlbumInfo();
92 pOldAlbumInfo->setArtist("old album artist");
93 pOldAlbumInfo->setTitle("old album title");
94
95 // Imported track metadata (from file tags) with extra properties
96 mixxx::TrackMetadata newTrackMetadata;
97 newTrackMetadata.setStreamInfo(
98 mixxx::audio::StreamInfo{
99 mixxx::audio::SignalInfo{
100 mixxx::audio::ChannelCount(2),
101 mixxx::audio::SampleRate(20000),
102 },
103 mixxx::audio::Bitrate(200),
104 mixxx::Duration::fromSeconds(120),
105 });
106 mixxx::TrackInfo* pNewTrackInfo = newTrackMetadata.ptrTrackInfo();
107 pNewTrackInfo->setArtist("new artist");
108 pNewTrackInfo->setBpm(mixxx::Bpm(200));
109 pNewTrackInfo->setComment("new comment");
110 pNewTrackInfo->setComposer("new composer");
111 #if defined(__EXTRA_METADATA__)
112 pNewTrackInfo->setConductor("new conductor");
113 pNewTrackInfo->setDiscNumber("1");
114 pNewTrackInfo->setDiscTotal("2");
115 pNewTrackInfo->setEncoder("encoder");
116 pNewTrackInfo->setEncoderSettings("encoder settings");
117 #endif // __EXTRA_METADATA__
118 pNewTrackInfo->setGenre("new genre");
119 pNewTrackInfo->setGrouping("new grouping");
120 #if defined(__EXTRA_METADATA__)
121 pNewTrackInfo->setISRC("isrc");
122 #endif // __EXTRA_METADATA__
123 pNewTrackInfo->setKey("1A");
124 #if defined(__EXTRA_METADATA__)
125 pNewTrackInfo->setLanguage("language");
126 pNewTrackInfo->setLyricist("lyricist");
127 pNewTrackInfo->setMood("mood");
128 pNewTrackInfo->setMovement("movement");
129 pNewTrackInfo->setMusicBrainzArtistId(QUuid("11111111-1111-1111-1111-111111111111"));
130 pNewTrackInfo->setMusicBrainzRecordingId(QUuid("22222222-2222-2222-2222-222222222222"));
131 pNewTrackInfo->setMusicBrainzReleaseId(QUuid("33333333-3333-3333-3333-333333333333"));
132 pNewTrackInfo->setMusicBrainzWorkId(QUuid("44444444-4444-4444-4444-444444444444"));
133 pNewTrackInfo->setRemixer("remixer");
134 #endif // __EXTRA_METADATA__
135 pNewTrackInfo->setReplayGain(mixxx::ReplayGain(0.2, 2));
136 pNewTrackInfo->setTitle("new title");
137 pNewTrackInfo->setTrackNumber("2");
138 pNewTrackInfo->setTrackTotal("20");
139 #if defined(__EXTRA_METADATA__)
140 pNewTrackInfo->setWork("work");
141 #endif // __EXTRA_METADATA__
142 pNewTrackInfo->setYear("2002-02-02");
143 mixxx::AlbumInfo* pNewAlbumInfo = newTrackMetadata.ptrAlbumInfo();
144 pNewAlbumInfo->setArtist("new album artist");
145 #if defined(__EXTRA_METADATA__)
146 pNewAlbumInfo->setCopyright("copyright");
147 pNewAlbumInfo->setLicense("license");
148 pNewAlbumInfo->setMusicBrainzArtistId(QUuid("55555555-5555-5555-5555-555555555555"));
149 pNewAlbumInfo->setMusicBrainzReleaseGroupId(QUuid("66666666-6666-6666-6666-666666666666"));
150 pNewAlbumInfo->setMusicBrainzReleaseId(QUuid("77777777-7777-7777-7777-777777777777"));
151 pNewAlbumInfo->setRecordLabel("copyright");
152 pNewAlbumInfo->setReplayGain(mixxx::ReplayGain(0.3, 3));
153 #endif // __EXTRA_METADATA__
154 pNewAlbumInfo->setTitle("new album title");
155
156 mixxx::TrackRecord mergedTrackRecord = oldTrackRecord;
157 ASSERT_EQ(mergedTrackRecord.getMetadata(), oldTrackRecord.getMetadata());
158 ASSERT_NE(newTrackMetadata, *pOldTrackMetadata);
159 mergedTrackRecord.mergeImportedMetadata(newTrackMetadata);
160
161 mixxx::TrackMetadata* pMergedTrackMetadata = mergedTrackRecord.ptrMetadata();
162 EXPECT_EQ(pOldTrackMetadata->getStreamInfo(), pMergedTrackMetadata->getStreamInfo());
163 mixxx::TrackInfo* pMergedTrackInfo = pMergedTrackMetadata->ptrTrackInfo();
164 EXPECT_EQ(pOldTrackInfo->getArtist(), pMergedTrackInfo->getArtist());
165 EXPECT_EQ(pOldTrackInfo->getBpm(), pMergedTrackInfo->getBpm());
166 EXPECT_EQ(pOldTrackInfo->getComment(), pMergedTrackInfo->getComment());
167 EXPECT_EQ(pOldTrackInfo->getComposer(), pMergedTrackInfo->getComposer());
168 #if defined(__EXTRA_METADATA__)
169 EXPECT_EQ(pNewTrackInfo->getConductor(), pMergedTrackInfo->getConductor());
170 EXPECT_EQ(pNewTrackInfo->getDiscNumber(), pMergedTrackInfo->getDiscNumber());
171 EXPECT_EQ(pNewTrackInfo->getDiscTotal(), pMergedTrackInfo->getDiscTotal());
172 EXPECT_EQ(pNewTrackInfo->getEncoder(), pMergedTrackInfo->getEncoder());
173 EXPECT_EQ(pNewTrackInfo->getEncoderSettings(), pMergedTrackInfo->getEncoderSettings());
174 #endif // __EXTRA_METADATA__
175 EXPECT_EQ(pOldTrackInfo->getGenre(), pMergedTrackInfo->getGenre());
176 EXPECT_EQ(pOldTrackInfo->getGrouping(), pMergedTrackInfo->getGrouping());
177 #if defined(__EXTRA_METADATA__)
178 EXPECT_EQ(pNewTrackInfo->getISRC(), pMergedTrackInfo->getISRC());
179 #endif // __EXTRA_METADATA__
180 EXPECT_EQ(pOldTrackInfo->getKey(), pMergedTrackInfo->getKey());
181 #if defined(__EXTRA_METADATA__)
182 EXPECT_EQ(pNewTrackInfo->getLanguage(), pMergedTrackInfo->getLanguage());
183 EXPECT_EQ(pNewTrackInfo->getLyricist(), pMergedTrackInfo->getLyricist());
184 EXPECT_EQ(pNewTrackInfo->getMood(), pMergedTrackInfo->getMood());
185 EXPECT_EQ(pNewTrackInfo->getMovement(), pMergedTrackInfo->getMovement());
186 EXPECT_EQ(pNewTrackInfo->getMusicBrainzArtistId(), pMergedTrackInfo->getMusicBrainzArtistId());
187 EXPECT_EQ(pNewTrackInfo->getMusicBrainzRecordingId(),
188 pMergedTrackInfo->getMusicBrainzRecordingId());
189 EXPECT_EQ(pNewTrackInfo->getMusicBrainzReleaseId(),
190 pMergedTrackInfo->getMusicBrainzReleaseId());
191 EXPECT_EQ(pNewTrackInfo->getMusicBrainzWorkId(),
192 pMergedTrackInfo->getMusicBrainzWorkId());
193 EXPECT_EQ(pNewTrackInfo->getRemixer(), pMergedTrackInfo->getRemixer());
194 #endif // __EXTRA_METADATA__
195 EXPECT_EQ(
196 pOldTrackInfo->getReplayGain(), pMergedTrackInfo->getReplayGain());
197 EXPECT_EQ(pOldTrackInfo->getTitle(), pMergedTrackInfo->getTitle());
198 EXPECT_EQ(pOldTrackInfo->getTrackNumber(),
199 pMergedTrackInfo->getTrackNumber());
200 EXPECT_EQ(
201 pOldTrackInfo->getTrackTotal(), pMergedTrackInfo->getTrackTotal());
202 #if defined(__EXTRA_METADATA__)
203 EXPECT_EQ(pNewTrackInfo->getWork(), pMergedTrackInfo->getWork());
204 #endif // __EXTRA_METADATA__
205 EXPECT_EQ(pOldTrackInfo->getYear(), pMergedTrackInfo->getYear());
206 mixxx::AlbumInfo* pMergedAlbumInfo =
207 pMergedTrackMetadata->ptrAlbumInfo();
208 EXPECT_EQ(pOldAlbumInfo->getArtist(), pMergedAlbumInfo->getArtist());
209 #if defined(__EXTRA_METADATA__)
210 EXPECT_EQ(pNewAlbumInfo->getCopyright(), pMergedAlbumInfo->getCopyright());
211 EXPECT_EQ(pNewAlbumInfo->getLicense(), pMergedAlbumInfo->getLicense());
212 EXPECT_EQ(pNewAlbumInfo->getMusicBrainzArtistId(),
213 pMergedAlbumInfo->getMusicBrainzArtistId());
214 EXPECT_EQ(pNewAlbumInfo->getMusicBrainzReleaseGroupId(),
215 pMergedAlbumInfo->getMusicBrainzReleaseGroupId());
216 EXPECT_EQ(pNewAlbumInfo->getMusicBrainzReleaseId(),
217 pMergedAlbumInfo->getMusicBrainzReleaseId());
218 EXPECT_EQ(pNewAlbumInfo->getRecordLabel(), pMergedAlbumInfo->getRecordLabel());
219 EXPECT_EQ(pNewAlbumInfo->getReplayGain(), pMergedAlbumInfo->getReplayGain());
220 #endif // __EXTRA_METADATA__
221 EXPECT_EQ(pOldAlbumInfo->getTitle(), pMergedAlbumInfo->getTitle());
222
223 // Check that all existing properties are preserved, even if empty or missing
224 pMergedTrackInfo->setArtist("");
225 pMergedTrackInfo->setTitle(QString());
226 pMergedAlbumInfo->setArtist("");
227 pMergedAlbumInfo->setTitle(QString());
228 mergedTrackRecord.mergeImportedMetadata(newTrackMetadata);
229 EXPECT_EQ(QString(""), pMergedTrackInfo->getArtist());
230 EXPECT_EQ(QString(), pMergedTrackInfo->getTitle());
231 EXPECT_EQ(QString(""), pMergedAlbumInfo->getArtist());
232 EXPECT_EQ(QString(), pMergedAlbumInfo->getTitle());
233
234 // Check that the placeholder for track total is replaced with the actual property
235 ASSERT_NE(mixxx::TrackRecord::kTrackTotalPlaceholder, pNewTrackInfo->getTrackTotal());
236 pMergedTrackInfo->setTrackTotal(mixxx::TrackRecord::kTrackTotalPlaceholder);
237 mergedTrackRecord.mergeImportedMetadata(newTrackMetadata);
238 EXPECT_EQ(pNewTrackInfo->getTrackTotal(), pMergedTrackInfo->getTrackTotal());
239 // ...but if track total is missing entirely it should be preserved
240 ASSERT_NE(QString(), pNewTrackInfo->getTrackTotal());
241 pMergedTrackInfo->setTrackTotal(QString());
242 mergedTrackRecord.mergeImportedMetadata(newTrackMetadata);
243 EXPECT_EQ(QString(), pMergedTrackInfo->getTrackTotal());
244 }
245