1/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
2package com.jcraft.jzlib
3
4import org.junit.runner.RunWith
5import org.junit.runners.JUnit4
6import org.junit.{Test, Before}
7import org.junit.Assert._
8import org.hamcrest.CoreMatchers._
9
10import java.io.{ByteArrayOutputStream => BAOS, ByteArrayInputStream => BAIS}
11
12import JZlib._
13
14@RunWith(classOf[JUnit4])
15class DeflaterInflaterStreamTest {
16
17  @Before
18  def setUp = {
19  }
20
21  @Test
22  def one_by_one = {
23    val data1 = randombuf(1024)
24    implicit val buf = new Array[Byte](1)
25
26    val baos = new BAOS
27    val gos = new DeflaterOutputStream(baos)
28    data1 -> gos
29    gos.close
30
31    val baos2 = new BAOS
32    new InflaterInputStream(new BAIS(baos.toByteArray)) -> baos2
33    val data2 = baos2.toByteArray
34
35    assertThat(data2.length, is(data1.length))
36    assertThat(data2, is(data1))
37  }
38
39  @Test
40  def read_write_with_buf = {
41
42    (1 to 100 by 3).foreach { i =>
43
44      implicit val buf = new Array[Byte](i)
45
46      val data1 = randombuf(10240)
47
48      val baos = new BAOS
49      val gos = new DeflaterOutputStream(baos)
50      data1 -> gos
51      gos.close
52
53      val baos2 = new BAOS
54      new InflaterInputStream(new BAIS(baos.toByteArray)) -> baos2
55      val data2 = baos2.toByteArray
56
57      assertThat(data2.length, is(data1.length))
58      assertThat(data2, is(data1))
59    }
60  }
61
62  @Test
63  def read_write_with_buf_nowrap = {
64
65    (1 to 100 by 3).foreach { i =>
66
67      implicit val buf = new Array[Byte](i)
68
69      val data1 = randombuf(10240)
70
71      val baos = new BAOS
72      val deflater = new Deflater(JZlib.Z_DEFAULT_COMPRESSION,
73                                 JZlib.DEF_WBITS,
74                                 true)
75      val gos = new DeflaterOutputStream(baos, deflater)
76      data1 -> gos
77      gos.close
78
79      val baos2 = new BAOS
80      val inflater = new Inflater(JZlib.DEF_WBITS, true)
81      new InflaterInputStream(new BAIS(baos.toByteArray), inflater) -> baos2
82      val data2 = baos2.toByteArray
83
84      assertThat(data2.length, is(data1.length))
85      assertThat(data2, is(data1))
86    }
87  }
88
89  @Test
90  def read_write_with_nowrap = {
91    implicit val buf = new Array[Byte](100)
92
93    List(randombuf(10240),
94         """{"color":2,"id":"EvLd4UG.CXjnk35o1e8LrYYQfHu0h.d*SqVJPoqmzXM::Ly::Snaps::Store::Commit"}""".getBytes) foreach { data1 =>
95
96      val deflater = new Deflater(JZlib.Z_DEFAULT_COMPRESSION,
97                                  JZlib.MAX_WBITS,
98                                  true)
99
100      val inflater = new Inflater(JZlib.MAX_WBITS, true)
101
102      val baos = new BAOS
103      val gos = new DeflaterOutputStream(baos, deflater)
104      data1 -> gos
105      gos.close
106
107      val baos2 = new BAOS
108      new InflaterInputStream(new BAIS(baos.toByteArray), inflater) -> baos2
109      val data2 = baos2.toByteArray
110
111      assertThat(data2.length, is(data1.length))
112      assertThat(data2, is(data1))
113    }
114  }
115}
116