blob: 7755993b91e4504751d412c7e3230ebbc9c3b971 [file] [log] [blame]
package org.eclipse.jdt.debug.tests.eval;
/**********************************************************************
Copyright (c) 2000, 2002 IBM Corp. and others.
All rights reserved. This program and the accompanying materials
are made available under the terms of the Common Public License v0.5
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/cpl-v05.html
Contributors:
IBM Corporation - Initial implementation
*********************************************************************/
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.dom.Message;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
import org.eclipse.jdt.debug.core.IJavaThread;
import org.eclipse.jdt.debug.eval.EvaluationManager;
import org.eclipse.jdt.debug.eval.IEvaluationEngine;
import org.eclipse.jdt.debug.eval.IEvaluationListener;
import org.eclipse.jdt.debug.eval.IEvaluationResult;
import org.eclipse.jdt.debug.tests.AbstractDebugTest;
public abstract class Tests extends AbstractDebugTest {
static final String xByte = "((byte)-3)";
static final String xChar = "((char)-3)";
static final String xShort = "((short)-3)";
static final String xInt = "(-3)";
static final String xLong = "(-3l)";
static final String xFloat = "(-3.2f)";
static final String xDouble = "(-3.2)";
static final String xString = "\"minus three\"";
static final String xBoolean = "true";
static final String xNull = "null";
static final byte xByteValue = (byte)-3;
static final char xCharValue = (char)-3;
static final short xShortValue = (short)-3;
static final int xIntValue = -3;
static final long xLongValue = -3l;
static final float xFloatValue = -3.2f;
static final double xDoubleValue = -3.2;
static final String xStringValue = "minus three";
static final boolean xBooleanValue = true;
static final Object xNullValue = null;
static final String xVarByte = "xVarByte";
static final String xVarChar = "xVarChar";
static final String xVarShort = "xVarShort";
static final String xVarInt = "xVarInt";
static final String xVarLong = "xVarLong";
static final String xVarFloat = "xVarFloat";
static final String xVarDouble = "xVarDouble";
static final String xVarString = "xVarString";
static final String xVarBoolean = "xVarBoolean";
// static final String xVarNull = "xVarNull";
static final byte xVarByteValue = (byte)-5;
static final char xVarCharValue = (char)-5;
static final short xVarShortValue = (short)-5;
static final int xVarIntValue = -5;
static final long xVarLongValue = (long)-5;
static final float xVarFloatValue = (float)-5.3;
static final double xVarDoubleValue = -5.3;
static final String xVarStringValue = "minus five";
static final boolean xVarBooleanValue = true;
// static final Object xVarNullValue = null;
static final String yByte = "((byte)8)";
static final String yChar = "((char)8)";
static final String yShort = "((short)8)";
static final String yInt = "8";
static final String yLong = "8l";
static final String yFloat = "7.8f";
static final String yDouble = "7.8";
static final String yString = "\"eight\"";
static final String yBoolean = "false";
static final String yNull = "null";
static final byte yByteValue = (byte)8;
static final char yCharValue = (char)8;
static final short yShortValue = (short)8;
static final int yIntValue = 8;
static final long yLongValue = (long)8;
static final float yFloatValue = (float)7.8;
static final double yDoubleValue = 7.8;
static final String yStringValue = "eight";
static final boolean yBooleanValue = false;
static final Object yNullValue = null;
static final String yVarByte = "yVarByte";
static final String yVarChar = "yVarChar";
static final String yVarShort = "yVarShort";
static final String yVarInt = "yVarInt";
static final String yVarLong = "yVarLong";
static final String yVarFloat = "yVarFloat";
static final String yVarDouble = "yVarDouble";
static final String yVarString = "yVarString";
static final String yVarBoolean = "yVarBoolean";
// static final String yVarNull = "yVarNull";
static final byte yVarByteValue = (byte)7;
static final char yVarCharValue = (char)7;
static final short yVarShortValue = (short)7;
static final int yVarIntValue = 7;
static final long yVarLongValue = (long)7;
static final float yVarFloatValue = (float)6.9;
static final double yVarDoubleValue = 6.9;
static final String yVarStringValue = "seven";
static final boolean yVarBooleanValue = false;
// static final Object yVarNullValue = null;
static final String xFieldByte = "xFieldByte";
static final String xFieldChar = "xFieldChar";
static final String xFieldShort = "xFieldShort";
static final String xFieldInt = "xFieldInt";
static final String xFieldLong = "xFieldLong";
static final String xFieldFloat = "xFieldFloat";
static final String xFieldDouble = "xFieldDouble";
static final String xFieldString = "xFieldString";
static final String xFieldBoolean = "xFieldBoolean";
static final String yFieldByte = "yFieldByte";
static final String yFieldChar = "yFieldChar";
static final String yFieldShort = "yFieldShort";
static final String yFieldInt = "yFieldInt";
static final String yFieldLong = "yFieldLong";
static final String yFieldFloat = "yFieldFloat";
static final String yFieldDouble = "yFieldDouble";
static final String yFieldString = "yFieldString";
static final String yFieldBoolean = "yFieldBoolean";
static final String xStaticFieldByte = "xStaticFieldByte";
static final String xStaticFieldChar = "xStaticFieldChar";
static final String xStaticFieldShort = "xStaticFieldShort";
static final String xStaticFieldInt = "xStaticFieldInt";
static final String xStaticFieldLong = "xStaticFieldLong";
static final String xStaticFieldFloat = "xStaticFieldFloat";
static final String xStaticFieldDouble = "xStaticFieldDouble";
static final String xStaticFieldString = "xStaticFieldString";
static final String xStaticFieldBoolean = "xStaticFieldBoolean";
static final String yStaticFieldByte = "yStaticFieldByte";
static final String yStaticFieldChar = "yStaticFieldChar";
static final String yStaticFieldShort = "yStaticFieldShort";
static final String yStaticFieldInt = "yStaticFieldInt";
static final String yStaticFieldLong = "yStaticFieldLong";
static final String yStaticFieldFloat = "yStaticFieldFloat";
static final String yStaticFieldDouble = "yStaticFieldDouble";
static final String yStaticFieldString = "yStaticFieldString";
static final String yStaticFieldBoolean = "yStaticFieldBoolean";
static final byte xFieldByteValue = -2;
static final char xFieldCharValue = (char)-2;
static final short xFieldShortValue = -2;
static final int xFieldIntValue = -2;
static final long xFieldLongValue = -2;
static final float xFieldFloatValue = (float)-2.1;
static final double xFieldDoubleValue = -2.1;
static final String xFieldStringValue = "minus two";
static final boolean xFieldBooleanValue = true;
static final byte yFieldByteValue = 9;
static final char yFieldCharValue = 9;
static final short yFieldShortValue = 9;
static final int yFieldIntValue = 9;
static final long yFieldLongValue = 9;
static final float yFieldFloatValue = (float)8.6;
static final double yFieldDoubleValue = 8.6;
static final String yFieldStringValue = "nine";
static final boolean yFieldBooleanValue = false;
static final byte xStaticFieldByteValue = -1;
static final char xStaticFieldCharValue = (char)-1;
static final short xStaticFieldShortValue = -1;
static final int xStaticFieldIntValue = -1;
static final long xStaticFieldLongValue = -1;
static final float xStaticFieldFloatValue = (float)-1.5;
static final double xStaticFieldDoubleValue = -1.5;
static final String xStaticFieldStringValue = "minus one";
static final boolean xStaticFieldBooleanValue = true;
static final byte yStaticFieldByteValue = 6;
static final char yStaticFieldCharValue = 6;
static final short yStaticFieldShortValue = 6;
static final int yStaticFieldIntValue = 6;
static final long yStaticFieldLongValue = 6;
static final float yStaticFieldFloatValue = (float)6.5;
static final double yStaticFieldDoubleValue = 6.5;
static final String yStaticFieldStringValue = "six";
static final boolean yStaticFieldBooleanValue = false;
static final String xArrayByte = "xArrayByte";
static final String xArrayChar = "xArrayChar";
static final String xArrayShort = "xArrayShort";
static final String xArrayInt = "xArrayInt";
static final String xArrayLong = "xArrayLong";
static final String xArrayFloat = "xArrayFloat";
static final String xArrayDouble = "xArrayDouble";
static final String xArrayString = "xArrayString";
static final String xArrayBoolean = "xArrayBoolean";
static final String yArrayByte = "yArrayByte";
static final String yArrayChar = "yArrayChar";
static final String yArrayShort = "yArrayShort";
static final String yArrayInt = "yArrayInt";
static final String yArrayLong = "yArrayLong";
static final String yArrayFloat = "yArrayFloat";
static final String yArrayDouble = "yArrayDouble";
static final String yArrayString = "yArrayString";
static final String yArrayBoolean = "yArrayBoolean";
static final byte[] xArrayByteValue = new byte[]{1, 2, 3};
static final char[] xArrayCharValue = new char[]{1, 2, 3};
static final short[] xArrayShortValue = new short[]{1, 2, 3};
static final int[] xArrayIntValue = new int[]{1, 2, 3};
static final long[] xArrayLongValue = new long[]{1, 2, 3};
static final float[] xArrayFloatValue = new float[]{(float)1.2, (float)2.3, (float)3.4};
static final double[] xArrayDoubleValue = new double[]{1.2, 2.3, 3.4};
static final String[] xArrayStringValue = new String[]{"one", "two", "three"};
static final boolean[] xArrayBooleanValue = new boolean[]{true, false, true};
static final byte[] yArrayByteValue = new byte[]{7, 8, 9};
static final char[] yArrayCharValue = new char[]{7, 8, 9};
static final short[] yArrayShortValue = new short[]{7, 8, 9};
static final int[] yArrayIntValue = new int[]{7, 8, 9};
static final long[] yArrayLongValue = new long[]{7, 8, 9};
static final float[] yArrayFloatValue = new float[]{(float)7.6, (float)8.7, (float)9.8};
static final double[] yArrayDoubleValue = new double[]{7.6, 8.7, 9.8};
static final String[] yArrayStringValue = new String[]{"seven", "eight", "nine"};
static final boolean[] yArrayBooleanValue = new boolean[]{false, true, false};
static final String plusOp = "+";
static final String minusOp = "-";
static final String multiplyOp = "*";
static final String divideOp = "/";
static final String remainderOp = "%";
static final String greaterOp = ">";
static final String greaterEqualOp = ">=";
static final String lessOp = "<";
static final String lessEqualOp = "<=";
static final String equalEqualOp = "==";
static final String notEqualOp = "!=";
static final String leftShiftOp = "<<";
static final String rightShiftOp = ">>";
static final String unsignedRightShiftOp = ">>>";
static final String orOp = "|";
static final String andOp = "&";
static final String xorOp = "^";
static final String notOp = "!";
static final String twiddleOp = "~";
static final String equalOp = "=";
static final String plusAssignmentOp = "+=";
static final String minusAssignmentOp = "-=";
static final String multiplyAssignmentOp = "*=";
static final String divideAssignmentOp = "/=";
static final String remainderAssignmentOp = "%=";
static final String leftShiftAssignmentOp = "<<=";
static final String rightShiftAssignmentOp = ">>=";
static final String unsignedRightShiftAssignmentOp = ">>>=";
static final String orAssignmentOp = "|=";
static final String andAssignmentOp = "&=";
static final String xorAssignmentOp = "^=";
static final String prefixPlusPlusOp = "++";
static final String postfixPlusPlusOp = "++";
static final String prefixMinusMinusOp = "--";
static final String postfixMinusMinusOp = "--";
static final String aInt = "a";
static final String bInt = "b";
static final String cInt = "c";
static final String dInt = "d";
static final String eInt = "e";
static final String fInt = "f";
static final String gInt = "g";
static final String hInt = "h";
static final String iInt = "i";
static final String jInt = "j";
static final String aString = "aa";
static final String bString = "bb";
static final String cString = "cc";
static final String dString = "dd";
static final String eString = "ee";
static final String fString = "ff";
static final String gString = "gg";
static final String hString = "hh";
static final String iString = "ii";
static final String jString = "jj";
static final int aIntValue_0 = 1;
static final int bIntValue_0 = 2;
static final int cIntValue_0 = 3;
static final int dIntValue_0 = 4;
static final int eIntValue_0 = 5;
static final int fIntValue_0 = 6;
static final int aIntValue_1 = 1;
static final int bIntValue_1 = 2;
static final int cIntValue_1 = 37;
static final int dIntValue_1 = 48;
static final int eIntValue_1 = 5;
static final int fIntValue_1 = 6;
static final int gIntValue_1 = 7;
static final int hIntValue_1 = 8;
static final int aIntValue_2 = 1;
static final int bIntValue_2 = 2;
static final int cIntValue_2 = 379;
static final int dIntValue_2 = 480;
static final int eIntValue_2 = 59;
static final int fIntValue_2 = 60;
static final int gIntValue_2 = 7;
static final int hIntValue_2 = 8;
static final int iIntValue_2 = 9;
static final int jIntValue_2 = 0;
static final String aStringValue_0 = "one";
static final String bStringValue_0 = "two";
static final String cStringValue_0 = "three";
static final String dStringValue_0 = "four";
static final String eStringValue_0 = "five";
static final String fStringValue_0 = "six";
static final String aStringValue_1 = "one";
static final String bStringValue_1 = "two";
static final String cStringValue_1 = "three seven";
static final String dStringValue_1 = "four eight";
static final String eStringValue_1 = "five";
static final String fStringValue_1 = "six";
static final String gStringValue_1 = "seven";
static final String hStringValue_1 = "eight";
static final String aStringValue_2 = "one";
static final String bStringValue_2 = "two";
static final String cStringValue_2 = "three seven nine";
static final String dStringValue_2 = "four eight zero";
static final String eStringValue_2 = "five nine";
static final String fStringValue_2 = "six zero";
static final String gStringValue_2 = "seven";
static final String hStringValue_2 = "eight";
static final String iStringValue_2 = "nine";
static final String jStringValue_2 = "zero";
static final String EMPTY= "";
static final String THIS= "this.";
static final String T_T= "EvalNestedTypeTests.";
static final String T_T_A= T_T + "A.";
static final String T_A= "A.";
static final String T_T_A_AA= T_T_A + "AA.";
static final String T_A_AA= T_A + "AA.";
static final String T_AA= "AA.";
static final String T_T_A_AB= T_T_A + "AB.";
static final String T_A_AB= T_A + "AB.";
static final String T_AB= "AB.";
static final String T_T_B= T_T + "B.";
static final String T_B= "B.";
static final String T_T_B_BB= T_T_B + "BB.";
static final String T_B_BB= T_B + "BB.";
static final String T_BB= "BB.";
static final String T_C= "C.";
static final String T_E= "E.";
static final String T_T_this= T_T + "this.";
static final String T_T_A_this= T_T_A + "this.";
static final String T_A_this= T_A + "this.";
static final String T_B_this= T_B + "this.";
static final String T_C_this= T_C + "this.";
static final String T_E_this= T_E + "this.";
static final String I_A= "i_a.";
static final String I_AA= "i_aa.";
static final String I_AB= "i_ab.";
static final String I_AC= "i_ac.";
static final String I_AD= "i_ad.";
static final String I_AE= "i_ae.";
static final String I_AF= "i_af.";
static final String I_B= "i_b.";
static final String I_BB= "i_bb.";
static final String I_BC= "i_bc.";
static final String I_BD= "i_bd.";
static final String I_C= "i_c.";
static final String I_CB= "i_cb.";
static final String I_CC= "i_cc.";
static final String I_CD= "i_cd.";
static final String I_D= "i_d.";
static final String I_DB= "i_db.";
static final String I_DC= "i_dc.";
static final String I_DD= "i_dd.";
static final String I_E= "i_e.";
static final String I_EB= "i_eb.";
static final String I_EC= "i_ec.";
static final String I_ED= "i_ed.";
static final String I_F= "i_f.";
static final String I_FB= "i_fb.";
static final String I_FC= "i_fc.";
static final String I_FD= "i_fd.";
/**
* Constructor for Tests.
* @param name
*/
public Tests(String name) {
super(name);
}
static protected IJavaThread fSuspendeeThread;
static protected IJavaStackFrame fFrame;
static protected ICompilationUnit fCu;
static protected IEvaluationEngine fEngine;
static protected IValue eval(String command) {
class Listener implements IEvaluationListener {
IEvaluationResult fResult;
public void evaluationComplete(IEvaluationResult result) {
fResult= result;
}
public IEvaluationResult getResult() {
return fResult;
}
public boolean evaluationTimedOut(IJavaThread thread) {
return true;
}
};
Listener listener= new Listener();
try {
fEngine.evaluate(command, fFrame, listener, DebugEvent.EVALUATION_IMPLICIT, false);
} catch (DebugException e) {
e.printStackTrace();
}
while (listener.fResult == null) {
try {
Thread.sleep(100);
} catch(InterruptedException e) {
}
}
IEvaluationResult result= listener.getResult();
if (result.hasErrors()) {
String message;
DebugException exception= result.getException();
if (exception == null) {
message= "";
Message[] messages= result.getErrors();
for (int i= 0, limit= messages.length; i < limit; i++) {
message += messages[i].getMessage() + ", ";
}
} else {
message= exception.getStatus().getMessage();
}
assertTrue(message, false);
}
return result.getValue();
}
protected void initializeFrame(String testClass, int breakPointLine, int numberFrames) throws Exception {
fFrame = getStackFrame(breakPointLine, numberFrames, 0, 0, testClass);
fEngine = getEvaluationEngine((IJavaDebugTarget)fFrame.getDebugTarget(), getJavaProject());
}
protected void initializeFrame(String testClass, int breakPointLine, int numberFrames, int hitCount) throws Exception {
fFrame = getStackFrame(breakPointLine, numberFrames, 0, hitCount, testClass);
fEngine = getEvaluationEngine((IJavaDebugTarget)fFrame.getDebugTarget(), getJavaProject());
}
protected void destroyFrame() throws Exception {
try {
terminateAndRemove(fSuspendeeThread);
} finally {
removeAllBreakpoints();
fEngine.dispose();
}
fFrame = null;
}
protected IEvaluationEngine getEvaluationEngine(IJavaDebugTarget vm, IJavaProject project) {
IEvaluationEngine engine = EvaluationManager.newAstEvaluationEngine(project, vm);
return engine;
}
protected IJavaStackFrame getStackFrame(int breakpointLine, int numberFrames, int frameNumber, int hitCount, String testClass) throws Exception {
IJavaLineBreakpoint breakpoint= createLineBreakpoint(breakpointLine, testClass);
breakpoint.setHitCount(hitCount);
fSuspendeeThread= launchToLineBreakpoint(testClass, breakpoint);
IStackFrame[] stackFrames= fSuspendeeThread.getStackFrames();
assertEquals("Should be " + numberFrames + " stack frame children, was: " + stackFrames.length, numberFrames, stackFrames.length);
IStackFrame stackFrame= stackFrames[frameNumber];
return (IJavaStackFrame)stackFrame;
}
}