| /******************************************************************************* |
| * Copyright (c) 2009 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.e4.languages.javascript.debug.connect.test; |
| |
| import java.io.IOException; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.e4.languages.javascript.debug.connect.Connection; |
| import org.eclipse.e4.languages.javascript.debug.connect.DebugRuntime; |
| import org.eclipse.e4.languages.javascript.debug.connect.DisconnectException; |
| import org.eclipse.e4.languages.javascript.debug.connect.EventPacket; |
| import org.eclipse.e4.languages.javascript.debug.connect.Packet; |
| import org.eclipse.e4.languages.javascript.debug.connect.PipedTransportService; |
| import org.eclipse.e4.languages.javascript.debug.connect.Request; |
| import org.eclipse.e4.languages.javascript.debug.connect.Response; |
| import org.eclipse.e4.languages.javascript.debug.connect.TimeoutException; |
| import org.eclipse.e4.languages.javascript.debug.connect.TransportService; |
| import org.eclipse.e4.languages.javascript.debug.connect.TransportService.ListenerKey; |
| |
| public class DebugRuntimeTest extends TestCase { |
| |
| boolean complete = false; |
| |
| public void testSendEvent() throws IOException, InterruptedException { |
| final TransportService service = new PipedTransportService(); |
| final ListenerKey key = service.startListening("9000"); |
| |
| Thread t = new Thread() { |
| public void run() { |
| Connection c = null; |
| DebugRuntime runtime = null; |
| try { |
| c = service.accept(key, 5000, 5000); |
| assertNotNull(c); |
| |
| runtime = new DebugRuntime(c); |
| runtime.sendEvent(new EventPacket("test")); |
| synchronized (Thread.currentThread()) { |
| if (!complete) |
| Thread.currentThread().wait(5000); |
| } |
| } catch (IOException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| fail(); |
| } catch (DisconnectException e) { |
| e.printStackTrace(); |
| } catch (InterruptedException e) { |
| e.printStackTrace(); |
| } finally { |
| if (runtime != null) |
| runtime.dispose(); |
| } |
| } |
| }; |
| t.start(); |
| |
| Connection c = service.attach("9000", 5000, 5000); |
| assertNotNull(c); |
| try { |
| Packet packet = c.readPacket(); |
| assertTrue(packet instanceof EventPacket); |
| EventPacket event = (EventPacket) packet; |
| assertTrue(event.getEvent().equals("test")); |
| } finally { |
| c.close(); |
| synchronized (t) { |
| complete = true; |
| t.notify(); |
| } |
| } |
| t.join(5000); |
| service.stopListening(key); |
| } |
| |
| public void testReceiveRequestSendResponse() throws IOException, InterruptedException { |
| final TransportService service = new PipedTransportService(); |
| final ListenerKey key = service.startListening("9000"); |
| |
| Thread t = new Thread() { |
| public void run() { |
| Connection c = null; |
| DebugRuntime runtime = null; |
| try { |
| c = service.accept(key, 5000, 5000); |
| assertNotNull(c); |
| |
| runtime = new DebugRuntime(c); |
| Request request = runtime.receiveRequest(5000); |
| runtime.sendResponse(new Response(request.getSequence(), request.getCommand())); |
| synchronized (Thread.currentThread()) { |
| Thread.currentThread().wait(); |
| } |
| } catch (IOException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| fail(); |
| } catch (DisconnectException e) { |
| e.printStackTrace(); |
| } catch (InterruptedException e) { |
| e.printStackTrace(); |
| } catch (TimeoutException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } finally { |
| if (runtime != null) |
| runtime.dispose(); |
| } |
| } |
| }; |
| t.start(); |
| |
| Connection c = service.attach("9000", 5000, 5000); |
| assertNotNull(c); |
| try { |
| Request request = new Request("test"); |
| c.writePacket(request); |
| Packet packet = c.readPacket(); |
| assertTrue(packet instanceof Response); |
| Response response = (Response) packet; |
| assertTrue(response.getCommand().equals("test")); |
| assertTrue(response.getRequestSequence() == request.getSequence()); |
| } finally { |
| c.close(); |
| synchronized (t) { |
| t.notify(); |
| } |
| } |
| t.join(5000); |
| service.stopListening(key); |
| } |
| |
| // public void testSendEventWithConnectionHelper() throws IOException, DisconnectException { |
| // final TransportService service = new PipedTransportService(); |
| // |
| // ConnectionHelper helper = new ConnectionHelper(service, ""); |
| // DebugRuntime runtime = new DebugRuntime(helper.getServerConnection()); |
| // Connection c = helper.getClientConnection(); |
| // try { |
| // runtime.sendEvent(new EventPacket("test")); |
| // Packet packet = c.readPacket(); |
| // assertTrue(packet instanceof EventPacket); |
| // EventPacket event = (EventPacket) packet; |
| // assertTrue(event.getEvent().equals("test")); |
| // } finally { |
| // c.close(); |
| // runtime.dispose(); |
| // } |
| // } |
| } |