source: Vago/quazip-0.7.2/qztest/qztest.cpp@ 1049

Last change on this file since 1049 was 1049, checked in by s10k, 8 years ago
File size: 7.7 KB
Line 
1/*
2Copyright (C) 2005-2014 Sergey A. Tachenov
3
4This file is part of QuaZIP test suite.
5
6QuaZIP is free software: you can redistribute it and/or modify
7it under the terms of the GNU Lesser General Public License as published by
8the Free Software Foundation, either version 2.1 of the License, or
9(at your option) any later version.
10
11QuaZIP is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU Lesser General Public License for more details.
15
16You should have received a copy of the GNU Lesser General Public License
17along with QuaZIP. If not, see <http://www.gnu.org/licenses/>.
18
19See COPYING file for the full LGPL text.
20
21Original ZIP package is copyrighted by Gilles Vollant and contributors,
22see quazip/(un)zip.h files for details. Basically it's the zlib license.
23*/
24
25#include "qztest.h"
26#include "testquazip.h"
27#include "testquazipfile.h"
28#include "testquachecksum32.h"
29#include "testjlcompress.h"
30#include "testquazipdir.h"
31#include "testquagzipfile.h"
32#include "testquaziodevice.h"
33#include "testquazipnewinfo.h"
34#include "testquazipfileinfo.h"
35
36#include <quazip/quazip.h>
37#include <quazip/quazipfile.h>
38
39#include <QCoreApplication>
40#include <QDir>
41#include <QFileInfo>
42#include <QTextStream>
43
44#include <QtTest/QtTest>
45
46bool createTestFiles(const QStringList &fileNames, const QString &dir)
47{
48 QDir curDir;
49 foreach (QString fileName, fileNames) {
50 QString filePath = QDir(dir).filePath(fileName);
51 QDir testDir = QFileInfo(filePath).dir();
52 if (!testDir.exists()) {
53 if (!curDir.mkpath(testDir.path())) {
54 qWarning("Couldn't mkpath %s",
55 testDir.path().toUtf8().constData());
56 return false;
57 }
58 }
59 if (fileName.endsWith('/')) {
60 if (!curDir.mkpath(filePath)) {
61 qWarning("Couldn't mkpath %s",
62 fileName.toUtf8().constData());
63 return false;
64 }
65 } else {
66 QFile testFile(filePath);
67 if (!testFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
68 qWarning("Couldn't create %s",
69 fileName.toUtf8().constData());
70 return false;
71 }
72 QTextStream testStream(&testFile);
73 testStream << "This is a test file named " << fileName << endl;
74 }
75 }
76 return true;
77}
78
79bool createTestArchive(QuaZip &zip, const QString &zipName,
80 const QStringList &fileNames,
81 QTextCodec *codec,
82 const QString &dir)
83{
84 if (codec != NULL) {
85 zip.setFileNameCodec(codec);
86 }
87 if (!zip.open(QuaZip::mdCreate)) {
88 qWarning("Couldn't open %s", zipName.toUtf8().constData());
89 return false;
90 }
91 int i = 0;
92 QDateTime dt1;
93 foreach (QString fileName, fileNames) {
94 QuaZipFile zipFile(&zip);
95 QString filePath = QDir(dir).filePath(fileName);
96 QFileInfo fileInfo(filePath);
97 QuaZipNewInfo newInfo(fileName, filePath);
98 if (i == 0) // to test code that needs different timestamps
99 newInfo.dateTime = newInfo.dateTime.addSecs(-60);
100 else if (i == 1) // will use for the next file too
101 dt1 = newInfo.dateTime;
102 else if (i == 2) // to test identical timestamps
103 newInfo.dateTime = dt1;
104 if (!zipFile.open(QIODevice::WriteOnly,
105 newInfo, NULL, 0,
106 fileInfo.isDir() ? 0 : 8)) {
107 qWarning("Couldn't open %s in %s", fileName.toUtf8()
108 .constData(), zipName.toUtf8().constData());
109 return false;
110 }
111 if (!fileInfo.isDir()) {
112 QFile file(filePath);
113 if (!file.open(QIODevice::ReadOnly)) {
114 qWarning("Couldn't open %s", filePath.toUtf8()
115 .constData());
116 return false;
117 }
118 while (!file.atEnd()) {
119 char buf[4096];
120 qint64 l = file.read(buf, 4096);
121 if (l <= 0) {
122 qWarning("Couldn't read %s", filePath.toUtf8()
123 .constData());
124 return false;
125 }
126 if (zipFile.write(buf, l) != l) {
127 qWarning("Couldn't write to %s in %s",
128 filePath.toUtf8().constData(),
129 zipName.toUtf8().constData());
130 return false;
131 }
132 }
133 file.close();
134 }
135 zipFile.close();
136 ++i;
137 }
138 zip.setComment(QString("This is the test archive"));
139 zip.close();
140 if (zipName.startsWith("<")) { // something like "<QIODevice pointer>"
141 return true;
142 } else {
143 return QFileInfo(zipName).exists();
144 }
145}
146
147bool createTestArchive(const QString &zipName,
148 const QStringList &fileNames,
149 const QString &dir) {
150 return createTestArchive(zipName, fileNames, NULL, dir);
151}
152
153bool createTestArchive(QIODevice *ioDevice,
154 const QStringList &fileNames,
155 QTextCodec *codec,
156 const QString &dir)
157{
158 QuaZip zip(ioDevice);
159 return createTestArchive(zip, "<QIODevice pointer>", fileNames, codec, dir);
160}
161
162bool createTestArchive(const QString &zipName,
163 const QStringList &fileNames,
164 QTextCodec *codec,
165 const QString &dir) {
166 QuaZip zip(zipName);
167 return createTestArchive(zip, zipName, fileNames, codec, dir);
168}
169
170void removeTestFiles(const QStringList &fileNames, const QString &dir)
171{
172 QDir curDir;
173 foreach (QString fileName, fileNames) {
174 curDir.remove(QDir(dir).filePath(fileName));
175 }
176 foreach (QString fileName, fileNames) {
177 QDir fileDir = QFileInfo(QDir(dir).filePath(fileName)).dir();
178 if (fileDir.exists()) {
179 // Non-empty dirs won't get removed, and that's good.
180 curDir.rmpath(fileDir.path());
181 }
182 }
183}
184
185int main(int argc, char **argv)
186{
187 QCoreApplication app(argc, argv);
188 int err = 0;
189 {
190 TestQuaZip testQuaZip;
191 err = qMax(err, QTest::qExec(&testQuaZip, app.arguments()));
192 }
193 {
194 TestQuaZipFile testQuaZipFile;
195 err = qMax(err, QTest::qExec(&testQuaZipFile, app.arguments()));
196 }
197 {
198 TestQuaChecksum32 testQuaChecksum32;
199 err = qMax(err, QTest::qExec(&testQuaChecksum32, app.arguments()));
200 }
201 {
202 TestJlCompress testJlCompress;
203 err = qMax(err, QTest::qExec(&testJlCompress, app.arguments()));
204 }
205 {
206 TestQuaZipDir testQuaZipDir;
207 err = qMax(err, QTest::qExec(&testQuaZipDir, app.arguments()));
208 }
209 {
210 TestQuaZIODevice testQuaZIODevice;
211 err = qMax(err, QTest::qExec(&testQuaZIODevice, app.arguments()));
212 }
213 {
214 TestQuaGzipFile testQuaGzipFile;
215 err = qMax(err, QTest::qExec(&testQuaGzipFile, app.arguments()));
216 }
217 {
218 TestQuaZipNewInfo testQuaZipNewInfo;
219 err = qMax(err, QTest::qExec(&testQuaZipNewInfo, app.arguments()));
220 }
221 {
222 TestQuaZipFileInfo testQuaZipFileInfo;
223 err = qMax(err, QTest::qExec(&testQuaZipFileInfo, app.arguments()));
224 }
225 if (err == 0) {
226 qDebug("All tests executed successfully");
227 } else {
228 qWarning("There were errors in some of the tests above.");
229 }
230 return err;
231}
Note: See TracBrowser for help on using the repository browser.