| /* Copyright 2017 Google Inc. All Rights Reserved. |
| |
| Distributed under MIT license. |
| See file LICENSE for detail or copy at https://opensource.org/licenses/MIT |
| */ |
| |
| package org.brotli.wrapper.dec; |
| |
| import static org.junit.Assert.assertEquals; |
| |
| import org.brotli.integration.BrotliJniTestBase; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| /** Tests for {@link org.brotli.wrapper.dec.BrotliInputStream}. */ |
| @RunWith(JUnit4.class) |
| public class EagerStreamTest extends BrotliJniTestBase { |
| |
| @Test |
| public void testEagerReading() throws IOException { |
| final StringBuilder log = new StringBuilder(); |
| final byte[] data = {0, 0, 16, 42, 3}; |
| InputStream source = new InputStream() { |
| int index; |
| |
| @Override |
| public int read() { |
| if (index < data.length) { |
| log.append("<").append(index); |
| return data[index++]; |
| } else { |
| log.append("<#"); |
| return -1; |
| } |
| } |
| |
| @Override |
| public int read(byte[] b) throws IOException { |
| return read(b, 0, b.length); |
| } |
| |
| @Override |
| public int read(byte[] b, int off, int len) throws IOException { |
| if (len < 1) { |
| return 0; |
| } |
| int d = read(); |
| if (d == -1) { |
| return 0; |
| } |
| b[off] = (byte) d; |
| return 1; |
| } |
| }; |
| BrotliInputStream reader = new BrotliInputStream(source); |
| reader.enableEagerOutput(); |
| int count = 0; |
| while (true) { |
| log.append("^").append(count); |
| int b = reader.read(); |
| if (b == -1) { |
| log.append(">#"); |
| break; |
| } else { |
| log.append(">").append(count++); |
| } |
| } |
| // Lazy log: ^0<0<1<2<3<4>0^1># |
| assertEquals("^0<0<1<2<3>0^1<4>#", log.toString()); |
| } |
| |
| } |