blob: 13d013315f1fd7bd2976a9c0732a39cb69962c55 [file] [log] [blame]
package org.eclipse.debug.jdi.tests;
/**********************************************************************
Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
This file is made available under the terms of the Common Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/cpl-v10.html
**********************************************************************/
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.
*/
public void localSetUp() {
// Get the frame running MainClass.run()
fFrame = getFrame(RUN_FRAME_OFFSET);
}
/**
* Run all tests and output to standard output.
*/
public static void main(java.lang.String[] args) {
new StackFrameTest().runSuite(args);
}
/**
* Gets the name of the test case.
*/
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 = (ThreadReference) 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 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);
}
}