Repository: qpid-proton-j Updated Branches: refs/heads/master ea46607e7 -> 25bc3cfba
PROTON-1672 Fix CompositeReadableBuffer arrayOffset The arrayOffset should return a fixed position based on the state of the buffer (slices will normally have a non-zero value) Project: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/commit/25bc3cfb Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/tree/25bc3cfb Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton-j/diff/25bc3cfb Branch: refs/heads/master Commit: 25bc3cfbad79a750c24af39e3b3aa5740bc62cea Parents: ea46607 Author: Timothy Bish <[email protected]> Authored: Wed Apr 18 11:03:07 2018 -0400 Committer: Timothy Bish <[email protected]> Committed: Wed Apr 18 11:03:07 2018 -0400 ---------------------------------------------------------------------- .../proton/codec/CompositeReadableBuffer.java | 2 +- .../codec/CompositeReadableBufferTest.java | 57 ++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/25bc3cfb/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java ---------------------------------------------------------------------- diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java index 388d140..5ab0348 100644 --- a/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java +++ b/proton-j/src/main/java/org/apache/qpid/proton/codec/CompositeReadableBuffer.java @@ -103,7 +103,7 @@ public class CompositeReadableBuffer implements ReadableBuffer { @Override public int arrayOffset() { if (hasArray()) { - return currentOffset; + return currentOffset - position; } throw new UnsupportedOperationException("Buffer not backed by a single array"); http://git-wip-us.apache.org/repos/asf/qpid-proton-j/blob/25bc3cfb/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java ---------------------------------------------------------------------- diff --git a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java index 298d01c..99a0ced 100644 --- a/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java +++ b/proton-j/src/test/java/org/apache/qpid/proton/codec/CompositeReadableBufferTest.java @@ -989,6 +989,63 @@ public class CompositeReadableBufferTest { } } + //----- Test arrayOffset method ------------------------------------------// + + @Test + public void testArrayOffsetIsZeroRegardlessOfPositionOnNonSlicedBuffer() { + CompositeReadableBuffer buffer = new CompositeReadableBuffer(); + + byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + + buffer.append(data); + + assertTrue(buffer.hasArray()); + assertEquals(0, buffer.arrayOffset()); + + buffer.position(1); + + assertEquals(0, buffer.arrayOffset()); + + buffer.position(buffer.limit()); + + assertEquals(0, buffer.arrayOffset()); + + buffer.position(0); + + assertEquals(0, buffer.arrayOffset()); + } + + @Test + public void testArrayOffsetIsFixedOnSliceRegardlessOfPosition() { + CompositeReadableBuffer buffer = new CompositeReadableBuffer(); + + byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + + buffer.append(data); + + assertTrue(buffer.hasArray()); + assertEquals(0, buffer.arrayOffset()); + + buffer.position(1); + ReadableBuffer slice = buffer.slice(); + + assertEquals(1, slice.arrayOffset()); + + slice.position(slice.limit()); + + assertEquals(1, slice.arrayOffset()); + + slice.position(0); + + assertEquals(1, slice.arrayOffset()); + + slice.position(1); + + ReadableBuffer anotherSlice = slice.slice(); + + assertEquals(2, anotherSlice.arrayOffset()); + } + //----- Test appending data to the buffer --------------------------------// @Test --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
