diff options
Diffstat (limited to 'mojo/android/javatests')
3 files changed, 159 insertions, 14 deletions
diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTestUtils.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTestUtils.java new file mode 100644 index 0000000..3fcee86 --- /dev/null +++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/BindingsTestUtils.java @@ -0,0 +1,50 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.mojo.bindings; + +import org.chromium.mojo.system.MojoException; + +import java.util.ArrayList; +import java.util.List; + +/** + * Utility class for bindings tests. + */ +public class BindingsTestUtils { + + /** + * {@link MessageReceiver} that records any message it receives. + */ + public static class RecordingMessageReceiver implements MessageReceiver { + + public final List<Message> messages = new ArrayList<Message>(); + + /** + * @see MessageReceiver#accept(Message) + */ + @Override + public boolean accept(Message message) { + messages.add(message); + return true; + } + } + + /** + * {@link Connector.ErrorHandler} that records any error it received. + */ + public static class CapturingErrorHandler implements Connector.ErrorHandler { + + public MojoException exception = null; + + /** + * @see Connector.ErrorHandler#onError(MojoException) + */ + @Override + public void onError(MojoException e) { + exception = e; + } + } + +} diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/ConnectorTest.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/ConnectorTest.java new file mode 100644 index 0000000..57f2550 --- /dev/null +++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/ConnectorTest.java @@ -0,0 +1,108 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.mojo.bindings; + +import android.test.suitebuilder.annotation.SmallTest; + +import org.chromium.mojo.MojoTestCase; +import org.chromium.mojo.TestUtils; +import org.chromium.mojo.bindings.BindingsTestUtils.CapturingErrorHandler; +import org.chromium.mojo.bindings.BindingsTestUtils.RecordingMessageReceiver; +import org.chromium.mojo.system.Core; +import org.chromium.mojo.system.Handle; +import org.chromium.mojo.system.MessagePipeHandle; +import org.chromium.mojo.system.MojoResult; +import org.chromium.mojo.system.Pair; +import org.chromium.mojo.system.impl.CoreImpl; + +import java.nio.ByteBuffer; +import java.util.ArrayList; + +/** + * Testing the {@link Connector} class. + */ +public class ConnectorTest extends MojoTestCase { + + private static final long RUN_LOOP_TIMEOUT_MS = 25; + + private static final int DATA_LENGTH = 1024; + + private MessagePipeHandle mHandle; + private Connector mConnector; + private Message mTestMessage; + private RecordingMessageReceiver mReceiver; + private CapturingErrorHandler mErrorHandler; + + /** + * @see MojoTestCase#setUp() + */ + @Override + protected void setUp() throws Exception { + super.setUp(); + Core core = CoreImpl.getInstance(); + Pair<MessagePipeHandle, MessagePipeHandle> handles = core.createMessagePipe(); + mHandle = handles.first; + mConnector = new Connector(handles.second); + mReceiver = new RecordingMessageReceiver(); + mConnector.setIncomingMessageReceiver(mReceiver); + mErrorHandler = new CapturingErrorHandler(); + mConnector.setErrorHandler(mErrorHandler); + mConnector.start(); + mTestMessage = new Message(TestUtils.newRandomBuffer(DATA_LENGTH), new ArrayList<Handle>()); + assertNull(mErrorHandler.exception); + assertEquals(0, mReceiver.messages.size()); + } + + /** + * @see MojoTestCase#tearDown() + */ + @Override + protected void tearDown() throws Exception { + mConnector.close(); + mHandle.close(); + super.tearDown(); + } + + /** + * Test sending a message through a {@link Connector}. + */ + @SmallTest + public void testSendingMessage() { + mConnector.accept(mTestMessage); + assertNull(mErrorHandler.exception); + ByteBuffer received = ByteBuffer.allocateDirect(DATA_LENGTH); + MessagePipeHandle.ReadMessageResult result = mHandle.readMessage(received, 0, + MessagePipeHandle.ReadFlags.NONE); + assertEquals(MojoResult.OK, result.getMojoResult()); + assertEquals(DATA_LENGTH, result.getMessageSize()); + assertEquals(mTestMessage.buffer, received); + } + + /** + * Test receiving a message through a {@link Connector} + */ + @SmallTest + public void testReceivingMessage() { + mHandle.writeMessage(mTestMessage.buffer, new ArrayList<Handle>(), + MessagePipeHandle.WriteFlags.NONE); + nativeRunLoop(RUN_LOOP_TIMEOUT_MS); + assertNull(mErrorHandler.exception); + assertEquals(1, mReceiver.messages.size()); + Message received = mReceiver.messages.get(0); + assertEquals(0, received.handles.size()); + assertEquals(mTestMessage.buffer, received.buffer); + } + + /** + * Test receiving an error through a {@link Connector}. + */ + @SmallTest + public void testErrors() { + mHandle.close(); + nativeRunLoop(RUN_LOOP_TIMEOUT_MS); + assertNotNull(mErrorHandler.exception); + assertEquals(MojoResult.FAILED_PRECONDITION, mErrorHandler.exception.getMojoResult()); + } +} diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/MessageTest.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/MessageTest.java index ee58979..9f518f5 100644 --- a/mojo/android/javatests/src/org/chromium/mojo/bindings/MessageTest.java +++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/MessageTest.java @@ -8,6 +8,7 @@ import android.test.suitebuilder.annotation.SmallTest; import org.chromium.mojo.MojoTestCase; import org.chromium.mojo.TestUtils; +import org.chromium.mojo.bindings.BindingsTestUtils.RecordingMessageReceiver; import org.chromium.mojo.system.Core; import org.chromium.mojo.system.DataPipe; import org.chromium.mojo.system.Handle; @@ -27,20 +28,6 @@ import java.util.List; */ public class MessageTest extends MojoTestCase { - static class RecordingMessageReceiver implements MessageReceiver { - - public final List<Message> messages = new ArrayList<Message>(); - - /** - * @see MessageReceiver#accept(Message) - */ - @Override - public boolean accept(Message message) { - messages.add(message); - return true; - } - } - private static final int DATA_SIZE = 1024; private ByteBuffer mData; |