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