1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.components.devtools_bridge;
7 import android.test.InstrumentationTestCase;
8 import android.test.suitebuilder.annotation.SmallTest;
10 import junit.framework.Assert;
12 import org.chromium.components.devtools_bridge.SessionControlMessages.ClientMessage;
13 import org.chromium.components.devtools_bridge.SessionControlMessages.ClientMessageHandler;
14 import org.chromium.components.devtools_bridge.SessionControlMessages.IceExchangeMessage;
15 import org.chromium.components.devtools_bridge.SessionControlMessages.InvalidFormatException;
16 import org.chromium.components.devtools_bridge.SessionControlMessages.Message;
17 import org.chromium.components.devtools_bridge.SessionControlMessages.MessageHandler;
18 import org.chromium.components.devtools_bridge.SessionControlMessages.ServerMessage;
19 import org.chromium.components.devtools_bridge.SessionControlMessages.ServerMessageHandler;
20 import org.chromium.components.devtools_bridge.SessionControlMessages.UnknownRequestMessage;
21 import org.chromium.components.devtools_bridge.SessionControlMessages.UnknownResponseMessage;
24 * Tests for {@link SessionControlMessages}
26 public class SessionControlMessagesTest extends InstrumentationTestCase {
27 private static final String UNKNOWN_REQUEST_TYPE = "@unknown request@";
28 private static final String UNKNOWN_REQUEST = "{\"type\": \"" + UNKNOWN_REQUEST_TYPE + "\"}";
31 public void testIceExchangeMessage() {
32 recode(new IceExchangeMessage());
36 public void testUnknownRequest() throws InvalidFormatException {
37 UnknownRequestMessage request =
38 (UnknownRequestMessage) ClientMessageReader.readMessage(UNKNOWN_REQUEST);
39 UnknownResponseMessage response = ServerMessageReader.recode(request.createResponse());
40 Assert.assertEquals(UNKNOWN_REQUEST_TYPE, response.rawRequestType);
43 private <T extends ServerMessage> T recode(T message) {
44 assert message != null;
45 return ServerMessageReader.recode(message);
48 @SuppressWarnings("unchecked")
49 private static <T> T cast(T prototype, Object object) {
50 Assert.assertNotNull(object);
51 if (prototype.getClass() == object.getClass())
54 throw new ClassCastException();
57 private static void checkedRead(MessageHandler handler, Message<?> message) {
59 handler.readMessage(SessionControlMessages.toByteArray(message));
60 } catch (InvalidFormatException e) {
61 Assert.fail(e.toString());
65 private static class ServerMessageReader extends ServerMessageHandler {
66 private ServerMessage mLastMessage;
69 protected void onMessage(ServerMessage message) {
70 mLastMessage = message;
73 public static <T extends ServerMessage> T recode(T message) {
74 ServerMessageReader handler = new ServerMessageReader();
75 checkedRead(handler, message);
76 return cast(message, handler.mLastMessage);
80 private static class ClientMessageReader extends ClientMessageHandler {
81 private ClientMessage mLastMessage;
84 protected void onMessage(ClientMessage message) {
85 mLastMessage = message;
88 public static ClientMessage readMessage(String json) throws InvalidFormatException {
89 ClientMessageReader reader = new ClientMessageReader();
90 reader.readMessage(json.getBytes());
91 return reader.mLastMessage;