diff options
Diffstat (limited to 'rbutil/rbutilqt/test/test-playerbuildinfo.cpp')
-rw-r--r-- | rbutil/rbutilqt/test/test-playerbuildinfo.cpp | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/rbutil/rbutilqt/test/test-playerbuildinfo.cpp b/rbutil/rbutilqt/test/test-playerbuildinfo.cpp new file mode 100644 index 0000000000..fe07ba8348 --- /dev/null +++ b/rbutil/rbutilqt/test/test-playerbuildinfo.cpp | |||
@@ -0,0 +1,237 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2020 Dominik Riebeling | ||
10 | * | ||
11 | * This program is free software; you can redistribute it and/or | ||
12 | * modify it under the terms of the GNU General Public License | ||
13 | * as published by the Free Software Foundation; either version 2 | ||
14 | * of the License, or (at your option) any later version. | ||
15 | * | ||
16 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
17 | * KIND, either express or implied. | ||
18 | * | ||
19 | ****************************************************************************/ | ||
20 | |||
21 | #include <QtTest> | ||
22 | #include <QObject> | ||
23 | #include "playerbuildinfo.h" | ||
24 | #include "rbsettings.h" | ||
25 | |||
26 | class TestPlayerBuildInfo : public QObject | ||
27 | { | ||
28 | Q_OBJECT | ||
29 | |||
30 | private slots: | ||
31 | void testBuildInfo(); | ||
32 | void testBuildInfo_data(); | ||
33 | void testPlayerInfo(); | ||
34 | void testPlayerInfo_data(); | ||
35 | }; | ||
36 | |||
37 | const char* testinfo = | ||
38 | "[release]\n" | ||
39 | "build_url=https://buildurl/release/%VERSION%/rockbox-%TARGET%-%VERSION%.zip\n" | ||
40 | "voice_url=https://buildurl/release/%VERSION%/voice-%TARGET%-%VERSION%.zip\n" | ||
41 | "manual_url=https://buildurl/release/%VERSION%/manual-%TARGET%-%VERSION%.zip\n" | ||
42 | "source_url=https://buildurl/release/%VERSION%/rockbox-%TARGET%-src-%VERSION%.zip\n" | ||
43 | "font_url=https://buildurl/release/%VERSION%/fonts-%VERSION%.zip\n" | ||
44 | "archosfmrecorder=3.11.2\n" | ||
45 | "iaudiom3=3.11.2,http://dl.rockbox.org/release/3.11.2/rockbox-iaudiom5-3.11.2.zip\n" | ||
46 | "sansae200 = 3.15\n" | ||
47 | "iriverh100 = 3.11.2, http://dl.rockbox.org/release/3.11.2/rockbox-iriverh100-3.11.2.zip\n" | ||
48 | "iriverh120 = 3.3\n" | ||
49 | "iriverh300 = \n" | ||
50 | "[release-candidate]\n" | ||
51 | "build_url=https://buildurl/rc/%VERSION%/rockbox-%TARGET%-%VERSION%.zip\n" | ||
52 | "gigabeatfx=f9dce96,http://dl.rockbox.org/rc/f9dce96/rockbox-gigabeatfx.zip\n" | ||
53 | "archosfmrecorder=f9dce96\n" | ||
54 | "archosrecorder = f9dce96\n" | ||
55 | "iaudiox5=f9dce96,http://dl.rockbox.org/rc/f9dce96/rockbox-iaudiox5.zip\n" | ||
56 | "[development]\n" | ||
57 | "build_url=https://buildurl/dev/rockbox-%TARGET%.zip\n" | ||
58 | "iriverh100 = be1be79\n" | ||
59 | "iaudiox5 = be1be76\n" | ||
60 | "[dailies]\n" | ||
61 | "timestamp = 20201113\n" | ||
62 | "rev = 362f7a3\n" | ||
63 | "[daily]\n" | ||
64 | "build_url=https://buildurl/daily/rockbox-%TARGET%-%VERSION%.zip\n" | ||
65 | "iriverh100 = f9dce00\n" | ||
66 | "[bleeding]\n" | ||
67 | "timestamp = 20201114T105723Z\n" | ||
68 | "rev = be1be79\n" | ||
69 | "[status]\n" | ||
70 | "archosfmrecorder=3\n" | ||
71 | "iriverh100=2\n" | ||
72 | "iriverh300=1\n" | ||
73 | "iriverh10=0\n" | ||
74 | "[voices]\n" | ||
75 | "3.15=english,francais\n" | ||
76 | "3.11.2=english\n" | ||
77 | "daily=deutsch,english,francais\n" | ||
78 | ; | ||
79 | |||
80 | Q_DECLARE_METATYPE(PlayerBuildInfo::BuildInfo); | ||
81 | Q_DECLARE_METATYPE(PlayerBuildInfo::BuildType); | ||
82 | Q_DECLARE_METATYPE(PlayerBuildInfo::DeviceInfo); | ||
83 | |||
84 | struct { | ||
85 | QString target; | ||
86 | PlayerBuildInfo::BuildInfo item; | ||
87 | PlayerBuildInfo::BuildType type; | ||
88 | QString expected; | ||
89 | } testdataBuild[] = | ||
90 | { | ||
91 | // release builds | ||
92 | { "iriverh100", PlayerBuildInfo::BuildVoiceLangs, PlayerBuildInfo::TypeRelease, "english" }, | ||
93 | { "iriverh300", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeRelease, "" }, | ||
94 | { "iriverh300", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeRelease, "" }, | ||
95 | { "iriverh10", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeRelease, "" }, | ||
96 | { "iriverh10", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeRelease, "" }, | ||
97 | { "archosfmrecorder", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeRelease, "3.11.2" }, | ||
98 | { "iaudiom3", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeRelease, "3.11.2" }, | ||
99 | { "iaudiom3", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeRelease, "http://dl.rockbox.org/release/3.11.2/rockbox-iaudiom5-3.11.2.zip" }, | ||
100 | { "sansae200", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeRelease, "3.15" }, | ||
101 | { "sansae200", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeRelease, "https://buildurl/release/3.15/rockbox-sansae200-3.15.zip" }, | ||
102 | { "iriverh100", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeRelease, "3.11.2" }, | ||
103 | { "iriverh100", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeRelease, "http://dl.rockbox.org/release/3.11.2/rockbox-iriverh100-3.11.2.zip" }, | ||
104 | { "iriverh100", PlayerBuildInfo::BuildVoiceUrl, PlayerBuildInfo::TypeRelease, "https://buildurl/release/3.11.2/voice-iriverh100-3.11.2.zip" }, | ||
105 | { "iriverh100", PlayerBuildInfo::BuildManualUrl, PlayerBuildInfo::TypeRelease, "https://buildurl/release/3.11.2/manual-iriverh100-3.11.2.zip" }, | ||
106 | { "iriverh100", PlayerBuildInfo::BuildSourceUrl, PlayerBuildInfo::TypeRelease, "https://buildurl/release/3.11.2/rockbox-iriverh100-src-3.11.2.zip" }, | ||
107 | // h120 uses the same manual as h100. | ||
108 | { "iriverh120", PlayerBuildInfo::BuildManualUrl, PlayerBuildInfo::TypeRelease, "https://buildurl/release/3.3/manual-iriverh100-3.3.zip" }, | ||
109 | { "iriverh100", PlayerBuildInfo::BuildFontUrl, PlayerBuildInfo::TypeRelease, "https://buildurl/release/3.11.2/fonts-3.11.2.zip" }, | ||
110 | |||
111 | // rc builds | ||
112 | { "gigabeatfx", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeCandidate, "f9dce96" }, | ||
113 | { "gigabeatfx", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeCandidate, "http://dl.rockbox.org/rc/f9dce96/rockbox-gigabeatfx.zip" }, | ||
114 | { "archosfmrecorder", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeCandidate, "f9dce96" }, | ||
115 | { "archosfmrecorder", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeCandidate, "https://buildurl/rc/f9dce96/rockbox-archosfmrecorder-f9dce96.zip" }, | ||
116 | { "archosrecorder", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeCandidate, "f9dce96" }, | ||
117 | { "archosrecorder", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeCandidate, "https://buildurl/rc/f9dce96/rockbox-archosrecorder-f9dce96.zip" }, | ||
118 | { "iaudiox5", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeCandidate, "f9dce96" }, | ||
119 | { "iaudiox5", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeCandidate, "http://dl.rockbox.org/rc/f9dce96/rockbox-iaudiox5.zip" }, | ||
120 | { "iaudiox5.v", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeCandidate, "f9dce96" }, | ||
121 | { "iaudiox5.v", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeCandidate, "http://dl.rockbox.org/rc/f9dce96/rockbox-iaudiox5.zip" }, | ||
122 | |||
123 | // devel builds | ||
124 | { "iriverh100", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeDevel, "https://buildurl/dev/rockbox-iriverh100.zip" }, | ||
125 | { "iaudiox5.v", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeDevel, "be1be76" }, | ||
126 | { "iaudiox5.v", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeDevel, "https://buildurl/dev/rockbox-iaudiox5.zip" }, | ||
127 | |||
128 | // daily builds | ||
129 | { "iriverh100", PlayerBuildInfo::BuildVoiceLangs, PlayerBuildInfo::TypeDaily, "deutsch,english,francais" }, | ||
130 | { "iriverh100", PlayerBuildInfo::BuildVersion, PlayerBuildInfo::TypeDaily, "f9dce00" }, | ||
131 | { "iriverh100", PlayerBuildInfo::BuildUrl, PlayerBuildInfo::TypeDaily, "https://buildurl/daily/rockbox-iriverh100-f9dce00.zip" }, | ||
132 | }; | ||
133 | |||
134 | struct { | ||
135 | QString target; | ||
136 | PlayerBuildInfo::DeviceInfo item; | ||
137 | QString expected; | ||
138 | } testdataPlayer[] = | ||
139 | { | ||
140 | {"archosfmrecorder", PlayerBuildInfo::BuildStatus, "3"}, | ||
141 | { "iriverh10", PlayerBuildInfo::BuildStatus, "0" }, | ||
142 | { "iriverh100", PlayerBuildInfo::BuildStatus, "2" }, | ||
143 | { "iriverh300", PlayerBuildInfo::BuildStatus, "1" }, | ||
144 | { "archosfmrecorder", PlayerBuildInfo::BuildStatus, "3" }, | ||
145 | {"archosfmrecorder", PlayerBuildInfo::DisplayName, "Jukebox Recorder FM"}, | ||
146 | {"archosfmrecorder", PlayerBuildInfo::BootloaderMethod, "none"}, | ||
147 | {"archosfmrecorder", PlayerBuildInfo::BootloaderName, ""}, | ||
148 | {"archosfmrecorder", PlayerBuildInfo::BootloaderFile, ""}, | ||
149 | {"archosfmrecorder", PlayerBuildInfo::BootloaderFilter, ""}, | ||
150 | {"archosfmrecorder", PlayerBuildInfo::Encoder, "lame"}, | ||
151 | {"archosfmrecorder", PlayerBuildInfo::Brand, "Archos"}, | ||
152 | {"archosfmrecorder", PlayerBuildInfo::PlayerPicture, "archosfmrecorder"}, | ||
153 | {"iriverh100", PlayerBuildInfo::BuildStatus, "2"}, | ||
154 | {"iriverh100", PlayerBuildInfo::BootloaderMethod, "hex"}, | ||
155 | {"iriverh100", PlayerBuildInfo::BootloaderFilter, "*.hex *.zip"}, | ||
156 | {"ipodmini2g", PlayerBuildInfo::Encoder, "rbspeex"}, | ||
157 | }; | ||
158 | |||
159 | void TestPlayerBuildInfo::testBuildInfo_data() | ||
160 | { | ||
161 | QTest::addColumn<QString>("target"); | ||
162 | QTest::addColumn<PlayerBuildInfo::BuildInfo>("item"); | ||
163 | QTest::addColumn<PlayerBuildInfo::BuildType>("type"); | ||
164 | QTest::addColumn<QString>("expected"); | ||
165 | for (size_t i = 0; i < sizeof(testdataBuild) / sizeof(testdataBuild[0]); i++) | ||
166 | QTest::newRow("") << testdataBuild[i].target << testdataBuild[i].item | ||
167 | << testdataBuild[i].type << testdataBuild[i].expected; | ||
168 | } | ||
169 | |||
170 | |||
171 | void TestPlayerBuildInfo::testBuildInfo() | ||
172 | { | ||
173 | // create a temporary file for test input. Do not use QSettings() to allow | ||
174 | // creating different format variations. | ||
175 | QTemporaryFile tf(this); | ||
176 | tf.open(); | ||
177 | QString filename = tf.fileName(); | ||
178 | tf.write(testinfo); | ||
179 | tf.close(); | ||
180 | |||
181 | PlayerBuildInfo::instance()->setBuildInfo(filename); | ||
182 | |||
183 | QFETCH(QString, target); | ||
184 | QFETCH(PlayerBuildInfo::BuildInfo, item); | ||
185 | QFETCH(PlayerBuildInfo::BuildType, type); | ||
186 | QFETCH(QString, expected); | ||
187 | |||
188 | RbSettings::setValue(RbSettings::CurrentPlatform, target); | ||
189 | QVariant result = PlayerBuildInfo::instance()->value(item, type); | ||
190 | if(result.canConvert(QMetaType::QString)) | ||
191 | QCOMPARE(result.toString(), QString(expected)); | ||
192 | else | ||
193 | QCOMPARE(result.toStringList().join(","), QString(expected)); | ||
194 | } | ||
195 | |||
196 | |||
197 | // NOTE: These tests rely on rbutil.ini | ||
198 | void TestPlayerBuildInfo::testPlayerInfo_data() | ||
199 | { | ||
200 | QTest::addColumn<QString>("target"); | ||
201 | QTest::addColumn<PlayerBuildInfo::DeviceInfo>("item"); | ||
202 | QTest::addColumn<QString>("expected"); | ||
203 | for (size_t i = 0; i < sizeof(testdataPlayer) / sizeof(testdataPlayer[0]); i++) | ||
204 | QTest::newRow("") << testdataPlayer[i].target << testdataPlayer[i].item | ||
205 | << testdataPlayer[i].expected; | ||
206 | } | ||
207 | |||
208 | void TestPlayerBuildInfo::testPlayerInfo() | ||
209 | { | ||
210 | // create a temporary file for test input. Do not use QSettings() to allow | ||
211 | // creating different format variations. | ||
212 | QTemporaryFile tf(this); | ||
213 | tf.open(); | ||
214 | QString filename = tf.fileName(); | ||
215 | tf.write(testinfo); | ||
216 | tf.close(); | ||
217 | |||
218 | PlayerBuildInfo::instance()->setBuildInfo(filename); | ||
219 | |||
220 | QFETCH(QString, target); | ||
221 | QFETCH(PlayerBuildInfo::DeviceInfo, item); | ||
222 | QFETCH(QString, expected); | ||
223 | |||
224 | QVariant result = PlayerBuildInfo::instance()->value(item, target); | ||
225 | if(result.canConvert(QMetaType::QString)) | ||
226 | QCOMPARE(result.toString(), QString(expected)); | ||
227 | else | ||
228 | QCOMPARE(result.toStringList().join(","), QString(expected)); | ||
229 | } | ||
230 | |||
231 | |||
232 | QTEST_MAIN(TestPlayerBuildInfo) | ||
233 | |||
234 | // this include is needed because we don't use a separate header file for the | ||
235 | // test class. It also needs to be at the end. | ||
236 | #include "test-playerbuildinfo.moc" | ||
237 | |||