diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 122711698..613d4681f 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -90,7 +90,7 @@ add_test_file(src/concurrentrun_test.cpp false)
add_test_file(src/closure_test.cpp false)
add_test_file(src/mergedproxymodel_test.cpp false)
add_test_file(src/sqlite_test.cpp false)
-add_test_file(src/song_test.cpp false)
+add_test_file(src/tagreader_test.cpp false)
add_test_file(src/collectionbackend_test.cpp false)
add_test_file(src/collectionmodel_test.cpp true)
add_test_file(src/songplaylistitem_test.cpp false)
diff --git a/tests/data/audio/strawberry.aif b/tests/data/audio/strawberry.aif
index 9ea29815e..edf19009b 100644
Binary files a/tests/data/audio/strawberry.aif and b/tests/data/audio/strawberry.aif differ
diff --git a/tests/data/audio/strawberry.asf b/tests/data/audio/strawberry.asf
index 588df30a9..e18bd0968 100644
Binary files a/tests/data/audio/strawberry.asf and b/tests/data/audio/strawberry.asf differ
diff --git a/tests/data/audio/strawberry.flac b/tests/data/audio/strawberry.flac
index 571e1da1b..307458f37 100644
Binary files a/tests/data/audio/strawberry.flac and b/tests/data/audio/strawberry.flac differ
diff --git a/tests/data/audio/strawberry.m4a b/tests/data/audio/strawberry.m4a
index 9af19c85a..ef89aec6a 100644
Binary files a/tests/data/audio/strawberry.m4a and b/tests/data/audio/strawberry.m4a differ
diff --git a/tests/data/audio/strawberry.mp3 b/tests/data/audio/strawberry.mp3
index 1eb6c3b62..b36755e55 100644
Binary files a/tests/data/audio/strawberry.mp3 and b/tests/data/audio/strawberry.mp3 differ
diff --git a/tests/data/audio/strawberry.mp4 b/tests/data/audio/strawberry.mp4
index 76cf9514d..3693f245c 100644
Binary files a/tests/data/audio/strawberry.mp4 and b/tests/data/audio/strawberry.mp4 differ
diff --git a/tests/data/audio/strawberry.oga b/tests/data/audio/strawberry.oga
index 539e1665d..fa4203170 100644
Binary files a/tests/data/audio/strawberry.oga and b/tests/data/audio/strawberry.oga differ
diff --git a/tests/data/audio/strawberry.ogg b/tests/data/audio/strawberry.ogg
index 011f78cdd..7b86e53e6 100644
Binary files a/tests/data/audio/strawberry.ogg and b/tests/data/audio/strawberry.ogg differ
diff --git a/tests/data/audio/strawberry.opus b/tests/data/audio/strawberry.opus
index 62cb11d88..24f81bb36 100644
Binary files a/tests/data/audio/strawberry.opus and b/tests/data/audio/strawberry.opus differ
diff --git a/tests/data/audio/strawberry.spx b/tests/data/audio/strawberry.spx
index 19096cc59..ba6b3714e 100644
Binary files a/tests/data/audio/strawberry.spx and b/tests/data/audio/strawberry.spx differ
diff --git a/tests/data/audio/strawberry.wav b/tests/data/audio/strawberry.wav
index afe820594..c7ef66805 100644
Binary files a/tests/data/audio/strawberry.wav and b/tests/data/audio/strawberry.wav differ
diff --git a/tests/data/audio/strawberry.wv b/tests/data/audio/strawberry.wv
index 872f79131..6a17b0e61 100644
Binary files a/tests/data/audio/strawberry.wv and b/tests/data/audio/strawberry.wv differ
diff --git a/tests/data/testdata.qrc b/tests/data/testdata.qrc
index bce4ae1f2..6f09a8699 100644
--- a/tests/data/testdata.qrc
+++ b/tests/data/testdata.qrc
@@ -4,6 +4,7 @@
audio/strawberry.flac
audio/strawberry.wv
audio/strawberry.oga
+ audio/strawberry.ogg
audio/strawberry.opus
audio/strawberry.spx
audio/strawberry.aif
diff --git a/tests/src/song_test.cpp b/tests/src/song_test.cpp
deleted file mode 100644
index 579e70348..000000000
--- a/tests/src/song_test.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Strawberry Music Player
- * This file was part of Clementine.
- * Copyright 2010, David Sansome
- * Copyright 2019, Jonas Kvinge
- *
- * Strawberry is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Strawberry is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Strawberry. If not, see .
- *
- */
-
-#include "config.h"
-
-#include
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "core/song.h"
-
-#include "tagreader.h"
-#include "test_utils.h"
-
-namespace {
-
-class SongTest : public ::testing::Test {
- protected:
- static void SetUpTestCase() {
- // Return something from uninteresting mock functions.
- testing::DefaultValue::Set("foobarbaz");
- }
-
- static Song ReadSongFromFile(const QString& filename) {
- TagReader tag_reader;
- Song song;
- ::pb::tagreader::SongMetadata pb_song;
-
- // We need to init protobuf object from a Song object, to have default values initialized correctly.
- song.ToProtobuf(&pb_song);
- tag_reader.ReadFile(filename, &pb_song);
- song.InitFromProtobuf(pb_song);
- return song;
- }
-
- static void WriteSongToFile(const Song& song, const QString& filename) {
- TagReader tag_reader;
- ::pb::tagreader::SongMetadata pb_song;
- song.ToProtobuf(&pb_song);
- tag_reader.SaveFile(filename, pb_song);
- }
-
-};
-
-TEST_F(SongTest, TestAudioFileTagging) {
-
- const QStringList files_to_test = QStringList() << ":/audio/strawberry.wav"
- << ":/audio/strawberry.flac"
- << ":/audio/strawberry.wv"
- << ":/audio/strawberry.oga"
- << ":/audio/strawberry.opus"
- << ":/audio/strawberry.spx"
- << ":/audio/strawberry.aif"
- << ":/audio/strawberry.m4a"
- << ":/audio/strawberry.mp4"
- << ":/audio/strawberry.mp3"
- << ":/audio/strawberry.asf";
-
- for (const QString& test_filename : files_to_test) {
-
- TemporaryResource r(test_filename);
- Song song = ReadSongFromFile(r.fileName());
-
- // Compare files
- QFile orig_file(test_filename);
- orig_file.open(QIODevice::ReadOnly);
- EXPECT_TRUE(orig_file.isOpen());
- QByteArray orig_file_data = orig_file.readAll();
-
- QFile temp_file(r.fileName());
- temp_file.open(QIODevice::ReadOnly);
- EXPECT_TRUE(temp_file.isOpen());
- QByteArray temp_file_data = temp_file.readAll();
-
- EXPECT_TRUE(!orig_file_data.isEmpty());
- EXPECT_TRUE(!temp_file_data.isEmpty());
- EXPECT_TRUE(orig_file_data == temp_file_data);
-
- if (test_filename.contains(QRegExp(".*\\.wav$"))) continue;
-
- // Write tags
- song.set_title("strawberry title");
- song.set_artist("strawberry artist");
- song.set_album("strawberry album");
- song.set_albumartist("strawberry album artist");
- song.set_composer("strawberry composer");
- song.set_performer("strawberry performer");
- song.set_grouping("strawberry grouping");
- song.set_genre("strawberry genre");
- song.set_comment("strawberry comment");
- song.set_track(12);
- song.set_disc(1234);
- song.set_year(2019);
- WriteSongToFile(song, r.fileName());
-
- // Read tags
- Song new_song = ReadSongFromFile(r.fileName());
- EXPECT_EQ("strawberry title", new_song.title());
- EXPECT_EQ("strawberry artist", new_song.artist());
- EXPECT_EQ("strawberry album", new_song.album());
- if (!test_filename.contains(QRegExp(".*\\.aif$")) && !test_filename.contains(QRegExp(".*\\.asf$"))) {
- EXPECT_EQ("strawberry album artist", new_song.albumartist());
- EXPECT_EQ("strawberry composer", new_song.composer());
- if (!test_filename.contains(QRegExp(".*\\.mp4$")) && !test_filename.contains(QRegExp(".*\\.m4a$"))) {
- EXPECT_EQ("strawberry performer", new_song.performer());
- }
- EXPECT_EQ("strawberry grouping", new_song.grouping());
- EXPECT_EQ(1234, new_song.disc());
- }
- EXPECT_EQ("strawberry genre", new_song.genre());
- if (!test_filename.contains(QRegExp(".*\\.asf$"))) {
- EXPECT_EQ("strawberry comment", new_song.comment());
- }
- EXPECT_EQ(12, new_song.track());
- EXPECT_EQ(2019, new_song.year());
-
- }
-
-}
-
-} // namespace
diff --git a/tests/src/tagreader_test.cpp b/tests/src/tagreader_test.cpp
new file mode 100644
index 000000000..21d1a7ed6
--- /dev/null
+++ b/tests/src/tagreader_test.cpp
@@ -0,0 +1,1681 @@
+/*
+ * Strawberry Music Player
+ * Copyright 2020, Jonas Kvinge
+ *
+ * Strawberry is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Strawberry is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Strawberry. If not, see .
+ *
+ */
+
+#include "config.h"
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "core/song.h"
+
+#include "tagreader.h"
+#include "test_utils.h"
+
+namespace {
+
+class TagReaderTest : public ::testing::Test {
+ protected:
+ static void SetUpTestCase() {
+ // Return something from uninteresting mock functions.
+ testing::DefaultValue::Set("foobarbaz");
+ }
+
+ static Song ReadSongFromFile(const QString& filename) {
+ TagReader tag_reader;
+ Song song;
+ ::pb::tagreader::SongMetadata pb_song;
+
+ // We need to init protobuf object from a Song object, to have default values initialized correctly.
+ song.ToProtobuf(&pb_song);
+ tag_reader.ReadFile(filename, &pb_song);
+ song.InitFromProtobuf(pb_song);
+ return song;
+ }
+
+ static void WriteSongToFile(const Song& song, const QString& filename) {
+ TagReader tag_reader;
+ ::pb::tagreader::SongMetadata pb_song;
+ song.ToProtobuf(&pb_song);
+ tag_reader.SaveFile(filename, pb_song);
+ }
+
+ static QString SHA256SUM(const QString &filename) {
+ QFile file(filename);
+ if (file.open(QIODevice::ReadOnly)) {
+ QByteArray buffer;
+ QCryptographicHash hash(QCryptographicHash::Sha256);
+ while (file.bytesAvailable() > 0) {
+ quint64 bytes_read = qMin(file.bytesAvailable(), qint64(8192));
+ buffer = file.read(bytes_read);
+ if (buffer.isEmpty()) break;
+ hash.addData(buffer, bytes_read);
+ }
+ file.close();
+ return hash.result().toHex();
+ }
+ return QString();
+ }
+
+};
+
+TEST_F(TagReaderTest, TestFLACAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.flac");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.flac");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestWavPackAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.wv");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.wv");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestOggFLACAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.oga");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.oga");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestOggVorbisAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.ogg");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.ogg");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestOggOpusAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.opus");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.opus");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestOggSpeexAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.spx");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.spx");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestAIFFAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.aif");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.aif");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ //EXPECT_EQ("strawberry album artist", song.albumartist());
+ //EXPECT_EQ("strawberry composer", song.composer());
+ //EXPECT_EQ("strawberry performer", song.performer());
+ //EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ //EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ //EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ //EXPECT_EQ("new album artist", song.albumartist());
+ //EXPECT_EQ("new composer", song.composer());
+ //EXPECT_EQ("new performer", song.performer());
+ //EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ //EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ //EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ //EXPECT_EQ("strawberry album artist", song.albumartist());
+ //EXPECT_EQ("strawberry composer", song.composer());
+ //EXPECT_EQ("strawberry performer", song.performer());
+ //EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ //EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ //EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestASFAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.asf");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.asf");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ //EXPECT_EQ("strawberry album artist", song.albumartist());
+ //EXPECT_EQ("strawberry composer", song.composer());
+ //EXPECT_EQ("strawberry performer", song.performer());
+ //EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ //EXPECT_EQ("strawberry comment", song.comment());
+ //EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ //EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ //EXPECT_EQ("new album artist", song.albumartist());
+ //EXPECT_EQ("new composer", song.composer());
+ //EXPECT_EQ("new performer", song.performer());
+ //EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ //EXPECT_EQ("new comment", song.comment());
+ //EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ //EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ //EXPECT_EQ("strawberry album artist", song.albumartist());
+ //EXPECT_EQ("strawberry composer", song.composer());
+ //EXPECT_EQ("strawberry performer", song.performer());
+ //EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ //EXPECT_EQ("strawberry comment", song.comment());
+ //EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ //EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ //EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestMP3AudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.mp3");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.mp3");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+TEST_F(TagReaderTest, TestM4AAudioFileTagging) {
+
+ TemporaryResource r(":/audio/strawberry.m4a");
+
+ QString sha256sum_notags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_notags.isEmpty());
+
+ { // Compare files
+ QByteArray orig_file_data;
+ QByteArray temp_file_data;
+ {
+ QFile orig_file(":/audio/strawberry.m4a");
+ orig_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(orig_file.isOpen());
+ orig_file_data = orig_file.readAll();
+ orig_file.close();
+ }
+
+ {
+ QFile temp_file(r.fileName());
+ temp_file.open(QIODevice::ReadOnly);
+ EXPECT_TRUE(temp_file.isOpen());
+ temp_file_data = temp_file.readAll();
+ temp_file.close();
+ }
+
+ EXPECT_TRUE(!orig_file_data.isEmpty());
+ EXPECT_TRUE(!temp_file_data.isEmpty());
+ EXPECT_TRUE(orig_file_data == temp_file_data);
+
+ }
+
+ Song orig_song = ReadSongFromFile(r.fileName());
+
+ { // Write tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ // Read new checksum
+ QString sha256sum_tags = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum_tags.isEmpty());
+
+ { // Read tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ //EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ //EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+
+ }
+
+ { // Write new tags
+ Song song;
+ song.set_title("new title");
+ song.set_artist("new artist");
+ song.set_album("new album");
+ song.set_albumartist("new album artist");
+ song.set_composer("new composer");
+ song.set_performer("new performer");
+ song.set_grouping("new grouping");
+ song.set_genre("new genre");
+ song.set_comment("new comment");
+ song.set_lyrics("new lyrics");
+ song.set_track(21);
+ song.set_disc(4321);
+ song.set_year(9102);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read new tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("new title", song.title());
+ EXPECT_EQ("new artist", song.artist());
+ EXPECT_EQ("new album", song.album());
+ EXPECT_EQ("new album artist", song.albumartist());
+ EXPECT_EQ("new composer", song.composer());
+ //EXPECT_EQ("new performer", song.performer());
+ EXPECT_EQ("new grouping", song.grouping());
+ EXPECT_EQ("new genre", song.genre());
+ EXPECT_EQ("new comment", song.comment());
+ //EXPECT_EQ("new lyrics", song.lyrics());
+ EXPECT_EQ(21, song.track());
+ EXPECT_EQ(4321, song.disc());
+ EXPECT_EQ(9102, song.year());
+ }
+
+ { // Write original tags
+ Song song;
+ song.set_title("strawberry title");
+ song.set_artist("strawberry artist");
+ song.set_album("strawberry album");
+ song.set_albumartist("strawberry album artist");
+ song.set_composer("strawberry composer");
+ song.set_performer("strawberry performer");
+ song.set_grouping("strawberry grouping");
+ song.set_genre("strawberry genre");
+ song.set_comment("strawberry comment");
+ song.set_lyrics("strawberry lyrics");
+ song.set_track(12);
+ song.set_disc(1234);
+ song.set_year(2019);
+ WriteSongToFile(song, r.fileName());
+ }
+
+ { // Read original tags
+ Song song = ReadSongFromFile(r.fileName());
+ EXPECT_EQ("strawberry title", song.title());
+ EXPECT_EQ("strawberry artist", song.artist());
+ EXPECT_EQ("strawberry album", song.album());
+ EXPECT_EQ("strawberry album artist", song.albumartist());
+ EXPECT_EQ("strawberry composer", song.composer());
+ //EXPECT_EQ("strawberry performer", song.performer());
+ EXPECT_EQ("strawberry grouping", song.grouping());
+ EXPECT_EQ("strawberry genre", song.genre());
+ EXPECT_EQ("strawberry comment", song.comment());
+ //EXPECT_EQ("strawberry lyrics", song.lyrics());
+ EXPECT_EQ(12, song.track());
+ EXPECT_EQ(1234, song.disc());
+ EXPECT_EQ(2019, song.year());
+ }
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ EXPECT_EQ(sha256sum_tags, sha256sum);
+ }
+
+ WriteSongToFile(orig_song, r.fileName());
+
+ { // Compare checksums
+ QString sha256sum = SHA256SUM(r.fileName());
+ EXPECT_FALSE(sha256sum.isEmpty());
+ //EXPECT_EQ(sha256sum, sha256sum_notags);
+ }
+
+}
+
+} // namespace