| // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| // This program and the accompanying materials are made available |
| // under the terms of the Eclipse Public License v2.0 which accompanies |
| // this distribution, and is available at |
| // https://www.eclipse.org/legal/epl-2.0/ |
| |
| package org.eclipse.wst.jsdt.chromium.internal.transport; |
| |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.IOException; |
| import java.io.OutputStream; |
| import java.util.concurrent.Callable; |
| import java.util.concurrent.Future; |
| import java.util.concurrent.FutureTask; |
| |
| /** |
| * A fake Connection that allows specifying a message responder (aka ChromeStub). |
| */ |
| public class FakeConnection implements Connection { |
| |
| private boolean isRunning; |
| private final ChromeStub responder; |
| private NetListener netListener; |
| |
| public FakeConnection(ChromeStub responder) { |
| this.responder = responder; |
| } |
| |
| public void send(Message message) { |
| assertTrue(isRunning); |
| assertNotNull(responder); |
| Message response = responder.respondTo(message); |
| if (response != null) { |
| netListener.messageReceived(response); |
| } |
| } |
| |
| public void runInDispatchThread(Runnable callback) { |
| callback.run(); |
| } |
| |
| public boolean isConnected() { |
| return isRunning; |
| } |
| |
| public void close() { |
| boolean sendEos = isRunning; |
| isRunning = false; |
| if (netListener != null) { |
| if (sendEos) { |
| netListener.eosReceived(); |
| } |
| netListener.connectionClosed(); |
| } |
| } |
| |
| public void setNetListener(NetListener netListener) { |
| this.netListener = netListener; |
| responder.setNetListener(netListener); |
| } |
| |
| public void start() throws IOException { |
| isRunning = true; |
| } |
| |
| public static final Handshaker.StandaloneV8 HANDSHAKER = new Handshaker.StandaloneV8() { |
| @Override |
| public void perform(LineReader input, OutputStream output) throws IOException { |
| } |
| |
| @Override |
| public Future<RemoteInfo> getRemoteInfo() { |
| return remoteInfoFuture; |
| } |
| |
| private final FutureTask<RemoteInfo> remoteInfoFuture; |
| { |
| remoteInfoFuture = new FutureTask<RemoteInfo>(new Callable<RemoteInfo>() { |
| @Override |
| public RemoteInfo call() throws Exception { |
| return new RemoteInfo() { |
| @Override public String getProtocolVersion() { |
| return "1"; |
| } |
| @Override public String getV8VmVersion() { |
| return "3.12.1 test fixture"; |
| } |
| @Override public String getEmbeddingHostName() { |
| return "junit test fixture"; |
| } |
| }; |
| } |
| }); |
| remoteInfoFuture.run(); |
| } |
| }; |
| |
| } |