summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2017-02-28 10:35:20 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-02-28 10:35:20 +0000
commit2b15511c920170a25a3eca2d3f8c9fbfc8df9dca (patch)
tree9558c0cec8ecb9add5db278075ea4f2de81ecc3e
parent1b2efd7bda5767dd6d437d0e415cbc012fe73b39 (diff)
parentc721818a4895a62d546d284c181df76d4de08ad0 (diff)
Merge "Tests for Channels.new(In|Out)putSteam(AsynchronousByteChannel)"
-rw-r--r--luni/src/test/java/libcore/java/nio/channels/ChannelsTest.java70
1 files changed, 69 insertions, 1 deletions
diff --git a/luni/src/test/java/libcore/java/nio/channels/ChannelsTest.java b/luni/src/test/java/libcore/java/nio/channels/ChannelsTest.java
index 4bbf3a9a0f..c867250aca 100644
--- a/luni/src/test/java/libcore/java/nio/channels/ChannelsTest.java
+++ b/luni/src/test/java/libcore/java/nio/channels/ChannelsTest.java
@@ -17,12 +17,25 @@
package libcore.java.nio.channels;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.nio.ByteBuffer;
+import java.nio.channels.AsynchronousByteChannel;
import java.nio.channels.Channels;
import java.nio.channels.IllegalBlockingModeException;
import java.nio.channels.Pipe;
import java.nio.channels.WritableByteChannel;
+import java.util.Arrays;
+import java.util.concurrent.Future;
import junit.framework.TestCase;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import static org.mockito.Mockito.isA;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
public final class ChannelsTest extends TestCase {
@@ -56,5 +69,60 @@ public final class ChannelsTest extends TestCase {
sourceChannel.configureBlocking(false);
return sourceChannel;
}
-}
+ public void testInputStreamAsynchronousByteChannel() throws Exception {
+ AsynchronousByteChannel abc = mock(AsynchronousByteChannel.class);
+ InputStream is = Channels.newInputStream(abc);
+ Future<Integer> result = mock(Future.class);
+ ArgumentCaptor<ByteBuffer> bbCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
+ final byte[] bytesRead = new byte[10];
+
+ when(abc.read(bbCaptor.capture())).thenReturn(result);
+ when(result.get()).thenAnswer(
+ new Answer<Integer>() {
+ public Integer answer(InvocationOnMock invocation) {
+ ByteBuffer bb = bbCaptor.getValue();
+ assertEquals(bytesRead.length, bb.remaining());
+ // Write '7' bytes
+ bb.put(new byte[] {0, 1, 2, 3, 4, 5, 6});
+ return 7;
+ }
+ });
+
+ assertEquals(7, is.read(bytesRead));
+ // Only 7 bytes of data should be written into the buffer
+ byte[] bytesExpected = new byte[] { 0, 1, 2, 3, 4, 5, 6, 0, 0, 0 };
+ assertTrue(Arrays.equals(bytesExpected, bytesRead));
+
+ Mockito.verify(abc).read(isA(ByteBuffer.class));
+ Mockito.verify(result).get();
+ }
+
+ public void testOutputStreamAsynchronousByteChannel() throws Exception {
+ AsynchronousByteChannel abc = mock(AsynchronousByteChannel.class);
+ OutputStream os = Channels.newOutputStream(abc);
+ Future<Integer> result = mock(Future.class);
+ ArgumentCaptor<ByteBuffer> bbCaptor = ArgumentCaptor.forClass(ByteBuffer.class);
+ final byte[] data = "world".getBytes();
+
+ when(abc.write(bbCaptor.capture())).thenReturn(result);
+ when(result.get()).thenAnswer(
+ new Answer<Integer>() {
+ public Integer answer(InvocationOnMock invocation) {
+ ByteBuffer bb = bbCaptor.getValue();
+ assertEquals(data.length, bb.remaining());
+ byte[] readData = new byte[data.length];
+ // Read the whole thing
+ bb.get(readData);
+ assertTrue(Arrays.equals(data, readData));
+ return data.length;
+ }
+ });
+
+ os.write(data);
+
+ Mockito.verify(abc).write(isA(ByteBuffer.class));
+ Mockito.verify(result).get();
+ }
+
+}