add test for one-shot encoding/decoding with offset

PiperOrigin-RevId: 594414276
diff --git a/java/org/brotli/wrapper/dec/CornerCasesTest.java b/java/org/brotli/wrapper/dec/CornerCasesTest.java
index ab02f23..796ed8d 100644
--- a/java/org/brotli/wrapper/dec/CornerCasesTest.java
+++ b/java/org/brotli/wrapper/dec/CornerCasesTest.java
@@ -6,11 +6,11 @@
 
 package org.brotli.wrapper.dec;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertArrayEquals;
 
+import java.io.IOException;
 import org.brotli.integration.BrotliJniTestBase;
 import org.brotli.wrapper.enc.Encoder;
-import java.io.IOException;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -18,16 +18,48 @@
 /** Tests for {@link org.brotli.wrapper.enc.Encoder}. */
 @RunWith(JUnit4.class)
 public class CornerCasesTest extends BrotliJniTestBase {
+
+  private static byte[] makeInput(int len) {
+    byte[] dst = new byte[len];
+    for (int i = 0; i < len; ++i) {
+      dst[i] = (byte) Integer.bitCount(i);
+    }
+    return dst;
+  }
+
+  private static byte[] embedChunk(byte[] src, int offset, int padding) {
+    int len = src.length;
+    byte[] dst = new byte[offset + len + padding];
+    // TODO(eustas): fill with garbage?
+    System.arraycopy(src, 0, dst, offset, len);
+    return dst;
+  }
+
   @Test
   public void testPowerOfTwoInput() throws IOException {
     // 24 == max window bits to ensure ring-buffer size is not greater than input.
     int len = 1 << 24;
-    byte[] data = new byte[len];
-    for (int i = 0; i < len; ++i) {
-      data[i] = (byte) Integer.bitCount(i);
-    }
+    byte[] data = makeInput(len);
     byte[] encoded = Encoder.compress(data);
     byte[] decoded = Decoder.decompress(encoded);
-    assertEquals(len, decoded.length);
+    assertArrayEquals(data, decoded);
+  }
+
+  @Test
+  public void testInputOffset() throws IOException {
+    int inputLength = 19;
+    int inputOffset = 4;
+    int inputPadding = 7;
+    byte[] data = makeInput(inputLength);
+    byte[] input = embedChunk(data, inputOffset, inputPadding);
+    byte[] encoded = Encoder.compress(input, inputOffset, inputLength);
+
+    int outputLength = encoded.length;
+    int outputOffset = 9;
+    int outputPadding = 5;
+    byte[] output = embedChunk(encoded, outputOffset, outputPadding);
+    byte[] decoded = Decoder.decompress(output, outputOffset, outputLength);
+
+    assertArrayEquals(data, decoded);
   }
 }
diff --git a/java/org/brotli/wrapper/enc/Encoder.java b/java/org/brotli/wrapper/enc/Encoder.java
index 256713c..4071c9c 100644
--- a/java/org/brotli/wrapper/enc/Encoder.java
+++ b/java/org/brotli/wrapper/enc/Encoder.java
@@ -227,7 +227,7 @@
     int totalOutputSize = 0;
     try {
       encoder.getInputBuffer().put(data, offset, length);
-      encoder.push(EncoderJNI.Operation.FINISH, data.length);
+      encoder.push(EncoderJNI.Operation.FINISH, length);
       while (true) {
         if (!encoder.isSuccess()) {
           throw new IOException("encoding failed");