コード例 #1
0
  @Test
  public void testSetsFrameLocalColorTableIfHasColorTable() {
    final int lzwMinCodeSize = 2;
    final int numColors = 4;
    ByteBuffer buffer =
        ByteBuffer.allocate(
                GifBytesTestUtil.HEADER_LENGTH
                    + GifBytesTestUtil.IMAGE_DESCRIPTOR_LENGTH
                    + GifBytesTestUtil.getImageDataSize(lzwMinCodeSize)
                    + GifBytesTestUtil.getColorTableLength(numColors))
            .order(ByteOrder.LITTLE_ENDIAN);
    GifBytesTestUtil.writeHeaderAndLsd(buffer, 1, 1, false, 0);
    GifBytesTestUtil.writeImageDescriptor(buffer, 0, 0, 1, 1, true /*hasLct*/, numColors);
    GifBytesTestUtil.writeColorTable(buffer, numColors);
    GifBytesTestUtil.writeFakeImageData(buffer, 2);

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    assertEquals(1, header.width);
    assertEquals(1, header.height);
    assertEquals(1, header.frameCount);
    assertNotNull(header.frames.get(0));

    GifFrame frame = header.frames.get(0);
    assertNotNull(frame.lct);
  }
コード例 #2
0
 @Test
 public void testCanParseHeaderOfTestImageWithoutGraphicalExtension() throws IOException {
   byte[] data =
       TestUtil.resourceToBytes(getClass(), "gif_without_graphical_control_extension.gif");
   parser.setData(data);
   GifHeader header = parser.parseHeader();
   assertEquals(1, header.frameCount);
   assertNotNull(header.frames.get(0));
   assertEquals(GifDecoder.STATUS_OK, header.status);
 }
コード例 #3
0
  @Test
  public void testSetsDefaultFrameDelayIfFrameDelayIsZero() {
    ByteBuffer buffer = writeHeaderWithGceAndFrameDelay((short) 0);

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    GifFrame frame = header.frames.get(0);

    // Convert delay in 100ths of a second to ms.
    assertEquals(GifHeaderParser.DEFAULT_FRAME_DELAY * 10, frame.delay);
  }
コード例 #4
0
  @Test
  public void testObeysFrameDelayIfFrameDelayIsAtMinimum() {
    final short frameDelay = GifHeaderParser.MIN_FRAME_DELAY;
    ByteBuffer buffer = writeHeaderWithGceAndFrameDelay(frameDelay);

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    GifFrame frame = header.frames.get(0);

    // Convert delay in 100ths of a second to ms.
    assertEquals(frameDelay * 10, frame.delay);
  }
コード例 #5
0
  @Test
  public void testCanParseFrameDelay() {
    final short frameDelay = 50;
    ByteBuffer buffer = writeHeaderWithGceAndFrameDelay(frameDelay);

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    GifFrame frame = header.frames.get(0);

    // Convert delay in 100ths of a second to ms.
    assertEquals(frameDelay * 10, frame.delay);
  }
コード例 #6
0
  @Test
  public void testCanReadValidHeaderAndLSD() {
    final int width = 10;
    final int height = 20;
    ByteBuffer buffer =
        ByteBuffer.allocate(GifBytesTestUtil.HEADER_LENGTH).order(ByteOrder.LITTLE_ENDIAN);
    GifBytesTestUtil.writeHeaderAndLsd(buffer, width, height, false, 0);

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    assertEquals(width, header.width);
    assertEquals(height, header.height);
    assertFalse(header.gctFlag);
    // 2^(1+0) == 2^1 == 2.
    assertEquals(2, header.gctSize);
    assertEquals(0, header.bgIndex);
    assertEquals(0, header.pixelAspect);
  }
コード例 #7
0
  @Test
  public void testCanReadImageDescriptorWithoutGraphicalExtension() {
    final int lzwMinCodeSize = 2;
    ByteBuffer buffer =
        ByteBuffer.allocate(
                GifBytesTestUtil.HEADER_LENGTH
                    + GifBytesTestUtil.IMAGE_DESCRIPTOR_LENGTH
                    + GifBytesTestUtil.getImageDataSize(lzwMinCodeSize))
            .order(ByteOrder.LITTLE_ENDIAN);
    GifBytesTestUtil.writeHeaderAndLsd(buffer, 1, 1, false, 0);
    GifBytesTestUtil.writeImageDescriptor(buffer, 0, 0, 1, 1, false /*hasLct*/, 0);
    GifBytesTestUtil.writeFakeImageData(buffer, lzwMinCodeSize);

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    assertEquals(1, header.width);
    assertEquals(1, header.height);
    assertEquals(1, header.frameCount);
    assertNotNull(header.frames.get(0));
  }
コード例 #8
0
  @Test
  public void testCanParseMultipleFrames() {
    final int lzwMinCodeSize = 2;
    final int expectedFrames = 3;

    final int frameSize =
        GifBytesTestUtil.IMAGE_DESCRIPTOR_LENGTH
            + GifBytesTestUtil.getImageDataSize(lzwMinCodeSize);
    ByteBuffer buffer =
        ByteBuffer.allocate(GifBytesTestUtil.HEADER_LENGTH + expectedFrames * frameSize)
            .order(ByteOrder.LITTLE_ENDIAN);

    GifBytesTestUtil.writeHeaderAndLsd(buffer, 1, 1, false, 0);
    for (int i = 0; i < expectedFrames; i++) {
      GifBytesTestUtil.writeImageDescriptor(buffer, 0, 0, 1, 1, false /*hasLct*/, 0 /*numColors*/);
      GifBytesTestUtil.writeFakeImageData(buffer, 2);
    }

    parser.setData(buffer.array());
    GifHeader header = parser.parseHeader();
    assertEquals(expectedFrames, header.frameCount);
    assertEquals(expectedFrames, header.frames.size());
  }
コード例 #9
0
 @Test
 public void testReturnsHeaderWithFormatErrorIfDoesNotStartWithGifHeader() {
   parser.setData("wrong_header".getBytes());
   GifHeader result = parser.parseHeader();
   assertEquals(GifDecoder.STATUS_FORMAT_ERROR, result.status);
 }
コード例 #10
0
 @Test(expected = IllegalStateException.class)
 public void testThrowsIfParseHeaderCalledBeforeSetData() {
   GifHeaderParser parser = new GifHeaderParser();
   parser.parseHeader();
 }