xref: /aosp_15_r20/external/fbjni/test/ReadableByteChannelTests.java (revision 65c59e023c5336bbd4a23be7af78407e3d80e7e7)
1*65c59e02SInna Palant /*
2*65c59e02SInna Palant  * Copyright (c) Facebook, Inc. and its affiliates.
3*65c59e02SInna Palant  *
4*65c59e02SInna Palant  * Licensed under the Apache License, Version 2.0 (the "License");
5*65c59e02SInna Palant  * you may not use this file except in compliance with the License.
6*65c59e02SInna Palant  * You may obtain a copy of the License at
7*65c59e02SInna Palant  *
8*65c59e02SInna Palant  *     http://www.apache.org/licenses/LICENSE-2.0
9*65c59e02SInna Palant  *
10*65c59e02SInna Palant  * Unless required by applicable law or agreed to in writing, software
11*65c59e02SInna Palant  * distributed under the License is distributed on an "AS IS" BASIS,
12*65c59e02SInna Palant  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*65c59e02SInna Palant  * See the License for the specific language governing permissions and
14*65c59e02SInna Palant  * limitations under the License.
15*65c59e02SInna Palant  */
16*65c59e02SInna Palant 
17*65c59e02SInna Palant package com.facebook.jni;
18*65c59e02SInna Palant 
19*65c59e02SInna Palant import static org.assertj.core.api.Assertions.assertThat;
20*65c59e02SInna Palant 
21*65c59e02SInna Palant import java.nio.ByteBuffer;
22*65c59e02SInna Palant import java.nio.channels.ReadableByteChannel;
23*65c59e02SInna Palant import java.util.Arrays;
24*65c59e02SInna Palant import org.junit.Test;
25*65c59e02SInna Palant 
26*65c59e02SInna Palant public class ReadableByteChannelTests extends BaseFBJniTests {
27*65c59e02SInna Palant   private static final byte[] data = {
28*65c59e02SInna Palant     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
29*65c59e02SInna Palant     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
30*65c59e02SInna Palant     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
31*65c59e02SInna Palant     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
32*65c59e02SInna Palant   };
33*65c59e02SInna Palant 
34*65c59e02SInna Palant   @Test
testSmallRead()35*65c59e02SInna Palant   public void testSmallRead() {
36*65c59e02SInna Palant     byte[] testData = Arrays.copyOf(data, 8);
37*65c59e02SInna Palant     ReadableByteChannel channel = new TestChannel(testData);
38*65c59e02SInna Palant     assertThat(nativeTestSmallRead(channel, testData)).isTrue();
39*65c59e02SInna Palant   }
40*65c59e02SInna Palant 
nativeTestSmallRead(ReadableByteChannel channel, byte[] data)41*65c59e02SInna Palant   public static native boolean nativeTestSmallRead(ReadableByteChannel channel, byte[] data);
42*65c59e02SInna Palant 
43*65c59e02SInna Palant   @Test
testReadToBufferCapacity()44*65c59e02SInna Palant   public void testReadToBufferCapacity() {
45*65c59e02SInna Palant     ReadableByteChannel channel = new TestChannel(data);
46*65c59e02SInna Palant     assertThat(nativeTestReadToBufferCapacity(channel, data)).isTrue();
47*65c59e02SInna Palant   }
48*65c59e02SInna Palant 
nativeTestReadToBufferCapacity( ReadableByteChannel channel, byte[] data)49*65c59e02SInna Palant   public static native boolean nativeTestReadToBufferCapacity(
50*65c59e02SInna Palant       ReadableByteChannel channel, byte[] data);
51*65c59e02SInna Palant 
52*65c59e02SInna Palant   @Test
testConsumeChannel()53*65c59e02SInna Palant   public void testConsumeChannel() {
54*65c59e02SInna Palant     ReadableByteChannel channel = new TestChannel(data);
55*65c59e02SInna Palant     assertThat(nativeTestConsumeChannel(channel, data)).isTrue();
56*65c59e02SInna Palant   }
57*65c59e02SInna Palant 
nativeTestConsumeChannel(ReadableByteChannel channel, byte[] data)58*65c59e02SInna Palant   public static native boolean nativeTestConsumeChannel(ReadableByteChannel channel, byte[] data);
59*65c59e02SInna Palant 
60*65c59e02SInna Palant   @Test
testConsumeChannelIteratively()61*65c59e02SInna Palant   public void testConsumeChannelIteratively() {
62*65c59e02SInna Palant     ReadableByteChannel channel = new TestChannel(data);
63*65c59e02SInna Palant     assertThat(nativeTestConsumeChannelIteratively(channel, data)).isTrue();
64*65c59e02SInna Palant   }
65*65c59e02SInna Palant 
nativeTestConsumeChannelIteratively( ReadableByteChannel channel, byte[] data)66*65c59e02SInna Palant   public static native boolean nativeTestConsumeChannelIteratively(
67*65c59e02SInna Palant       ReadableByteChannel channel, byte[] data);
68*65c59e02SInna Palant 
69*65c59e02SInna Palant   private static class TestChannel implements ReadableByteChannel {
70*65c59e02SInna Palant     private final byte[] data;
71*65c59e02SInna Palant     private int offset = 0;
72*65c59e02SInna Palant 
TestChannel(byte[] data)73*65c59e02SInna Palant     TestChannel(byte[] data) {
74*65c59e02SInna Palant       this.data = data;
75*65c59e02SInna Palant     }
76*65c59e02SInna Palant 
77*65c59e02SInna Palant     @Override
read(ByteBuffer buffer)78*65c59e02SInna Palant     public int read(ByteBuffer buffer) {
79*65c59e02SInna Palant       if (offset >= data.length) {
80*65c59e02SInna Palant         return -1;
81*65c59e02SInna Palant       }
82*65c59e02SInna Palant 
83*65c59e02SInna Palant       int n = Math.min(buffer.remaining(), data.length - offset);
84*65c59e02SInna Palant       int start = offset;
85*65c59e02SInna Palant       offset += n;
86*65c59e02SInna Palant       buffer.put(Arrays.copyOfRange(data, start, offset));
87*65c59e02SInna Palant       return n;
88*65c59e02SInna Palant     }
89*65c59e02SInna Palant 
90*65c59e02SInna Palant     @Override
isOpen()91*65c59e02SInna Palant     public boolean isOpen() {
92*65c59e02SInna Palant       return true;
93*65c59e02SInna Palant     }
94*65c59e02SInna Palant 
95*65c59e02SInna Palant     @Override
close()96*65c59e02SInna Palant     public void close() {}
97*65c59e02SInna Palant   }
98*65c59e02SInna Palant }
99