summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorljfa-ag <ljfa-ag@web.de>2015-09-20 20:09:07 +0200
committerljfa-ag <ljfa-ag@web.de>2015-09-20 20:09:07 +0200
commitfb7e662774e3f2be268605457a36e1d78e2d1ec7 (patch)
tree45cf721bcf74880e599584a3d2f73ac2f2d449a4 /test
parent8de25170806ebc2e72d037f9bd81c193c9f13138 (diff)
parent70309e97831b2e3be48eee83356e5e9241b317b0 (diff)
downloadProject-Tick-fb7e662774e3f2be268605457a36e1d78e2d1ec7.tar.gz
Project-Tick-fb7e662774e3f2be268605457a36e1d78e2d1ec7.zip
Merge branch 'zlibstream'
Diffstat (limited to 'test')
-rw-r--r--test/zlibstream_test.h116
1 files changed, 99 insertions, 17 deletions
diff --git a/test/zlibstream_test.h b/test/zlibstream_test.h
index 8e9ca6b0f2..754f4e5d58 100644
--- a/test/zlibstream_test.h
+++ b/test/zlibstream_test.h
@@ -29,14 +29,16 @@ using namespace zlib;
class zlibstream_test : public CxxTest::TestSuite
{
private:
- std::stringbuf bigtest;
+ std::string bigtest;
public:
zlibstream_test()
{
std::ifstream bigtest_f("bigtest_uncompr", std::ios::binary);
- bigtest_f >> &bigtest;
- if(!bigtest_f || bigtest.str().size() == 0)
+ std::stringbuf bigtest_b;
+ bigtest_f >> &bigtest_b;
+ bigtest = bigtest_b.str();
+ if(!bigtest_f || bigtest.size() == 0)
throw std::runtime_error("Could not read bigtest_uncompr file");
}
@@ -49,13 +51,13 @@ public:
//Small buffer so not all fits at once (the compressed file is 561 bytes)
{
izlibstream igzs(gzip_in, 256);
- igzs.exceptions(std::ios::failbit);
+ igzs.exceptions(std::ios::failbit | std::ios::badbit);
TS_ASSERT(igzs.good());
TS_ASSERT_THROWS_NOTHING(igzs >> &data);
TS_ASSERT(igzs);
TS_ASSERT(igzs.eof());
- TS_ASSERT_EQUALS(data.str(), bigtest.str());
+ TS_ASSERT_EQUALS(data.str(), bigtest);
}
//Clear and reuse buffers
@@ -65,13 +67,13 @@ public:
//Now try the same with larger buffer (but not large enough for all output, uncompressed size 1561 bytes)
{
izlibstream igzs(gzip_in, 1000);
- igzs.exceptions(std::ios::failbit);
+ igzs.exceptions(std::ios::failbit | std::ios::badbit);
TS_ASSERT(igzs.good());
TS_ASSERT_THROWS_NOTHING(igzs >> &data);
TS_ASSERT(igzs);
TS_ASSERT(igzs.eof());
- TS_ASSERT_EQUALS(data.str(), bigtest.str());
+ TS_ASSERT_EQUALS(data.str(), bigtest);
}
data.str("");
@@ -80,13 +82,13 @@ public:
//Now with large buffer
{
izlibstream igzs(gzip_in, 4000);
- igzs.exceptions(std::ios::failbit);
+ igzs.exceptions(std::ios::failbit | std::ios::badbit);
TS_ASSERT(igzs.good());
TS_ASSERT_THROWS_NOTHING(igzs >> &data);
TS_ASSERT(igzs);
TS_ASSERT(igzs.eof());
- TS_ASSERT_EQUALS(data.str(), bigtest.str());
+ TS_ASSERT_EQUALS(data.str(), bigtest);
}
}
@@ -97,13 +99,13 @@ public:
std::stringbuf data;
izlibstream izls(zlib_in, 256);
- izls.exceptions(std::ios::failbit);
+ izls.exceptions(std::ios::failbit | std::ios::badbit);
TS_ASSERT(izls.good());
TS_ASSERT_THROWS_NOTHING(izls >> &data);
TS_ASSERT(izls);
TS_ASSERT(izls.eof());
- TS_ASSERT_EQUALS(data.str(), bigtest.str());
+ TS_ASSERT_EQUALS(data.str(), bigtest);
}
void test_inflate_corrupt()
@@ -111,22 +113,102 @@ public:
std::ifstream gzip_in("bigtest_corrupt.nbt", std::ios::binary);
TS_ASSERT(gzip_in);
- std::stringbuf data;
+ std::vector<char> buf(bigtest.size());
{
izlibstream igzs(gzip_in);
- igzs.exceptions(std::ios::failbit);
- TS_ASSERT_THROWS(igzs >> &data, zlib_error);
+ igzs.exceptions(std::ios::failbit | std::ios::badbit);
+ TS_ASSERT_THROWS(igzs.read(buf.data(), buf.size()), zlib_error);
+ TS_ASSERT(igzs.bad());
}
gzip_in.close();
+ gzip_in.clear();
gzip_in.open("bigtest_eof.nbt", std::ios::binary);
TS_ASSERT(gzip_in);
- data.str("");
{
izlibstream igzs(gzip_in);
- igzs.exceptions(std::ios::failbit);
- TS_ASSERT_THROWS(igzs >> &data, zlib_error);
+ igzs.exceptions(std::ios::failbit | std::ios::badbit);
+ TS_ASSERT_THROWS(igzs.read(buf.data(), buf.size()), zlib_error);
+ TS_ASSERT(igzs.bad());
+ }
+ }
+
+ void test_deflate_zlib()
+ {
+ //Here we assume that inflating works and has already been tested
+ std::stringstream str;
+ std::stringbuf output;
+ //Small buffer
+ {
+ ozlibstream ozls(str, -1, false, 256);
+ ozls.exceptions(std::ios::failbit | std::ios::badbit);
+ ozls << bigtest;
+ TS_ASSERT(ozls.good());
+ }
+ TS_ASSERT(str.good());
+ {
+ izlibstream izls(str);
+ TS_ASSERT_THROWS_NOTHING(izls >> &output);
+ TS_ASSERT(izls);
+ }
+ TS_ASSERT_EQUALS(output.str(), bigtest);
+
+ str.clear(); str.str("");
+ output.str("");
+ //Medium sized buffer
+ //Write first half, then flush and write second half
+ {
+ ozlibstream ozls(str, 9, false, 512);
+ ozls.exceptions(std::ios::failbit | std::ios::badbit);
+
+ std::string half1 = bigtest.substr(0, bigtest.size()/2);
+ std::string half2 = bigtest.substr(bigtest.size()/2);
+ TS_ASSERT_THROWS_NOTHING(ozls << half1 << std::flush << half2);
+ TS_ASSERT(ozls.good());
+ }
+ TS_ASSERT(str.good());
+ {
+ izlibstream izls(str);
+ izls >> &output;
+ TS_ASSERT(izls);
+ }
+ TS_ASSERT_EQUALS(output.str(), bigtest);
+
+ str.clear(); str.str("");
+ output.str("");
+ //Large buffer
+ {
+ ozlibstream ozls(str, 1, false, 4000);
+ ozls.exceptions(std::ios::failbit | std::ios::badbit);
+ TS_ASSERT_THROWS_NOTHING(ozls << bigtest);
+ TS_ASSERT(ozls.good());
+ }
+ TS_ASSERT(str.good());
+ {
+ izlibstream izls(str);
+ izls >> &output;
+ TS_ASSERT(izls);
+ }
+ TS_ASSERT_EQUALS(output.str(), bigtest);
+ }
+
+ void test_deflate_gzip()
+ {
+ std::stringstream str;
+ std::stringbuf output;
+ {
+ ozlibstream ozls(str, -1, true);
+ ozls.exceptions(std::ios::failbit | std::ios::badbit);
+ TS_ASSERT_THROWS_NOTHING(ozls << bigtest);
+ TS_ASSERT(ozls.good());
+ }
+ TS_ASSERT(str.good());
+ {
+ izlibstream izls(str);
+ izls >> &output;
+ TS_ASSERT(izls);
}
+ TS_ASSERT_EQUALS(output.str(), bigtest);
}
};