package org.dresdenocl.debug.test.unit;
import java.io.File;
import org.dresdenocl.debug.OclDebugger;
import org.dresdenocl.debug.test.AbstractDebuggerTest;
import org.dresdenocl.debug.test.CallStackConstants;
import org.dresdenocl.debug.test.DebugTestPlugin;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Contains test cases testing the debugging of operations defined on the String
* type.
*
* @author Claas Wilke
*/
public class TestDebugPropertyCallExpressions extends AbstractDebuggerTest {
@BeforeClass
public static void setUp() throws Exception {
AbstractDebuggerTest.setUp();
}
@Test
public void testPropertyCallExpressionStepInto01() throws Exception {
String oclResource = "resources/expressions/calls/property01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at variable call 'self'. */
assertCurrentLine(5, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.VARIABLE_CALL + " (self)", debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepInto02() throws Exception {
String oclResource = "resources/expressions/calls/property02.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'staticInteger'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (staticInteger)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at type literal call 'TestClass'. */
assertCurrentLine(5, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.TYPE_LITERAL
+ " (resource::package01::TestClass)", debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'staticInteger'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (staticInteger)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepInto03() throws Exception {
String oclResource = "resources/expressions/calls/property03.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at variable call 'self'. */
assertCurrentLine(5, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.VARIABLE_CALL + " (self)", debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepOver01() throws Exception {
String oclResource = "resources/expressions/calls/property01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepOver02() throws Exception {
String oclResource = "resources/expressions/calls/property02.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'staticInteger'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (staticInteger)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'staticInteger'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (staticInteger)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepOver03() throws Exception {
String oclResource = "resources/expressions/calls/property03.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepReturn01() throws Exception {
String oclResource = "resources/expressions/calls/property01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED,
debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepReturn02() throws Exception {
String oclResource = "resources/expressions/calls/property02.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'staticInteger'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (staticInteger)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED,
debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testPropertyCallExpressionStepReturn03() throws Exception {
String oclResource = "resources/expressions/calls/property03.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 5);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'integer'. */
assertCurrentLine(5, debugger);
assertStackSize(2, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (integer)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED,
debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testRecursivePropertyCallExpressionStepInto01()
throws Exception {
String oclResource = "resources/expressions/calls/recProperty01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
/* Breakpoints on then and else expressions. */
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 6);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 7);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'parent'. */
assertCurrentLine(7, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at variable call 'self'. */
assertCurrentLine(7, debugger);
assertStackSize(6, debugger);
assertStackName(CallStackConstants.VARIABLE_CALL + " (self)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'parent'. */
assertCurrentLine(7, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at expression in OCL. */
assertCurrentLine(4, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* Only self should be on the stack. */
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at if expression. */
assertCurrentLine(5, debugger);
assertStackSize(6, debugger);
assertStackName(CallStackConstants.IF_EXPRESSION, debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call 'oclIsUndefined'. */
assertCurrentLine(5, debugger);
assertStackSize(7, debugger);
assertStackName(
CallStackConstants.OPERATION_CALL + " (oclIsUndefined)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'parent'. */
assertCurrentLine(5, debugger);
assertStackSize(8, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at variable call 'self'. */
assertCurrentLine(5, debugger);
assertStackSize(9, debugger);
assertStackName(CallStackConstants.VARIABLE_CALL + " (self)", debugger);
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'parent'. */
assertCurrentLine(5, debugger);
assertStackSize(8, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after operation call 'oclIsUndefined'. */
assertCurrentLine(5, debugger);
assertStackSize(7, debugger);
assertStackName(
CallStackConstants.OPERATION_CALL + " (oclIsUndefined)",
debugger);
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at integer literal '0'. */
assertCurrentLine(6, debugger);
assertStackSize(7, debugger);
assertStackName(CallStackConstants.INTEGER_LITERAL + " (0)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after recursive property call 'numberOfParents'. */
assertCurrentLine(4, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at integer literal '1'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(CallStackConstants.INTEGER_LITERAL + " (1)", debugger);
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1,
debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(5, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1,
debugger);
assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testRecursivePropertyCallExpressionStepOver01_01()
throws Exception {
String oclResource = "resources/expressions/calls/recProperty01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
/* Breakpoints on then and else expressions. */
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 6);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 7);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT,
debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger at integer literal '1'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(CallStackConstants.INTEGER_LITERAL + " (1)", debugger);
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(5, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1,
debugger);
assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testRecursivePropertyCallExpressionStepOver01_02()
throws Exception {
String oclResource = "resources/expressions/calls/recProperty01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
/* Breakpoints on then and else expressions. */
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 6);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 7);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'parent'. */
assertCurrentLine(7, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at variable call 'self'. */
assertCurrentLine(7, debugger);
assertStackSize(6, debugger);
assertStackName(CallStackConstants.VARIABLE_CALL + " (self)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'parent'. */
assertCurrentLine(7, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at expression in OCL. */
assertCurrentLine(4, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* Only self should be on the stack. */
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after recursive property call 'numberOfParents'. */
assertCurrentLine(4, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger at integer literal '1'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(CallStackConstants.INTEGER_LITERAL + " (1)", debugger);
assertVariableNumber(3, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(5, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1,
debugger);
assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_OVER,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testRecursivePropertyCallExpressionStepReturn01_01()
throws Exception {
String oclResource = "resources/expressions/calls/recProperty01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
/* Breakpoints on then and else expressions. */
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 6);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 7);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger);
/* Debugger after operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(5, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1,
debugger);
assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
@Test
public void testRecursivePropertyCallExpressionStepReturn01_02()
throws Exception {
String oclResource = "resources/expressions/calls/recProperty01.ocl";
OclDebugger debugger = generateDebugger(oclResource);
waitForEvent(DebugEvent.STARTED);
waitForEvent(DebugEvent.SUSPENDED);
/* Start debugging. */
File resourceFile = getFile(oclResource, DebugTestPlugin.PLUGIN_ID);
/* Breakpoints on then and else expressions. */
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 6);
debugger.addLineBreakPoint(resourceFile.getAbsolutePath(), 7);
debugStepAndWaitFor(DebugStep.RESUME, DebugEvent.SUSPENDED, debugger);
/* Debugger at operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at property call 'parent'. */
assertCurrentLine(7, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at variable call 'self'. */
assertCurrentLine(7, debugger);
assertStackSize(6, debugger);
assertStackName(CallStackConstants.VARIABLE_CALL + " (self)", debugger);
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'parent'. */
assertCurrentLine(7, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.PROPERTY_CALL + " (parent)",
debugger);
/* The source of the property call should be on the stack. */
/* The result of the property call should be on the stack. */
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger);
/* Debugger at expression in OCL. */
assertCurrentLine(4, debugger);
assertStackSize(5, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* Only self should be on the stack. */
assertVariableNumber(1, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call 'numberOfParents'. */
assertCurrentLine(7, debugger);
assertStackSize(4, debugger);
assertStackName(
CallStackConstants.PROPERTY_CALL + " (numberOfParents)",
debugger);
assertVariableNumber(4, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PROPERTY_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger);
/* Debugger after operation call '+'. */
assertCurrentLine(7, debugger);
assertStackSize(3, debugger);
assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger);
assertVariableNumber(5, debugger);
assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1,
debugger);
assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger);
assertVariableExist(OclDebugger.OCL_IF_CONDITION_RESULT_VATRIABLE_NAME,
debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger);
/* Debugger after property call expression. */
assertCurrentLine(4, debugger);
assertStackSize(1, debugger);
assertStackName(CallStackConstants.EXPRESSION_IN_OCL, debugger);
/* 'result' should be on the stack. */
assertVariableNumber(2, debugger);
assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger);
assertVariableExist(OclDebugger.OCL_RESULT_VATRIABLE_NAME, debugger);
debugStepAndWaitFor(DebugStep.STEP_RETURN,
DebugEvent.CONSTRAINT_INTERPRETED, debugger);
}
}