[1050] | 1 | /*
|
---|
| 2 | Copyright (C) 2005-2014 Sergey A. Tachenov
|
---|
| 3 |
|
---|
| 4 | This file is part of QuaZIP test suite.
|
---|
| 5 |
|
---|
| 6 | QuaZIP is free software: you can redistribute it and/or modify
|
---|
| 7 | it under the terms of the GNU Lesser General Public License as published by
|
---|
| 8 | the Free Software Foundation, either version 2.1 of the License, or
|
---|
| 9 | (at your option) any later version.
|
---|
| 10 |
|
---|
| 11 | QuaZIP is distributed in the hope that it will be useful,
|
---|
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 14 | GNU Lesser General Public License for more details.
|
---|
| 15 |
|
---|
| 16 | You should have received a copy of the GNU Lesser General Public License
|
---|
| 17 | along with QuaZIP. If not, see <http://www.gnu.org/licenses/>.
|
---|
| 18 |
|
---|
| 19 | See COPYING file for the full LGPL text.
|
---|
| 20 |
|
---|
| 21 | Original ZIP package is copyrighted by Gilles Vollant and contributors,
|
---|
| 22 | see quazip/(un)zip.h files for details. Basically it's the zlib license.
|
---|
| 23 | */
|
---|
| 24 |
|
---|
| 25 | #include "testquaziodevice.h"
|
---|
| 26 | #include <quazip/quaziodevice.h>
|
---|
| 27 | #include <QBuffer>
|
---|
| 28 | #include <QByteArray>
|
---|
| 29 | #include <QtTest/QtTest>
|
---|
| 30 |
|
---|
| 31 | void TestQuaZIODevice::read()
|
---|
| 32 | {
|
---|
| 33 | QByteArray buf(256, 0);
|
---|
| 34 | z_stream zouts;
|
---|
| 35 | zouts.zalloc = (alloc_func) NULL;
|
---|
| 36 | zouts.zfree = (free_func) NULL;
|
---|
| 37 | zouts.opaque = NULL;
|
---|
| 38 | deflateInit(&zouts, Z_DEFAULT_COMPRESSION);
|
---|
| 39 | zouts.next_in = reinterpret_cast<Bytef*>(const_cast<char*>("test"));
|
---|
| 40 | zouts.avail_in = 4;
|
---|
| 41 | zouts.next_out = reinterpret_cast<Bytef*>(buf.data());
|
---|
| 42 | zouts.avail_out = buf.size();
|
---|
| 43 | deflate(&zouts, Z_FINISH);
|
---|
| 44 | deflateEnd(&zouts);
|
---|
| 45 | QBuffer testBuffer(&buf);
|
---|
| 46 | testBuffer.open(QIODevice::ReadOnly);
|
---|
| 47 | QuaZIODevice testDevice(&testBuffer);
|
---|
| 48 | QVERIFY(testDevice.open(QIODevice::ReadOnly));
|
---|
| 49 | char outBuf[5];
|
---|
| 50 | QCOMPARE(testDevice.read(outBuf, 5), static_cast<qint64>(4));
|
---|
| 51 | testDevice.close();
|
---|
| 52 | QVERIFY(!testDevice.isOpen());
|
---|
| 53 | }
|
---|
| 54 |
|
---|
| 55 | void TestQuaZIODevice::readMany()
|
---|
| 56 | {
|
---|
| 57 | QByteArray buf(256, 0);
|
---|
| 58 | z_stream zouts;
|
---|
| 59 | zouts.zalloc = (alloc_func) NULL;
|
---|
| 60 | zouts.zfree = (free_func) NULL;
|
---|
| 61 | zouts.opaque = NULL;
|
---|
| 62 | deflateInit(&zouts, Z_DEFAULT_COMPRESSION);
|
---|
| 63 | zouts.next_in = reinterpret_cast<Bytef*>(const_cast<char*>("testtest"));
|
---|
| 64 | zouts.avail_in = 8;
|
---|
| 65 | zouts.next_out = reinterpret_cast<Bytef*>(buf.data());
|
---|
| 66 | zouts.avail_out = buf.size();
|
---|
| 67 | deflate(&zouts, Z_FINISH);
|
---|
| 68 | deflateEnd(&zouts);
|
---|
| 69 | QBuffer testBuffer(&buf);
|
---|
| 70 | testBuffer.open(QIODevice::ReadOnly);
|
---|
| 71 | QuaZIODevice testDevice(&testBuffer);
|
---|
| 72 | QVERIFY(testDevice.open(QIODevice::ReadOnly));
|
---|
| 73 | char outBuf[4];
|
---|
| 74 | QCOMPARE(testDevice.read(outBuf, 4), static_cast<qint64>(4));
|
---|
| 75 | QVERIFY(!testDevice.atEnd());
|
---|
| 76 | QVERIFY(testDevice.bytesAvailable() > 0);
|
---|
| 77 | QCOMPARE(testDevice.read(4).size(), 4);
|
---|
| 78 | QCOMPARE(testDevice.bytesAvailable(), static_cast<qint64>(0));
|
---|
| 79 | QVERIFY(testDevice.atEnd());
|
---|
| 80 | testDevice.close();
|
---|
| 81 | QVERIFY(!testDevice.isOpen());
|
---|
| 82 | }
|
---|
| 83 |
|
---|
| 84 | void TestQuaZIODevice::write()
|
---|
| 85 | {
|
---|
| 86 | QByteArray buf(256, 0);
|
---|
| 87 | QBuffer testBuffer(&buf);
|
---|
| 88 | testBuffer.open(QIODevice::WriteOnly);
|
---|
| 89 | QuaZIODevice *testDevice = new QuaZIODevice(&testBuffer);
|
---|
| 90 | QCOMPARE(testDevice->getIoDevice(), &testBuffer);
|
---|
| 91 | QVERIFY(testDevice->open(QIODevice::WriteOnly));
|
---|
| 92 | QCOMPARE(testDevice->write("test", 4), static_cast<qint64>(4));
|
---|
| 93 | testDevice->close();
|
---|
| 94 | QVERIFY(!testDevice->isOpen());
|
---|
| 95 | z_stream zins;
|
---|
| 96 | zins.zalloc = (alloc_func) NULL;
|
---|
| 97 | zins.zfree = (free_func) NULL;
|
---|
| 98 | zins.opaque = NULL;
|
---|
| 99 | inflateInit(&zins);
|
---|
| 100 | zins.next_in = reinterpret_cast<Bytef*>(buf.data());
|
---|
| 101 | zins.avail_in = testBuffer.pos();
|
---|
| 102 | char outBuf[5];
|
---|
| 103 | zins.next_out = reinterpret_cast<Bytef*>(outBuf);
|
---|
| 104 | zins.avail_out = 5;
|
---|
| 105 | inflate(&zins, Z_FINISH);
|
---|
| 106 | inflateEnd(&zins);
|
---|
| 107 | int size = 5 - zins.avail_out;
|
---|
| 108 | QCOMPARE(size, 4);
|
---|
| 109 | outBuf[4] = '\0';
|
---|
| 110 | QCOMPARE(static_cast<const char*>(outBuf), "test");
|
---|
| 111 | delete testDevice; // Test D0 destructor
|
---|
| 112 | }
|
---|