| // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #if defined(USE_SYSTEM_LIBBZ2) |
| #include <bzlib.h> |
| #else |
| #include "third_party/bzip2/bzlib.h" |
| #endif |
| |
| #include "base/basictypes.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace { |
| class Bzip2Test : public testing::Test { |
| }; |
| }; |
| |
| // This test does a simple round trip to test that the bzip2 library is |
| // present and working. |
| TEST(Bzip2Test, Roundtrip) { |
| char input[] = "Test Data, More Test Data, Even More Data of Test"; |
| char output[256]; |
| |
| memset(output, 0, arraysize(output)); |
| |
| bz_stream stream; |
| stream.bzalloc = NULL; |
| stream.bzfree = NULL; |
| stream.opaque = NULL; |
| int result = BZ2_bzCompressInit(&stream, |
| 9, // 900k block size |
| 0, // quiet |
| 0); // default work factor |
| ASSERT_EQ(BZ_OK, result); |
| |
| stream.next_in = input; |
| stream.avail_in = arraysize(input) - 1; |
| stream.next_out = output; |
| stream.avail_out = arraysize(output); |
| do { |
| result = BZ2_bzCompress(&stream, BZ_FINISH); |
| } while (result == BZ_FINISH_OK); |
| ASSERT_EQ(BZ_STREAM_END, result); |
| result = BZ2_bzCompressEnd(&stream); |
| ASSERT_EQ(BZ_OK, result); |
| int written = stream.total_out_lo32; |
| |
| // Make sure we wrote something; otherwise not sure what to expect |
| ASSERT_GT(written, 0); |
| |
| // Now decompress and check that we got the same thing. |
| result = BZ2_bzDecompressInit(&stream, 0, 0); |
| ASSERT_EQ(BZ_OK, result); |
| char output2[256]; |
| memset(output2, 0, arraysize(output2)); |
| |
| stream.next_in = output; |
| stream.avail_in = written; |
| stream.next_out = output2; |
| stream.avail_out = arraysize(output2); |
| |
| do { |
| result = BZ2_bzDecompress(&stream); |
| } while (result == BZ_OK); |
| ASSERT_EQ(result, BZ_STREAM_END); |
| result = BZ2_bzDecompressEnd(&stream); |
| ASSERT_EQ(result, BZ_OK); |
| |
| EXPECT_EQ(arraysize(input) - 1, stream.total_out_lo32); |
| EXPECT_STREQ(input, output2); |
| } |