RabbitCommon v2.2.6
Loading...
Searching...
No Matches
UnitTests.cpp
1#include "UnitTests.h"
2#include <QApplication>
3#include <QtTest>
4
5#include "FrmUpdater.h"
6
7static Q_LOGGING_CATEGORY(log, "RabbitCommon.Test.Updater")
8
9CUnitTests::CUnitTests(QObject *parent)
10 : QObject{parent}
11{}
12
13void CUnitTests::initTestCase()
14{}
15
16void CUnitTests::initTestCase_data()
17{}
18
19void CUnitTests::cleanupTestCase()
20{}
21
22void CUnitTests::init()
23{}
24
25void CUnitTests::cleanup()
26{}
27
28void CUnitTests::testDownloadFileNoExistLocalFile()
29{
30 QString szNoExitFile = "data/nofile";
31 QString szExitFile = "data/redirect.json";
32 QVector<QUrl> urls;
33 urls << QUrl::fromLocalFile(szNoExitFile) << QUrl::fromLocalFile(szExitFile);
35 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigError,
36 [&](int nRet, const QString msg){
37 QVERIFY(tr("The file is not exists: ") + szNoExitFile == msg && -6 == nRet);
38 });
39 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigFinished,
40 [&](const QString szPath){
41 QVERIFY(szExitFile == szPath);
42 });
43 dwonload.Start(urls);
44
45 QTest::qWait(100);
46}
47
48void CUnitTests::testDownloadFileExistLocalFile()
49{
50 QString szFile = "data/nofile";
51 QVector<QUrl> urls;
52 urls << szFile;
54 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigError,
55 [&](int nRet, const QString msg){
56 QVERIFY(true);
57 });
58 QObject::connect(&dwonload, &RabbitCommon::CDownload::sigFinished,
59 [&](const QString szFile){
60 QVERIFY(false);
61 });
62 dwonload.Start(urls);
63 QTest::qWait(100);
64}
65
66void CUnitTests::testCFrmUpdaterCompareVersion()
67{
68 CFrmUpdater updater;
69
70 QVERIFY(updater.CompareVersion("", "v0.0.21") < 0);
71 QVERIFY(updater.CompareVersion("", "") == 0);
72 QVERIFY(updater.CompareVersion("v0.0.21", "") > 0);
73
74 QVERIFY(updater.CompareVersion("3b48ef5", "v0.0.21") == 0);
75 QVERIFY(updater.CompareVersion("v0.0.21", "3b48ef5") == 0);
76 QVERIFY(updater.CompareVersion("v0.0.21", "348564") < 0);
77 QVERIFY(updater.CompareVersion("348564", "v0.0.21") > 0);
78 QVERIFY(updater.CompareVersion("3b48ef5", "v1.0.21") < 0);
79 QVERIFY(updater.CompareVersion("v1.0.21", "3b48ef5") > 0);
80
81 QVERIFY(updater.CompareVersion("v0.1.20", "v1.0") < 0);
82 QVERIFY(updater.CompareVersion("v1.0", "v1.0") == 0);
83 QVERIFY(updater.CompareVersion("v1.0", "v0.0.19") > 0);
84
85 QVERIFY(updater.CompareVersion("v0.0.20", "v0.1") < 0);
86 QVERIFY(updater.CompareVersion("v0.1", "v0.1") == 0);
87 QVERIFY(updater.CompareVersion("v0.1", "v0.0.19") > 0);
88
89 QVERIFY(updater.CompareVersion("v0.0.20", "v0.0.21") < 0);
90 QVERIFY(updater.CompareVersion("v0.0.20", "v0.0.20") == 0);
91 QVERIFY(updater.CompareVersion("v0.0.20", "v0.0.19") > 0);
92
93 QVERIFY(updater.CompareVersion("v0.0.20-a", "v0.0.21-b") < 0);
94 QVERIFY(updater.CompareVersion("v0.0.20-d", "v0.0.20-c") == 0);
95 QVERIFY(updater.CompareVersion("v0.0.20-f", "v0.0.19-w") > 0);
96
97 QVERIFY(updater.CompareVersion("va.b.20-f", "vc.0.19-w") > 0);
98
99}
100
101void CUnitTests::test_os()
102{
103 QString szOS = QSysInfo::productType();
104 qDebug(log) << "QSysInfo::productType():" << szOS;
105#if defined(Q_OS_WINDOWS) || defined(Q_OS_CYGWIN)
106 QVERIFY("windows" == szOS);
107#elif defined(Q_OS_ANDROID)
108 QVERIFY("android" == szOS);
109#elif defined(Q_OS_MACOS)
110 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
111 QVERIFY("macos" == szOS);
112 #else
113 QVERIFY("osx" == szOS);
114 #endif
115#elif defined(Q_OS_LINUX)
116 QVERIFY("ubuntu" == szOS || "debian" == szOS);
117#elif defined(Q_OS_UNIX)
118 QVERIFY("osx" == szOS);
119#endif
120}
121
122void CUnitTests::test_architecture()
123{
124 qDebug(log) << "Build architecture:" << QSysInfo::buildCpuArchitecture()
125 << "Current architercture:" << QSysInfo::currentCpuArchitecture();
126 QVERIFY(QSysInfo::buildCpuArchitecture()
127 == QSysInfo::currentCpuArchitecture());
128}
129
130void CUnitTests::test_joson()
131{
132 QJsonArray url_windows;
133 url_windows.append("github.com/windows");
134 url_windows.append("gitlab.com/windows");
135
136 QJsonObject file_windows;
137 file_windows.insert("os", "windows");
138 file_windows.insert("os_min_version", "7");
139 file_windows.insert("arch", "x86");
140 file_windows.insert("arch_version", "1");
141 file_windows.insert("url", url_windows);
142
143 QJsonArray url_linux;
144 url_linux.append("gitlab.com/linux");
145 url_linux.append("github.com/linux");
146
147 QJsonObject file_linux;
148 file_linux.insert("os", "linux");
149 file_linux.insert("arch", "x64");
150 file_linux.insert("url", url_linux);
151
152 QJsonArray files;
153 files.append(file_windows);
154 files.append(file_linux);
155
156 QJsonObject version;
157 version.insert("version", "2.0.0");
158 version.insert("min_update_version", "1.0.0");
159 version.insert("info", "RabbitCommon");
160 version.insert("time", QDateTime::currentDateTime().toString());
161 version.insert("home", "github.com/kanglin/rabbitcommon");
162 version.insert("force", false);
163 version.insert("files", files);
164
165 QJsonDocument updater, doc1;
166
167 updater.setObject(version);
168 qDebug(log) << updater.toJson();
169 QJsonParseError err;
170 doc1 = QJsonDocument::fromJson(updater.toJson(), &err);
171 qDebug(log) << doc1;
172 QVERIFY(updater == doc1);
173}
174
175// See: data/redirect.json
176void CUnitTests::test_redirect_json_file()
177{
178 CFrmUpdater updater;
179 QVector<CFrmUpdater::CONFIG_REDIRECT> conf;
180 int nRet = 0;
181 nRet = updater.GetRedirectFromFile("update.json", conf);
182 QVERIFY(1 == nRet);
183 nRet = updater.GetRedirectFromFile("data/redirect.json", conf);
184 QVERIFY(0 == nRet);
185 QVERIFY(conf.length() == 5);
186
187 QVERIFY(conf[0].szVersion == "v2.0.0");
188 QVERIFY(conf[0].szMinUpdateVersion == "v0.0.26");
189 QVERIFY(conf[0].files.isEmpty());
190
191 QVERIFY(conf[1].szVersion == "v0.0.26");
192 QVERIFY(conf[1].szMinUpdateVersion == "v0.0.20");
193 QVERIFY(conf[1].files.length() == 1);
194 QVERIFY(conf[1].files[0].szSystem.isEmpty());
195 QVERIFY(conf[1].files[0].szArchitecture.isEmpty());
196 QVERIFY(conf[1].files[0].urls.size() == 1);
197 QVERIFY(conf[1].files[0].urls[0] == QUrl::fromLocalFile("data/update_locale.json"));
198
199 QVERIFY(conf[2].szVersion == "v0.0.20");
200 QVERIFY(conf[2].szMinUpdateVersion == "v0.0.10");
201 QVERIFY(conf[2].files.length() == 4);
202 QVERIFY(conf[2].files[0].szSystem == "windows");
203 QVERIFY(conf[2].files[0].szArchitecture.isEmpty());
204 QVERIFY(conf[2].files[0].urls.size() == 1);
205 QVERIFY(conf[2].files[0].urls[0] == QUrl::fromLocalFile("data/update_windows.json"));
206 QVERIFY(conf[2].files[1].szSystem == "ubuntu");
207 QVERIFY(conf[2].files[1].szArchitecture == "x86_64");
208 QVERIFY(conf[2].files[1].urls.size() == 1);
209 QVERIFY(conf[2].files[1].urls[0] == QUrl::fromLocalFile("data/update_ubuntu.json"));
210 QVERIFY(conf[2].files[2].szSystem == "macos");
211 QVERIFY(conf[2].files[2].szArchitecture == "x86_64");
212 QVERIFY(conf[2].files[2].urls.size() == 1);
213 QVERIFY(conf[2].files[2].urls[0] == QUrl::fromLocalFile("data/update_macos.json"));
214 QVERIFY(conf[2].files[3].szSystem == "osx");
215 QVERIFY(conf[2].files[3].szArchitecture == "x86_64");
216 QVERIFY(conf[2].files[3].urls.size() == 1);
217 QVERIFY(conf[2].files[3].urls[0] == QUrl::fromLocalFile("data/update_macos.json"));
218
219 QVERIFY(conf[3].szVersion == "v0.0.10");
220 QVERIFY(conf[3].szMinUpdateVersion == "v0.0.5");
221 QVERIFY(conf[3].files.length() == 1);
222
223 QVERIFY(conf[4].szVersion == "v0.0.5");
224 QVERIFY(conf[4].szMinUpdateVersion.isEmpty());
225 QVERIFY(conf[4].files.length() == 2);
226 QVERIFY(conf[4].files[0].szSystem == "windows");
227 QVERIFY(conf[4].files[0].szArchitecture == "x86");
228 QVERIFY(conf[4].files[0].urls.size() == 2);
229 QVERIFY(conf[4].files[1].szSystem == "ubuntu");
230 QVERIFY(conf[4].files[1].szArchitecture == "x86_64");
231 QVERIFY(conf[4].files[1].urls.size() == 2);
232}
233
234QTEST_MAIN(CUnitTests)
235/*
236int main(int argc, char* argv[])
237{
238 QApplication app(argc, argv);
239 CUnitTests obj;
240 // See: https://doc.qt.io/qt-6/qtest-overview.html#qt-test-command-line-arguments
241 return QTest::qExec(&obj, QStringList() << "UnitTests" << "-xml");
242}//*/
Updater.
Definition FrmUpdater.h:70
int CompareVersion(const QString &newVersion, const QString &currentVersion)
CFrmUpdater::CompareVersion.
int GetRedirectFromFile(const QString &szFile, QVector< CONFIG_REDIRECT > &conf)
Get redirect configure from file.
Download the same file from multiple URLs.
Definition Download.h:45
int Start(QVector< QUrl > urls, QString szFileName=QString(), bool bSequence=false)
Definition Download.cpp:19
void sigFinished(const QString szFile)