/* Copyright 2015 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.dec; import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * Tests for {@link BitReader}. */ @RunWith(JUnit4.class) public class BitReaderTest { @Test public void testReadAfterEos() { State reader = new State(); Decode.initState(reader, new ByteArrayInputStream(new byte[1])); BitReader.readBits(reader, 9); try { BitReader.checkHealth(reader, 0); } catch (BrotliRuntimeException ex) { // This exception is expected. return; } fail("BrotliRuntimeException should have been thrown by BitReader.checkHealth"); } @Test public void testAccumulatorUnderflowDetected() { State reader = new State(); Decode.initState(reader, new ByteArrayInputStream(new byte[8])); // 65 bits is enough for both 32 and 64 bit systems. BitReader.readBits(reader, 13); BitReader.readBits(reader, 13); BitReader.readBits(reader, 13); BitReader.readBits(reader, 13); BitReader.readBits(reader, 13); try { BitReader.fillBitWindow(reader); } catch (IllegalStateException ex) { // This exception is expected. return; } fail("IllegalStateException should have been thrown by 'broken' BitReader"); } }