strawberry-audio-player-win.../tests/src/organizeformat_test.cpp

187 lines
5.9 KiB
C++
Raw Permalink Normal View History

2019-06-28 01:33:22 +02:00
/*
* Strawberry Music Player
* This file was part of Clementine.
* Copyright 2010, David Sansome <me@davidsansome.com>
* Copyright 2019, Jonas Kvinge <jonas@jkvinge.net>
*
* 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 <http://www.gnu.org/licenses/>.
*
*/
#include <gtest/gtest.h>
#include "test_utils.h"
#include "organize/organizeformat.h"
2022-12-29 21:39:03 +01:00
#include "utilities/timeconstants.h"
2019-06-28 01:33:22 +02:00
#include "core/song.h"
#include "core/logging.h"
#include <QUrl>
2021-06-20 19:04:08 +02:00
// clazy:excludeall=returning-void-expression
class OrganizeFormatTest : public ::testing::Test {
2019-06-28 01:33:22 +02:00
protected:
OrganizeFormat format_;
2019-06-28 01:33:22 +02:00
Song song_;
};
TEST_F(OrganizeFormatTest, BasicReplace) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
song_.set_title(QStringLiteral("title"));
song_.set_album(QStringLiteral("album"));
song_.set_artist(QStringLiteral("artist"));
song_.set_albumartist(QStringLiteral("albumartist"));
2019-06-28 01:33:22 +02:00
song_.set_track(321);
song_.set_disc(789);
song_.set_year(2010);
song_.set_originalyear(1995);
2024-04-21 19:37:39 +02:00
song_.set_genre(QStringLiteral("genre"));
song_.set_composer(QStringLiteral("composer"));
song_.set_performer(QStringLiteral("performer"));
song_.set_grouping(QStringLiteral("grouping"));
song_.set_comment(QStringLiteral("comment"));
2019-06-28 01:33:22 +02:00
song_.set_length_nanosec(987 * kNsecPerSec);
song_.set_samplerate(654);
song_.set_bitdepth(32);
song_.set_bitrate(123);
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%album %albumartist %artist %bitrate %comment %composer %performer %grouping %disc %genre %length %samplerate %bitdepth %title %track %year"));
2019-06-28 01:33:22 +02:00
ASSERT_TRUE(format_.IsValid());
2020-05-16 19:17:06 +02:00
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("album_albumartist_artist_123_comment_composer_performer_grouping_789_genre_987_654_32_title_321_2010"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
2020-10-21 21:32:30 +02:00
TEST_F(OrganizeFormatTest, BasicReplacePaths) {
2024-04-21 19:37:39 +02:00
song_.set_title(QStringLiteral("title"));
song_.set_album(QStringLiteral("album"));
song_.set_artist(QStringLiteral("artist"));
song_.set_albumartist(QStringLiteral("albumartist"));
2020-10-21 21:32:30 +02:00
song_.set_track(321);
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%albumartist/%album/%track %albumartist %artist %album %title"));
2020-10-21 21:32:30 +02:00
ASSERT_TRUE(format_.IsValid());
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("albumartist/album/321_albumartist_artist_album_title"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, ArtistInitial) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
song_.set_artist(QStringLiteral("bob"));
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%artistinitial"));
2019-06-28 01:33:22 +02:00
ASSERT_TRUE(format_.IsValid());
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("B"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, AlbumArtistInitial) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
song_.set_albumartist(QStringLiteral("bob"));
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%artistinitial"));
2019-06-28 01:33:22 +02:00
ASSERT_TRUE(format_.IsValid());
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("B"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, InvalidTag) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%invalid"));
2019-06-28 01:33:22 +02:00
EXPECT_FALSE(format_.IsValid());
}
TEST_F(OrganizeFormatTest, Blocks) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("Before{Inside%year}After"));
2019-06-28 01:33:22 +02:00
ASSERT_TRUE(format_.IsValid());
song_.set_year(-1);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("BeforeAfter"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
song_.set_year(0);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("BeforeAfter"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
song_.set_year(123);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("BeforeInside123After"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, ReplaceSpaces) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
song_.set_title(QStringLiteral("The Song Title"));
format_.set_format(QStringLiteral("The Format String %title"));
2019-06-28 01:33:22 +02:00
format_.set_replace_spaces(false);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("The Format String The Song Title"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
format_.set_replace_spaces(true);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("The_Format_String_The_Song_Title"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, ReplaceNonAscii) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
song_.set_artist(QStringLiteral("Röyksopp"));
format_.set_format(QStringLiteral("%artist"));
2019-06-28 01:33:22 +02:00
format_.set_remove_non_ascii(false);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("Röyksopp"), format_.GetFilenameForSong(song_).filename);
2020-05-16 19:17:06 +02:00
2019-06-28 01:33:22 +02:00
format_.set_remove_non_ascii(true);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("Royksopp"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
song_.set_artist(QLatin1String(""));
EXPECT_EQ(QLatin1String(""), format_.GetFilenameForSong(song_).filename);
2024-04-21 19:37:39 +02:00
song_.set_artist(QStringLiteral("Владимир Высоцкий"));
EXPECT_EQ(QStringLiteral("Vladimir_Vysockij"), format_.GetFilenameForSong(song_).filename);
2024-04-21 19:37:39 +02:00
song_.set_artist(QStringLiteral("エックス・ジャパン"));
EXPECT_EQ(QStringLiteral("ekkusujapan"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, TrackNumberPadding) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%track"));
2019-06-28 01:33:22 +02:00
song_.set_track(9);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("09"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
song_.set_track(99);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("99"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
song_.set_track(999);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QStringLiteral("999"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
song_.set_track(0);
2024-04-21 19:37:39 +02:00
EXPECT_EQ(QLatin1String(""), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}
TEST_F(OrganizeFormatTest, ReplaceSlashes) {
2019-06-28 01:33:22 +02:00
2024-04-21 19:37:39 +02:00
format_.set_format(QStringLiteral("%title"));
song_.set_title(QStringLiteral("foo/bar\\baz"));
EXPECT_EQ(QStringLiteral("foobarbaz"), format_.GetFilenameForSong(song_).filename);
2019-06-28 01:33:22 +02:00
}