1 /*
2 * Strawberry Music Player
3 * This file was part of Clementine.
4 * Copyright 2010, David Sansome <me@davidsansome.com>
5 * Copyright 2019-2021, Jonas Kvinge <jonas@jkvinge.net>
6 *
7 * Strawberry is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * Strawberry is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with Strawberry. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22 #include <gtest/gtest.h>
23
24 #include <QByteArray>
25 #include <QString>
26 #include <QDateTime>
27 #include <QtDebug>
28
29 #include "test_utils.h"
30 #include "core/utilities.h"
31 #include "core/logging.h"
32
TEST(UtilitiesTest,PrettyTimeDelta)33 TEST(UtilitiesTest, PrettyTimeDelta) {
34
35 ASSERT_EQ(Utilities::PrettyTimeDelta(60), "+1:00");
36
37 ASSERT_EQ(Utilities::PrettyTimeDelta(3600), "+1:00:00");
38
39 ASSERT_EQ(Utilities::PrettyTimeDelta(9600), "+2:40:00");
40
41 }
42
TEST(UtilitiesTest,PrettyTime)43 TEST(UtilitiesTest, PrettyTime) {
44
45 ASSERT_EQ(Utilities::PrettyTime(60), "1:00");
46
47 ASSERT_EQ(Utilities::PrettyTime(3600), "1:00:00");
48
49 ASSERT_EQ(Utilities::PrettyTime(9600), "2:40:00");
50
51 }
52
TEST(UtilitiesTest,PrettyTimeNanosec)53 TEST(UtilitiesTest, PrettyTimeNanosec) {}
54
TEST(UtilitiesTest,WordyTime)55 TEST(UtilitiesTest, WordyTime) {
56
57 ASSERT_EQ(Utilities::WordyTime(787200), "9 days 2:40:00");
58
59 }
60
TEST(UtilitiesTest,WordyTimeNanosec)61 TEST(UtilitiesTest, WordyTimeNanosec) {}
62
TEST(UtilitiesTest,Ago)63 TEST(UtilitiesTest, Ago) {
64
65 ASSERT_EQ(Utilities::Ago(QDateTime::currentDateTime().toSecsSinceEpoch() - 604800, QLocale()), "7 days ago");
66
67 }
68
TEST(UtilitiesTest,PrettyFutureDate)69 TEST(UtilitiesTest, PrettyFutureDate) {}
70
TEST(UtilitiesTest,PrettySize)71 TEST(UtilitiesTest, PrettySize) {
72
73 ASSERT_EQ(Utilities::PrettySize(787200), "787.2 KB");
74
75 }
76
TEST(UtilitiesTest,ColorToRgba)77 TEST(UtilitiesTest, ColorToRgba) {
78
79 ASSERT_EQ(Utilities::ColorToRgba(QColor(33, 22, 128)), "rgba(33, 22, 128, 255)");
80
81 }
82
TEST(UtilitiesTest,HmacFunctions)83 TEST(UtilitiesTest, HmacFunctions) {
84
85 QString key("key");
86 QString data("The quick brown fox jumps over the lazy dog");
87
88 // Test Hmac MD5
89 QString result_hash_md5 = Utilities::HmacMd5(key.toLocal8Bit(), data.toLocal8Bit()).toHex();
90 bool result_md5 = result_hash_md5 == QString("80070713463e7749b90c2dc24911e275");
91 EXPECT_TRUE(result_md5);
92
93 // Test Hmac SHA256
94 QString result_hash_sha256 = Utilities::HmacSha256(key.toLocal8Bit(), data.toLocal8Bit()).toHex();
95 bool result_sha256 = result_hash_sha256 == QString("f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8");
96 EXPECT_TRUE(result_sha256);
97
98 }
99
TEST(UtilitiesTest,PrettySize2)100 TEST(UtilitiesTest, PrettySize2) {
101
102 ASSERT_EQ(Utilities::PrettySize(QSize(22, 32)), "22x32");
103
104 }
105
TEST(UtilitiesTest,ParseRFC822DateTime)106 TEST(UtilitiesTest, ParseRFC822DateTime) {
107
108 QDateTime result_DateTime = Utilities::ParseRFC822DateTime(QString("22 Feb 2008 00:16:17 GMT"));
109 EXPECT_TRUE(result_DateTime.isValid());
110
111 result_DateTime = Utilities::ParseRFC822DateTime(QString("Thu, 13 Dec 2012 13:27:52 +0000"));
112 EXPECT_TRUE(result_DateTime.isValid());
113
114 result_DateTime = Utilities::ParseRFC822DateTime(QString("Mon, 12 March 2012 20:00:00 +0100"));
115 EXPECT_TRUE(result_DateTime.isValid());
116
117 }
118
TEST(UtilitiesTest,DecodeHtmlEntities)119 TEST(UtilitiesTest, DecodeHtmlEntities) {
120
121 ASSERT_EQ(Utilities::DecodeHtmlEntities("&"), "&");
122 ASSERT_EQ(Utilities::DecodeHtmlEntities("&"), "&");
123 ASSERT_EQ(Utilities::DecodeHtmlEntities("""), "\"");
124 ASSERT_EQ(Utilities::DecodeHtmlEntities("""), "\"");
125 ASSERT_EQ(Utilities::DecodeHtmlEntities("'"), "'");
126 ASSERT_EQ(Utilities::DecodeHtmlEntities("'"), "'");
127 ASSERT_EQ(Utilities::DecodeHtmlEntities("<"), "<");
128 ASSERT_EQ(Utilities::DecodeHtmlEntities("<"), "<");
129 ASSERT_EQ(Utilities::DecodeHtmlEntities(">"), ">");
130 ASSERT_EQ(Utilities::DecodeHtmlEntities(">"), ">");
131
132 }
133
TEST(UtilitiesTest,PathWithoutFilenameExtension)134 TEST(UtilitiesTest, PathWithoutFilenameExtension) {
135
136 ASSERT_EQ(Utilities::PathWithoutFilenameExtension("/home/jonas/test/filename.txt"), "/home/jonas/test/filename");
137
138 }
139
TEST(UtilitiesTest,FiddleFileExtension)140 TEST(UtilitiesTest, FiddleFileExtension) {
141
142 ASSERT_EQ(Utilities::FiddleFileExtension("/home/jonas/test/filename.txt", "db"), "/home/jonas/test/filename.db");
143
144 }
145
TEST(UtilitiesTest,SetEnvGetEnv)146 TEST(UtilitiesTest, SetEnvGetEnv) {
147
148 QString var = "STRAWBERRY_UNIT_TEST_" + Utilities::GetRandomStringWithCharsAndNumbers(20);
149 QString value = "STRAWBERRY_UNIT_TEST_" + Utilities::GetRandomStringWithCharsAndNumbers(20);
150
151 Utilities::SetEnv(var.toUtf8(), value);
152 ASSERT_EQ(Utilities::GetEnv(var), value);
153 Utilities::SetEnv(var.toUtf8(), "");
154
155 }
156
TEST(UtilitiesTest,Random)157 TEST(UtilitiesTest, Random) {
158
159 EXPECT_FALSE(Utilities::GetRandomStringWithChars(20) == Utilities::GetRandomStringWithChars(20));
160
161 EXPECT_FALSE(Utilities::GetRandomStringWithCharsAndNumbers(20) == Utilities::GetRandomStringWithCharsAndNumbers(20));
162
163 EXPECT_FALSE(Utilities::CryptographicRandomString(20) == Utilities::CryptographicRandomString(20));
164
165 EXPECT_FALSE(Utilities::GetRandomString(20, "&%XVBGQ") == Utilities::GetRandomString(20, "&%XVBGQ"));
166
167 }
168
TEST(UtilitiesTest,UnicodeToAscii)169 TEST(UtilitiesTest, UnicodeToAscii) {
170
171 ASSERT_EQ(Utilities::UnicodeToAscii("ÆØÅ"), "AEOA");
172
173 }
174
TEST(UtilitiesTest,ReplaceVariable)175 TEST(UtilitiesTest, ReplaceVariable) {
176
177 Song song;
178 song.set_title(Utilities::GetRandomStringWithChars(8));
179 song.set_album(Utilities::GetRandomStringWithChars(8));
180 song.set_artist(Utilities::GetRandomStringWithChars(8));
181 song.set_albumartist(Utilities::GetRandomStringWithChars(8));
182 song.set_track(5);
183 song.set_disc(2);
184 song.set_year(1999);
185 song.set_originalyear(2000);
186 song.set_genre(Utilities::GetRandomStringWithChars(8));
187 song.set_composer(Utilities::GetRandomStringWithChars(8));
188 song.set_performer(Utilities::GetRandomStringWithChars(8));
189 song.set_grouping(Utilities::GetRandomStringWithChars(8));
190 song.set_length_nanosec(900000000000);
191 song.set_url(QUrl("file:///home/jonas/Music/test_song.flac"));
192 song.set_skipcount(20);
193 song.set_playcount(90);
194 song.set_rating(1.0);
195
196 ASSERT_EQ(Utilities::ReplaceVariable("%title%", song, ""), song.title());
197 ASSERT_EQ(Utilities::ReplaceVariable("%album%", song, ""), song.album());
198 ASSERT_EQ(Utilities::ReplaceVariable("%artist%", song, ""), song.artist());
199 ASSERT_EQ(Utilities::ReplaceVariable("%albumartist%", song, ""), song.effective_albumartist());
200 ASSERT_EQ(Utilities::ReplaceVariable("%track%", song, ""), QString::number(song.track()));
201 ASSERT_EQ(Utilities::ReplaceVariable("%disc%", song, ""), QString::number(song.disc()));
202 ASSERT_EQ(Utilities::ReplaceVariable("%year%", song, ""), QString::number(song.year()));
203 ASSERT_EQ(Utilities::ReplaceVariable("%originalyear%", song, ""), QString::number(song.originalyear()));
204 ASSERT_EQ(Utilities::ReplaceVariable("%genre%", song, ""), song.genre());
205 ASSERT_EQ(Utilities::ReplaceVariable("%composer%", song, ""), song.composer());
206 ASSERT_EQ(Utilities::ReplaceVariable("%performer%", song, ""), song.performer());
207 ASSERT_EQ(Utilities::ReplaceVariable("%grouping%", song, ""), song.grouping());
208 ASSERT_EQ(Utilities::ReplaceVariable("%length%", song, ""), song.PrettyLength());
209 ASSERT_EQ(Utilities::ReplaceVariable("%filename%", song, ""), song.basefilename());
210 ASSERT_EQ(Utilities::ReplaceVariable("%url%", song, ""), song.url().toString());
211 ASSERT_EQ(Utilities::ReplaceVariable("%playcount%", song, ""), QString::number(song.playcount()));
212 ASSERT_EQ(Utilities::ReplaceVariable("%skipcount%", song, ""), QString::number(song.skipcount()));
213 ASSERT_EQ(Utilities::ReplaceVariable("%rating%", song, ""), song.PrettyRating());
214
215 }
216
TEST(UtilitiesTest,ReplaceMessage)217 TEST(UtilitiesTest, ReplaceMessage) {
218
219 Song song;
220 song.set_title(Utilities::GetRandomStringWithChars(8));
221 song.set_album(Utilities::GetRandomStringWithChars(8));
222 song.set_artist(Utilities::GetRandomStringWithChars(8));
223 song.set_albumartist(Utilities::GetRandomStringWithChars(8));
224 song.set_track(5);
225 song.set_disc(2);
226 song.set_year(1999);
227 song.set_originalyear(2000);
228 song.set_genre(Utilities::GetRandomStringWithChars(8));
229 song.set_composer(Utilities::GetRandomStringWithChars(8));
230 song.set_performer(Utilities::GetRandomStringWithChars(8));
231 song.set_grouping(Utilities::GetRandomStringWithChars(8));
232 song.set_length_nanosec(900000000000);
233 song.set_url(QUrl("file:///home/jonas/Music/test_song.flac"));
234 song.set_skipcount(20);
235 song.set_playcount(90);
236 song.set_rating(1.0);
237
238 ASSERT_EQ(Utilities::ReplaceMessage("%title% - %artist%", song, ""), song.title() + " - " + song.artist());
239
240 }
241