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