Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / components / devtools_bridge / android / javatests / src / org / chromium / components / devtools_bridge / SessionControlMessagesTest.java
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.
4
5 package org.chromium.components.devtools_bridge;
6
7 import android.test.InstrumentationTestCase;
8 import android.test.suitebuilder.annotation.SmallTest;
9
10 import junit.framework.Assert;
11
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;
22
23 /**
24  * Tests for {@link SessionControlMessages}
25  */
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 + "\"}";
29
30     @SmallTest
31     public void testIceExchangeMessage() {
32         recode(new IceExchangeMessage());
33     }
34
35     @SmallTest
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);
41     }
42
43     private <T extends ServerMessage> T recode(T message) {
44         assert message != null;
45         return ServerMessageReader.recode(message);
46     }
47
48     @SuppressWarnings("unchecked")
49     private static <T> T cast(T prototype, Object object) {
50         Assert.assertNotNull(object);
51         if (prototype.getClass() == object.getClass())
52             return (T) object;
53         else
54             throw new ClassCastException();
55     }
56
57     private static void checkedRead(MessageHandler handler, Message<?> message) {
58         try {
59             handler.readMessage(SessionControlMessages.toByteArray(message));
60         } catch (InvalidFormatException e) {
61             Assert.fail(e.toString());
62         }
63     }
64
65     private static class ServerMessageReader extends ServerMessageHandler {
66         private ServerMessage mLastMessage;
67
68         @Override
69         protected void onMessage(ServerMessage message) {
70             mLastMessage = message;
71         }
72
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);
77         }
78     }
79
80     private static class ClientMessageReader extends ClientMessageHandler {
81         private ClientMessage mLastMessage;
82
83         @Override
84         protected void onMessage(ClientMessage message) {
85             mLastMessage = message;
86         }
87
88         public static ClientMessage readMessage(String json) throws InvalidFormatException {
89             ClientMessageReader reader = new ClientMessageReader();
90             reader.readMessage(json.getBytes());
91             return reader.mLastMessage;
92         }
93     }
94 }