Warning, file /frameworks/kfilemetadata/autotests/taglibwritertest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-FileCopyrightText: 2016 Varun Joshi <varunj.1011@gmail.com> 0003 SPDX-FileCopyrightText: 2018 Alexander Stippich <a.stippich@gmx.net> 0004 0005 SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 0008 #include "taglibwritertest.h" 0009 #include "indexerextractortestsconfig.h" 0010 #include "writers/taglibwriter.h" 0011 #include "writedata.h" 0012 #include <kfilemetadata/ExtractorCollection> 0013 #include <kfilemetadata/Extractor> 0014 #include <kfilemetadata/ExtractionResult> 0015 #include <kfilemetadata/SimpleExtractionResult> 0016 #include "taglib.h" 0017 #include "fileref.h" 0018 0019 #include <QTest> 0020 #include <QFile> 0021 #include <QMap> 0022 0023 using namespace KFileMetaData; 0024 0025 QString TagLibWriterTest::testFilePath(const QString& fileName) const 0026 { 0027 return QLatin1String(INDEXER_TESTS_SAMPLE_FILES_PATH) + QLatin1Char('/') + fileName; 0028 } 0029 0030 void TagLibWriterTest::initTestCase() 0031 { 0032 QFile imgFile(testFilePath("cover.jpg")); 0033 imgFile.open(QIODevice::ReadOnly); 0034 m_coverImage = imgFile.readAll(); 0035 } 0036 0037 void TagLibWriterTest::extractResult(const QString &mimeType, KFileMetaData::ExtractionResult &result) 0038 { 0039 KFileMetaData::ExtractorCollection extractors; 0040 QList<KFileMetaData::Extractor*> extractorList = extractors.fetchExtractors(mimeType); 0041 if (extractorList.isEmpty()) { 0042 QFAIL("This mime type is not supported by the extractor. Likely a newer KDE Frameworks version is required."); 0043 } 0044 if (extractorList.size() > 1) { 0045 QWARN("Multiple extractors are available."); 0046 } 0047 KFileMetaData::Extractor* ex = extractorList.first(); 0048 ex->extract(&result); 0049 } 0050 0051 void TagLibWriterTest::testCommonData() 0052 { 0053 QFETCH(QString, fileType); 0054 QFETCH(QString, mimeType); 0055 QFETCH(QString, stringSuffix); 0056 0057 QString temporaryFileName = testFilePath(QStringLiteral("writertest.") + fileType); 0058 0059 QFile::copy(testFilePath("test." + fileType), temporaryFileName); 0060 TagLibWriter writerPlugin{this}; 0061 QCOMPARE(writerPlugin.writeMimetypes().contains(mimeType),true); 0062 0063 WriteData data(temporaryFileName, mimeType); 0064 0065 data.add(Property::Title, QString(QStringLiteral("Title1") + stringSuffix)); 0066 data.add(Property::Artist, QString(QStringLiteral("Artist1") + stringSuffix)); 0067 data.add(Property::Album, QString(QStringLiteral("Album1") + stringSuffix)); 0068 data.add(Property::AlbumArtist, QString(QStringLiteral("AlbumArtist1") + stringSuffix)); 0069 data.add(Property::Composer, QString(QStringLiteral("Composer1") + stringSuffix)); 0070 data.add(Property::TrackNumber, 10); 0071 data.add(Property::DiscNumber, 2); 0072 data.add(Property::ReleaseYear, 1999); 0073 data.add(Property::Genre, QString(QStringLiteral("Genre1") + stringSuffix)); 0074 data.add(Property::Comment, QString(QStringLiteral("Comment1") + stringSuffix)); 0075 data.add(Property::Copyright, QString(QStringLiteral("Copyright1") + stringSuffix)); 0076 0077 writerPlugin.write(data); 0078 0079 KFileMetaData::SimpleExtractionResult result(temporaryFileName, mimeType, KFileMetaData::ExtractionResult::ExtractMetaData); 0080 extractResult(mimeType, result); 0081 0082 QCOMPARE(result.properties().value(Property::Title), QVariant(QStringLiteral("Title1") + stringSuffix)); 0083 QCOMPARE(result.properties().value(Property::Artist), QVariant(QStringLiteral("Artist1") + stringSuffix)); 0084 QCOMPARE(result.properties().value(Property::Album), QVariant(QStringLiteral("Album1") + stringSuffix)); 0085 QCOMPARE(result.properties().value(Property::AlbumArtist), QVariant(QStringLiteral("AlbumArtist1") + stringSuffix)); 0086 QCOMPARE(result.properties().value(Property::Composer), QVariant(QStringLiteral("Composer1") + stringSuffix)); 0087 QCOMPARE(result.properties().value(Property::TrackNumber).toInt(), 10); 0088 QCOMPARE(result.properties().value(Property::DiscNumber).toInt(), 2); 0089 QCOMPARE(result.properties().value(Property::ReleaseYear).toInt(), 1999); 0090 QCOMPARE(result.properties().value(Property::Genre), QVariant(QStringLiteral("Genre1") + stringSuffix)); 0091 QCOMPARE(result.properties().value(Property::Comment), QVariant(QStringLiteral("Comment1") + stringSuffix)); 0092 QCOMPARE(result.properties().value(Property::Copyright), QVariant(QStringLiteral("Copyright1") + stringSuffix)); 0093 0094 QFile::remove(temporaryFileName); 0095 } 0096 0097 void TagLibWriterTest::testCommonData_data() 0098 { 0099 // Add some unicode characters, use codepoints to avoid any issues with 0100 // source encoding: "€µ" 0101 static const QChar data[2] = { QChar(0x20ac), QChar(0xb5) }; 0102 QString unicodeTestStringSuffix(data, 2); 0103 0104 QTest::addColumn<QString>("fileType"); 0105 QTest::addColumn<QString>("mimeType"); 0106 QTest::addColumn<QString>("stringSuffix"); 0107 0108 0109 QTest::addRow("aiff") 0110 << QStringLiteral("aif") 0111 << QStringLiteral("audio/x-aiff") 0112 << QString() 0113 ; 0114 0115 QTest::addRow("aiff_unicode") 0116 << QStringLiteral("aif") 0117 << QStringLiteral("audio/x-aiff") 0118 << unicodeTestStringSuffix 0119 ; 0120 0121 QTest::addRow("ape") 0122 << QStringLiteral("ape") 0123 << QStringLiteral("audio/x-ape") 0124 << QString() 0125 ; 0126 0127 QTest::addRow("ape_unicode") 0128 << QStringLiteral("ape") 0129 << QStringLiteral("audio/x-ape") 0130 << unicodeTestStringSuffix 0131 ; 0132 0133 QTest::addRow("flac") 0134 << QStringLiteral("flac") 0135 << QStringLiteral("audio/flac") 0136 << QString() 0137 ; 0138 0139 QTest::addRow("flac_unicode") 0140 << QStringLiteral("flac") 0141 << QStringLiteral("audio/flac") 0142 << unicodeTestStringSuffix 0143 ; 0144 0145 QTest::addRow("m4a") 0146 << QStringLiteral("m4a") 0147 << QStringLiteral("audio/mp4") 0148 << QString() 0149 ; 0150 0151 QTest::addRow("m4a_unicode") 0152 << QStringLiteral("m4a") 0153 << QStringLiteral("audio/mp4") 0154 << unicodeTestStringSuffix 0155 ; 0156 0157 QTest::addRow("mp3") 0158 << QStringLiteral("mp3") 0159 << QStringLiteral("audio/mpeg3") 0160 << QString() 0161 ; 0162 0163 QTest::addRow("mp3_unicode") 0164 << QStringLiteral("mp3") 0165 << QStringLiteral("audio/mpeg3") 0166 << unicodeTestStringSuffix 0167 ; 0168 0169 QTest::addRow("mpc") 0170 << QStringLiteral("mpc") 0171 << QStringLiteral("audio/x-musepack") 0172 << QString() 0173 ; 0174 0175 QTest::addRow("mpc_unicode") 0176 << QStringLiteral("mpc") 0177 << QStringLiteral("audio/x-musepack") 0178 << unicodeTestStringSuffix 0179 ; 0180 0181 QTest::addRow("ogg") 0182 << QStringLiteral("ogg") 0183 << QStringLiteral("audio/ogg") 0184 << QString() 0185 ; 0186 0187 QTest::addRow("ogg_unicode") 0188 << QStringLiteral("ogg") 0189 << QStringLiteral("audio/ogg") 0190 << unicodeTestStringSuffix 0191 ; 0192 0193 QTest::addRow("opus") 0194 << QStringLiteral("opus") 0195 << QStringLiteral("audio/opus") 0196 << QString() 0197 ; 0198 0199 QTest::addRow("opus_unicode") 0200 << QStringLiteral("opus") 0201 << QStringLiteral("audio/opus") 0202 << unicodeTestStringSuffix 0203 ; 0204 0205 QTest::addRow("speex") 0206 << QStringLiteral("spx") 0207 << QStringLiteral("audio/x-speex+ogg") 0208 << QString() 0209 ; 0210 0211 QTest::addRow("speex_unicode") 0212 << QStringLiteral("spx") 0213 << QStringLiteral("audio/x-speex+ogg") 0214 << unicodeTestStringSuffix 0215 ; 0216 0217 QTest::addRow("wav") 0218 << QStringLiteral("wav") 0219 << QStringLiteral("audio/wav") 0220 << QString() 0221 ; 0222 0223 QTest::addRow("wav_unicode") 0224 << QStringLiteral("wav") 0225 << QStringLiteral("audio/wav") 0226 << unicodeTestStringSuffix 0227 ; 0228 0229 QTest::addRow("wavpack") 0230 << QStringLiteral("wv") 0231 << QStringLiteral("audio/x-wavpack") 0232 << QString() 0233 ; 0234 0235 QTest::addRow("wavpack_unicode") 0236 << QStringLiteral("wv") 0237 << QStringLiteral("audio/x-wavpack") 0238 << unicodeTestStringSuffix 0239 ; 0240 0241 QTest::addRow("wma") 0242 << QStringLiteral("wma") 0243 << QStringLiteral("audio/x-ms-wma") 0244 << QString() 0245 ; 0246 0247 QTest::addRow("wma_unicode") 0248 << QStringLiteral("wma") 0249 << QStringLiteral("audio/x-ms-wma") 0250 << unicodeTestStringSuffix 0251 ; 0252 } 0253 0254 void TagLibWriterTest::testExtendedData() 0255 { 0256 QFETCH(QString, fileType); 0257 QFETCH(QString, mimeType); 0258 0259 QString temporaryFileName = testFilePath(QStringLiteral("writertest.") + fileType); 0260 0261 QFile::copy(testFilePath("test." + fileType), temporaryFileName); 0262 TagLibWriter writerPlugin{this}; 0263 0264 WriteData data(temporaryFileName, mimeType); 0265 0266 data.add(Property::Composer, QStringLiteral("Composer1")); 0267 data.add(Property::Lyricist, QStringLiteral("Lyricist1")); 0268 data.add(Property::Conductor, QStringLiteral("Conductor1")); 0269 data.add(Property::Lyrics, QStringLiteral("Lyrics1")); 0270 data.add(Property::Language, QStringLiteral("Language1")); 0271 0272 writerPlugin.write(data); 0273 0274 KFileMetaData::SimpleExtractionResult result(temporaryFileName, mimeType, KFileMetaData::ExtractionResult::ExtractMetaData); 0275 extractResult(mimeType, result); 0276 0277 QCOMPARE(result.properties().value(Property::Composer), QVariant(QStringLiteral("Composer1"))); 0278 QCOMPARE(result.properties().value(Property::Lyricist), QVariant(QStringLiteral("Lyricist1"))); 0279 QCOMPARE(result.properties().value(Property::Conductor), QVariant(QStringLiteral("Conductor1"))); 0280 QCOMPARE(result.properties().value(Property::Lyrics), QVariant(QStringLiteral("Lyrics1"))); 0281 QCOMPARE(result.properties().value(Property::Language), QVariant(QStringLiteral("Language1"))); 0282 0283 QFile::remove(temporaryFileName); 0284 } 0285 0286 void TagLibWriterTest::testExtendedData_data() 0287 { 0288 QTest::addColumn<QString>("fileType"); 0289 QTest::addColumn<QString>("mimeType"); 0290 0291 QTest::addRow("aiff") 0292 << QStringLiteral("aif") 0293 << QStringLiteral("audio/x-aiff") 0294 ; 0295 0296 QTest::addRow("ape") 0297 << QStringLiteral("ape") 0298 << QStringLiteral("audio/x-ape") 0299 ; 0300 0301 QTest::addRow("flac") 0302 << QStringLiteral("flac") 0303 << QStringLiteral("audio/flac") 0304 ; 0305 0306 QTest::addRow("mp3") 0307 << QStringLiteral("mp3") 0308 << QStringLiteral("audio/mpeg3") 0309 ; 0310 0311 QTest::addRow("mpc") 0312 << QStringLiteral("mpc") 0313 << QStringLiteral("audio/x-musepack") 0314 ; 0315 0316 QTest::addRow("ogg") 0317 << QStringLiteral("ogg") 0318 << QStringLiteral("audio/ogg") 0319 ; 0320 0321 QTest::addRow("opus") 0322 << QStringLiteral("opus") 0323 << QStringLiteral("audio/opus") 0324 ; 0325 0326 QTest::addRow("speex") 0327 << QStringLiteral("spx") 0328 << QStringLiteral("audio/x-speex+ogg") 0329 ; 0330 0331 QTest::addRow("wav") 0332 << QStringLiteral("wav") 0333 << QStringLiteral("audio/wav") 0334 ; 0335 0336 QTest::addRow("wavpack") 0337 << QStringLiteral("wv") 0338 << QStringLiteral("audio/x-wavpack") 0339 ; 0340 } 0341 0342 void TagLibWriterTest::testRating() 0343 { 0344 QFETCH(QString, fileType); 0345 QFETCH(QString, mimeType); 0346 QFETCH(int, rating); 0347 0348 QString temporaryFileName = testFilePath(QStringLiteral("writertest.") + fileType); 0349 0350 QFile::copy(testFilePath("test.") + fileType, temporaryFileName); 0351 TagLibWriter writerPlugin{this}; 0352 QCOMPARE(writerPlugin.writeMimetypes().contains(mimeType),true); 0353 0354 WriteData data(temporaryFileName, mimeType); 0355 0356 data.add(Property::Rating, rating); 0357 writerPlugin.write(data); 0358 0359 KFileMetaData::SimpleExtractionResult result(temporaryFileName, mimeType, KFileMetaData::ExtractionResult::ExtractMetaData); 0360 extractResult(mimeType, result); 0361 0362 QCOMPARE(result.properties().value(Property::Rating).toInt(), rating); 0363 0364 QFile::remove(temporaryFileName); 0365 } 0366 0367 void TagLibWriterTest::testRating_data() 0368 { 0369 0370 QTest::addColumn<QString>("fileType"); 0371 QTest::addColumn<QString>("mimeType"); 0372 QTest::addColumn<int>("rating"); 0373 0374 QTest::addRow("aiff") 0375 << QStringLiteral("aif") 0376 << QStringLiteral("audio/x-aiff") 0377 << 3 0378 ; 0379 0380 QTest::addRow("ape") 0381 << QStringLiteral("ape") 0382 << QStringLiteral("audio/x-ape") 0383 << 1 0384 ; 0385 0386 QTest::addRow("flac") 0387 << QStringLiteral("flac") 0388 << QStringLiteral("audio/flac") 0389 << 3 0390 ; 0391 0392 QTest::addRow("m4a") 0393 << QStringLiteral("m4a") 0394 << QStringLiteral("audio/mp4") 0395 << 5 0396 ; 0397 0398 QTest::addRow("mp3_0") 0399 << QStringLiteral("mp3") 0400 << QStringLiteral("audio/mpeg3") 0401 << 0 0402 ; 0403 0404 QTest::addRow("mp3_1") 0405 << QStringLiteral("mp3") 0406 << QStringLiteral("audio/mpeg3") 0407 << 1 0408 ; 0409 0410 QTest::addRow("mp3_2") 0411 << QStringLiteral("mp3") 0412 << QStringLiteral("audio/mpeg3") 0413 << 2 0414 ; 0415 0416 QTest::addRow("mp3_3") 0417 << QStringLiteral("mp3") 0418 << QStringLiteral("audio/mpeg3") 0419 << 3 0420 ; 0421 0422 QTest::addRow("mp3_4") 0423 << QStringLiteral("mp3") 0424 << QStringLiteral("audio/mpeg3") 0425 << 4 0426 ; 0427 0428 QTest::addRow("mp3_5") 0429 << QStringLiteral("mp3") 0430 << QStringLiteral("audio/mpeg3") 0431 << 5 0432 ; 0433 0434 QTest::addRow("mp3_6") 0435 << QStringLiteral("mp3") 0436 << QStringLiteral("audio/mpeg3") 0437 << 6 0438 ; 0439 0440 QTest::addRow("mp3_7") 0441 << QStringLiteral("mp3") 0442 << QStringLiteral("audio/mpeg3") 0443 << 7 0444 ; 0445 0446 QTest::addRow("mp3_8") 0447 << QStringLiteral("mp3") 0448 << QStringLiteral("audio/mpeg3") 0449 << 8 0450 ; 0451 0452 QTest::addRow("mp3_9") 0453 << QStringLiteral("mp3") 0454 << QStringLiteral("audio/mpeg3") 0455 << 9 0456 ; 0457 0458 QTest::addRow("mp3_10") 0459 << QStringLiteral("mp3") 0460 << QStringLiteral("audio/mpeg3") 0461 << 10 0462 ; 0463 0464 QTest::addRow("mpc") 0465 << QStringLiteral("mpc") 0466 << QStringLiteral("audio/x-musepack") 0467 << 7 0468 ; 0469 0470 QTest::addRow("opus") 0471 << QStringLiteral("opus") 0472 << QStringLiteral("audio/opus") 0473 << 6 0474 ; 0475 0476 QTest::addRow("speex") 0477 << QStringLiteral("spx") 0478 << QStringLiteral("audio/x-speex+ogg") 0479 << 8 0480 ; 0481 0482 QTest::addRow("wav") 0483 << QStringLiteral("wav") 0484 << QStringLiteral("audio/wav") 0485 << 4 0486 ; 0487 0488 QTest::addRow("wavpack") 0489 << QStringLiteral("wv") 0490 << QStringLiteral("audio/x-wavpack") 0491 << 9 0492 ; 0493 0494 QTest::addRow("wma_0") 0495 << QStringLiteral("wma") 0496 << QStringLiteral("audio/x-ms-wma") 0497 << 0 0498 ; 0499 0500 QTest::addRow("wma_2") 0501 << QStringLiteral("wma") 0502 << QStringLiteral("audio/x-ms-wma") 0503 << 2 0504 ; 0505 0506 QTest::addRow("wma_4") 0507 << QStringLiteral("wma") 0508 << QStringLiteral("audio/x-ms-wma") 0509 << 4 0510 ; 0511 0512 QTest::addRow("wma_5") 0513 << QStringLiteral("wma") 0514 << QStringLiteral("audio/x-ms-wma") 0515 << 5 0516 ; 0517 0518 QTest::addRow("wma_6") 0519 << QStringLiteral("wma") 0520 << QStringLiteral("audio/x-ms-wma") 0521 << 6 0522 ; 0523 0524 QTest::addRow("wma_8") 0525 << QStringLiteral("wma") 0526 << QStringLiteral("audio/x-ms-wma") 0527 << 8 0528 ; 0529 0530 QTest::addRow("wma_10") 0531 << QStringLiteral("wma") 0532 << QStringLiteral("audio/x-ms-wma") 0533 << 10 0534 ; 0535 } 0536 0537 void TagLibWriterTest::testComplexContactData() 0538 { 0539 QFETCH(QString, fileExtension); 0540 QFETCH(QString, mimeType); 0541 0542 QString temporaryFileName = testFilePath(QStringLiteral("writertest.") + fileExtension); 0543 0544 QFile::copy(testFilePath("test." + fileExtension), temporaryFileName); 0545 TagLibWriter writerPlugin{this}; 0546 0547 WriteData data(temporaryFileName, mimeType); 0548 0549 const QMap<Property::Property, QString> properties = { 0550 { Property::Artist, QStringLiteral("Artist1 feat Artist2") }, 0551 { Property::AlbumArtist, QStringLiteral("Artist1 feat. Artist2") }, 0552 { Property::Composer, QStringLiteral("Composer1; Composer2") }, 0553 { Property::Lyricist, QStringLiteral("Lyricist1 ft Lyricist2") }, 0554 { Property::Genre, QStringLiteral("Genre1; Genre2") }, 0555 }; 0556 0557 QMap<Property::Property, QString>::const_iterator it; 0558 for (it = properties.begin(); it != properties.end(); ++it) { 0559 data.add(it.key(), it.value()); 0560 } 0561 0562 writerPlugin.write(data); 0563 0564 KFileMetaData::SimpleExtractionResult result(temporaryFileName, mimeType, KFileMetaData::ExtractionResult::ExtractMetaData); 0565 extractResult(mimeType, result); 0566 0567 for (it = properties.begin(); it != properties.end(); ++it) { 0568 QCOMPARE(result.properties().value(it.key()), it.value()); 0569 } 0570 0571 QFile::remove(temporaryFileName); 0572 } 0573 0574 void TagLibWriterTest::testComplexContactData_data() 0575 { 0576 QTest::addColumn<QString>("fileExtension"); 0577 QTest::addColumn<QString>("mimeType"); 0578 0579 QTest::addRow("aiff") 0580 << QStringLiteral("aif") 0581 << QStringLiteral("audio/x-aiff") 0582 ; 0583 0584 QTest::addRow("ape") 0585 << QStringLiteral("ape") 0586 << QStringLiteral("audio/x-ape") 0587 ; 0588 0589 QTest::addRow("flac") 0590 << QStringLiteral("flac") 0591 << QStringLiteral("audio/flac") 0592 ; 0593 0594 QTest::addRow("mp3") 0595 << QStringLiteral("mp3") 0596 << QStringLiteral("audio/mpeg3") 0597 ; 0598 0599 QTest::addRow("mpc") 0600 << QStringLiteral("mpc") 0601 << QStringLiteral("audio/x-musepack") 0602 ; 0603 0604 QTest::addRow("ogg") 0605 << QStringLiteral("ogg") 0606 << QStringLiteral("audio/ogg") 0607 ; 0608 0609 QTest::addRow("opus") 0610 << QStringLiteral("opus") 0611 << QStringLiteral("audio/opus") 0612 ; 0613 0614 QTest::addRow("speex") 0615 << QStringLiteral("spx") 0616 << QStringLiteral("audio/x-speex+ogg") 0617 ; 0618 0619 QTest::addRow("wav") 0620 << QStringLiteral("wav") 0621 << QStringLiteral("audio/wav") 0622 ; 0623 0624 QTest::addRow("wavpack") 0625 << QStringLiteral("wv") 0626 << QStringLiteral("audio/x-wavpack") 0627 ; 0628 } 0629 0630 void TagLibWriterTest::testImageWrite() 0631 { 0632 QFETCH(QString, fileName); 0633 QFETCH(QString, mimeType); 0634 0635 QString testFileName = testFilePath(QStringLiteral("writer") + fileName); 0636 0637 QFile::copy(testFilePath(fileName), testFileName); 0638 WriteData data(testFileName, mimeType); 0639 0640 QMap<EmbeddedImageData::ImageType, QByteArray> writeImages; 0641 writeImages.insert(EmbeddedImageData::ImageType::FrontCover, m_coverImage); 0642 data.addImageData(writeImages); 0643 0644 TagLibWriter writerPlugin{this}; 0645 writerPlugin.write(data); 0646 0647 SimpleExtractionResult result(testFileName, mimeType, ExtractionResult::ExtractImageData); 0648 extractResult(mimeType, result); 0649 0650 QCOMPARE(result.imageData().value(EmbeddedImageData::FrontCover), writeImages.value(EmbeddedImageData::FrontCover)); 0651 0652 QFile::remove(testFileName); 0653 } 0654 0655 void TagLibWriterTest::testImageWrite_data() 0656 { 0657 QTest::addColumn<QString>("fileName"); 0658 QTest::addColumn<QString>("mimeType"); 0659 0660 QTest::addRow("aiff") 0661 << QStringLiteral("test.aif") 0662 << QStringLiteral("audio/x-aiff") 0663 ; 0664 0665 QTest::addRow("ape") 0666 << QStringLiteral("test.ape") 0667 << QStringLiteral("audio/x-ape") 0668 ; 0669 0670 QTest::addRow("opus") 0671 << QStringLiteral("test.opus") 0672 << QStringLiteral("audio/opus") 0673 ; 0674 0675 QTest::addRow("ogg") 0676 << QStringLiteral("test.ogg") 0677 << QStringLiteral("audio/ogg") 0678 ; 0679 0680 QTest::addRow("flac") 0681 << QStringLiteral("test.flac") 0682 << QStringLiteral("audio/flac") 0683 ; 0684 0685 QTest::addRow("mp3") 0686 << QStringLiteral("test.mp3") 0687 << QStringLiteral("audio/mpeg3") 0688 ; 0689 0690 QTest::addRow("m4a") 0691 << QStringLiteral("test.m4a") 0692 << QStringLiteral("audio/mp4") 0693 ; 0694 0695 QTest::addRow("mpc") 0696 << QStringLiteral("test.mpc") 0697 << QStringLiteral("audio/x-musepack") 0698 ; 0699 0700 QTest::addRow("speex") 0701 << QStringLiteral("test.spx") 0702 << QStringLiteral("audio/x-speex+ogg") 0703 ; 0704 0705 QTest::addRow("wav") 0706 << QStringLiteral("test.wav") 0707 << QStringLiteral("audio/wav") 0708 ; 0709 0710 QTest::addRow("wavpack") 0711 << QStringLiteral("test.wv") 0712 << QStringLiteral("audio/x-wavpack") 0713 ; 0714 0715 QTest::addRow("wma") 0716 << QStringLiteral("test.wma") 0717 << QStringLiteral("audio/x-ms-wma") 0718 ; 0719 } 0720 0721 void TagLibWriterTest::testImageDelete() 0722 { 0723 QFETCH(QString, fileName); 0724 QFETCH(QString, mimeType); 0725 0726 QString testFileName = testFilePath(QStringLiteral("writer") + fileName); 0727 0728 QFile::copy(testFilePath(fileName), testFileName); 0729 WriteData data(testFileName, mimeType); 0730 0731 QMap<EmbeddedImageData::ImageType, QByteArray> writeImages; 0732 writeImages.insert(EmbeddedImageData::ImageType::FrontCover, QByteArray()); 0733 data.addImageData(writeImages); 0734 0735 TagLibWriter writerPlugin{this}; 0736 writerPlugin.write(data); 0737 0738 SimpleExtractionResult result(testFileName, mimeType, ExtractionResult::ExtractImageData); 0739 extractResult(mimeType, result); 0740 0741 QVERIFY(!result.imageData().contains(EmbeddedImageData::FrontCover)); 0742 0743 QFile::remove(testFileName); 0744 } 0745 0746 void TagLibWriterTest::testImageDelete_data() 0747 { 0748 testImageWrite_data(); 0749 } 0750 0751 void TagLibWriterTest::testImageDeleteInsert() 0752 { 0753 QFETCH(QString, fileName); 0754 QFETCH(QString, mimeType); 0755 0756 QString testFileName = testFilePath(QStringLiteral("writer_delinsert_") + fileName); 0757 0758 QFile::copy(testFilePath(fileName), testFileName); 0759 WriteData data(testFileName, mimeType); 0760 0761 QFile imgFile(testFilePath("test.jpg")); 0762 imgFile.open(QIODevice::ReadOnly); 0763 0764 QMap<EmbeddedImageData::ImageType, QByteArray> delImages; 0765 QMap<EmbeddedImageData::ImageType, QByteArray> writeImages; 0766 QMap<EmbeddedImageData::ImageType, QByteArray> readImages; 0767 0768 delImages.insert(EmbeddedImageData::ImageType::FrontCover, QByteArray()); 0769 writeImages.insert(EmbeddedImageData::ImageType::FrontCover, m_coverImage); 0770 data.addImageData(delImages); 0771 0772 TagLibWriter writerPlugin{this}; 0773 writerPlugin.write(data); 0774 0775 SimpleExtractionResult result(testFileName, mimeType, ExtractionResult::ExtractImageData); 0776 extractResult(mimeType, result); 0777 0778 QVERIFY(!result.imageData().contains(EmbeddedImageData::FrontCover)); 0779 0780 data.addImageData(writeImages); 0781 writerPlugin.write(data); 0782 extractResult(mimeType, result); 0783 0784 QCOMPARE(result.imageData().value(EmbeddedImageData::FrontCover), writeImages.value(EmbeddedImageData::FrontCover)); 0785 0786 QFile::remove(testFileName); 0787 } 0788 0789 void TagLibWriterTest::testImageDeleteInsert_data() 0790 { 0791 testImageWrite_data(); 0792 } 0793 0794 void TagLibWriterTest::testMultiImage() 0795 { 0796 QFETCH(QString, fileName); 0797 QFETCH(QString, mimeType); 0798 QFETCH(EmbeddedImageData::ImageTypes, imageTypes); 0799 0800 QString testFileName = testFilePath(QStringLiteral("writer_multiimage_") + fileName); 0801 0802 QFile::copy(testFilePath(fileName), testFileName); 0803 0804 QMap<EmbeddedImageData::ImageType, QByteArray> writeImages; 0805 0806 SimpleExtractionResult result(testFileName, mimeType, ExtractionResult::ExtractImageData); 0807 extractResult(mimeType, result); 0808 QVERIFY(result.imageData().contains(EmbeddedImageData::FrontCover)); 0809 0810 using Image = EmbeddedImageData::ImageType; 0811 for (auto type : { Image::Other, Image::BackCover }) { 0812 if (type & imageTypes) { 0813 writeImages.insert(type, m_coverImage); 0814 } 0815 } 0816 WriteData data(testFileName, mimeType); 0817 data.addImageData(writeImages); 0818 TagLibWriter writerPlugin{this}; 0819 writerPlugin.write(data); 0820 0821 extractResult(mimeType, result); 0822 // Test if FrontCover still exists 0823 QVERIFY(result.imageData().contains(EmbeddedImageData::FrontCover)); 0824 0825 for (auto type : { Image::FrontCover, Image::Other, Image::BackCover }) { 0826 if (type & imageTypes) { 0827 QVERIFY2(result.imageData().contains(type), qPrintable(QString("has imagetype %1").arg(type))); 0828 QCOMPARE(result.imageData().value(type), m_coverImage); 0829 } 0830 } 0831 0832 QFile::remove(testFileName); 0833 } 0834 0835 void TagLibWriterTest::testMultiImage_data() 0836 { 0837 using ImageTypes = EmbeddedImageData::ImageTypes; 0838 QTest::addColumn<QString>("fileName"); 0839 QTest::addColumn<QString>("mimeType"); 0840 QTest::addColumn<ImageTypes>("imageTypes"); 0841 0842 using Image = EmbeddedImageData::ImageType; 0843 QTest::addRow("aiff") << QStringLiteral("test.aif") << QStringLiteral("audio/x-aiff") << ImageTypes{ Image::Other, Image::Artist }; 0844 QTest::addRow("opus") << QStringLiteral("test.opus") << QStringLiteral("audio/opus") << ImageTypes{ Image::Other, Image::BackCover }; 0845 QTest::addRow("flac") << QStringLiteral("test.flac") << QStringLiteral("audio/flac") << ImageTypes{ Image::Other, Image::Composer }; 0846 QTest::addRow("wma") << QStringLiteral("test.wma") << QStringLiteral("audio/x-ms-wma") << ImageTypes{ Image::Other, Image::Band }; 0847 } 0848 0849 QTEST_GUILESS_MAIN(TagLibWriterTest) 0850 0851 #include "moc_taglibwritertest.cpp"