// 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);
}