• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #if defined(USE_SYSTEM_LIBBZ2)
6 #include <bzlib.h>
7 #else
8 #include "third_party/bzip2/bzlib.h"
9 #endif
10 
11 #include "base/basictypes.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 
14 namespace {
15   class Bzip2Test : public testing::Test {
16   };
17 };
18 
19 // This test does a simple round trip to test that the bzip2 library is
20 // present and working.
TEST(Bzip2Test,Roundtrip)21 TEST(Bzip2Test, Roundtrip) {
22   char input[] = "Test Data, More Test Data, Even More Data of Test";
23   char output[256];
24 
25   memset(output, 0, arraysize(output));
26 
27   bz_stream stream;
28   stream.bzalloc = NULL;
29   stream.bzfree = NULL;
30   stream.opaque = NULL;
31   int result = BZ2_bzCompressInit(&stream,
32                                   9,   // 900k block size
33                                   0,   // quiet
34                                   0);  // default work factor
35   ASSERT_EQ(BZ_OK, result);
36 
37   stream.next_in = input;
38   stream.avail_in = arraysize(input) - 1;
39   stream.next_out = output;
40   stream.avail_out = arraysize(output);
41   do {
42     result = BZ2_bzCompress(&stream, BZ_FINISH);
43   } while (result == BZ_FINISH_OK);
44   ASSERT_EQ(BZ_STREAM_END, result);
45   result = BZ2_bzCompressEnd(&stream);
46   ASSERT_EQ(BZ_OK, result);
47   int written = stream.total_out_lo32;
48 
49   // Make sure we wrote something; otherwise not sure what to expect
50   ASSERT_GT(written, 0);
51 
52   // Now decompress and check that we got the same thing.
53   result = BZ2_bzDecompressInit(&stream, 0, 0);
54   ASSERT_EQ(BZ_OK, result);
55   char output2[256];
56   memset(output2, 0, arraysize(output2));
57 
58   stream.next_in = output;
59   stream.avail_in = written;
60   stream.next_out = output2;
61   stream.avail_out = arraysize(output2);
62 
63   do {
64     result = BZ2_bzDecompress(&stream);
65   } while (result == BZ_OK);
66   ASSERT_EQ(result, BZ_STREAM_END);
67   result = BZ2_bzDecompressEnd(&stream);
68   ASSERT_EQ(result, BZ_OK);
69 
70   EXPECT_EQ(arraysize(input) - 1, stream.total_out_lo32);
71   EXPECT_STREQ(input, output2);
72 }
73