| /******************************************************************************* |
| * Copyright (c) 2000, 2015 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.LinkedList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import com.sun.jdi.AbsentInformationException; |
| import com.sun.jdi.ClassNotLoadedException; |
| import com.sun.jdi.InvalidTypeException; |
| import com.sun.jdi.LocalVariable; |
| import com.sun.jdi.ObjectReference; |
| import com.sun.jdi.ReferenceType; |
| import com.sun.jdi.StackFrame; |
| import com.sun.jdi.ThreadReference; |
| |
| /** |
| * Tests for JDI com.sun.jdi.StackFrame. |
| */ |
| public class StackFrameTest extends AbstractJDITest { |
| |
| private StackFrame fFrame; |
| /** |
| * Creates a new test. |
| */ |
| public StackFrameTest() { |
| super(); |
| } |
| /** |
| * Init the fields that are used by this test only. |
| */ |
| @Override |
| public void localSetUp() { |
| // Get the frame running MainClass.run() |
| fFrame = getFrame(RUN_FRAME_OFFSET); |
| |
| } |
| /** |
| * Run all tests and output to standard output. |
| * @param args |
| */ |
| public static void main(java.lang.String[] args) { |
| new StackFrameTest().runSuite(args); |
| } |
| /** |
| * Gets the name of the test case. |
| * @see junit.framework.TestCase#getName() |
| */ |
| @Override |
| public String getName() { |
| return "com.sun.jdi.StackFrame"; |
| } |
| /** |
| * Test JDI equals() and hashCode(). |
| */ |
| public void testJDIEquality() { |
| StackFrame sameFrame = getFrame(RUN_FRAME_OFFSET); |
| StackFrame otherFrame = getFrame(0); |
| |
| // Not identical |
| assertTrue("1", fFrame != sameFrame); |
| // But equal |
| assertTrue("2", fFrame.equals(sameFrame)); |
| assertTrue("3", fFrame.hashCode() == sameFrame.hashCode()); |
| |
| assertTrue("4", fFrame.equals(fFrame)); |
| assertTrue("5", fFrame.hashCode() == fFrame.hashCode()); |
| |
| assertTrue("6", !fFrame.equals(otherFrame)); |
| |
| assertTrue("7", !fFrame.equals(new Object())); |
| assertTrue("8", !fFrame.equals(null)); |
| } |
| /** |
| * Test JDI location(). |
| */ |
| public void testJDILocation() { |
| assertNotNull("1", fFrame.location()); |
| } |
| /** |
| * Test JDI setValue(LocalVariable, Value), getValue(LocalVariable) and |
| * getValues(List). |
| */ |
| public void testJDISetGetValue() { |
| // setValue |
| ThreadReference thread = fVM.allThreads().get(0); |
| LocalVariable var = getLocalVariable(); |
| try { |
| fFrame.setValue(var, thread); |
| } catch (ClassNotLoadedException e) { |
| assertTrue("1.1", false); |
| } catch (InvalidTypeException e) { |
| assertTrue("1.2", false); |
| } |
| |
| // getValue(LocalVariable) |
| ThreadReference value = |
| (ThreadReference) fFrame.getValue(getLocalVariable()); |
| assertEquals("2", thread, value); |
| |
| // getValues(List) |
| List<LocalVariable> vars = new LinkedList<>(); |
| vars.add(var); |
| Map<?, ?> values = fFrame.getValues(vars); |
| value = (ThreadReference) values.get(var); |
| assertEquals("3", thread, value); |
| |
| // test null value |
| var = getLocalVariable(); |
| try { |
| fFrame.setValue(var, null); |
| } catch (ClassNotLoadedException e) { |
| assertTrue("4.1", false); |
| } catch (InvalidTypeException e) { |
| assertTrue("4.2", false); |
| } |
| |
| value = (ThreadReference) fFrame.getValue(getLocalVariable()); |
| assertEquals("5", null, value); |
| |
| } |
| /** |
| * Test JDI thisObject(). |
| */ |
| public void testJDIThisObject() { |
| ObjectReference object = fFrame.thisObject(); |
| ReferenceType expected = getMainClass(); |
| ReferenceType referenceType = object.referenceType(); |
| assertEquals("1", expected, referenceType); |
| } |
| /** |
| * Test JDI thread(). |
| */ |
| public void testJDIThread() { |
| assertEquals("1", getThread(), fFrame.thread()); |
| } |
| /** |
| * Test JDI visibleVariableByName(String). |
| */ |
| public void testJDIVisibleVariableByName() { |
| LocalVariable var = null; |
| try { |
| var = fFrame.visibleVariableByName("t"); |
| } catch (AbsentInformationException e) { |
| assertTrue("1", false); |
| } |
| assertEquals("2", getLocalVariable(), var); |
| try { |
| var = fFrame.visibleVariableByName("bogus"); |
| } catch (AbsentInformationException e) { |
| assertTrue("3", false); |
| } |
| assertTrue("4", null == var); |
| } |
| /** |
| * Test JDI visibleVariables(). |
| */ |
| public void testJDIVisibleVariables() { |
| List<?> vars = null; |
| try { |
| vars = fFrame.visibleVariables(); |
| } catch (AbsentInformationException e) { |
| assertTrue("1", false); |
| } |
| assertEquals("2", 2, vars.size()); |
| |
| LocalVariable var; |
| int i = 0; |
| do { |
| var = (LocalVariable) vars.get(i++); |
| } while (!var.name().equals("t")); |
| assertEquals("3", getLocalVariable(), var); |
| } |
| } |