/******************************************************************************* * Copyright (c) 2000, 2012 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.debug.jdi.tests; import java.util.List; import com.sun.jdi.IncompatibleThreadStateException; import com.sun.jdi.IntegerValue; import com.sun.jdi.InvalidStackFrameException; import com.sun.jdi.Method; import com.sun.jdi.ObjectReference; import com.sun.jdi.StringReference; import com.sun.jdi.ThreadReference; import com.sun.jdi.event.BreakpointEvent; import com.sun.jdi.request.BreakpointRequest; import com.sun.jdi.request.EventRequest; /** * Test cases for the implementation of providing argumebnt information even if * no debugging information is present in the new java 1.6 VM * * @since 3.3 */ public class ProvideArgumentsTests extends AbstractJDITest { /** setup test info locally **/ @Override public void localSetUp() {} /** * tests getting argument values from a stackframe when no debugging * info is available */ public void testGetArgumentValues() { try { Method method = getMethod("argValues", "(Ljava/lang/String;ILjava/lang/Object;)V"); BreakpointRequest br = getBreakpointRequest(method.location()); br.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD); br.enable(); EventWaiter waiter = new EventWaiter(br, true); fEventReader.addEventListener(waiter); triggerEvent("argvalues"); BreakpointEvent bpe = (BreakpointEvent) waiter.waitEvent(10000); ThreadReference tref = bpe.thread(); List<?> list = tref.frame(0).getArgumentValues(); assertNotNull("list should not be null", list); assertTrue("first list item must be a String", list.get(0) instanceof StringReference); assertEquals("test string is not the same as was created in MainClass", "teststr", ((StringReference)list.get(0)).value()); assertTrue("second list item must be an integer", list.get(1) instanceof IntegerValue); assertEquals("integer is not the same value as was passed in MainClass", 5, ((IntegerValue)list.get(1)).value()); assertTrue("third list item must be a Double", list.get(2) instanceof ObjectReference); fEventReader.removeEventListener(waiter); tref.resume(); } catch (InterruptedException e) { e.printStackTrace(); } catch (InvalidStackFrameException e) { e.printStackTrace(); } catch (IncompatibleThreadStateException e) { e.printStackTrace(); } } }