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.dresdenocl.essentialocl.expressions.OperationCallExp; import org.junit.BeforeClass; import org.junit.Test; /** * Contains test cases testing the debugging of {@link OperationCallExp}s. * * @author Claas Wilke */ public class TestDebugOperationCallExpressions extends AbstractDebuggerTest { @BeforeClass public static void setUp() throws Exception { AbstractDebuggerTest.setUp(); } @Test public void testOperationCallExpressionStepInto01() throws Exception { String oclResource = "resources/expressions/calls/operation01.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 operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getInteger)", 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 operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getInteger)", debugger); /* The result of the operation call should be on the stack. */ 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 after operation 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 testOperationCallExpressionStepInto02() throws Exception { String oclResource = "resources/expressions/calls/operation02.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 operation call 'getStaticInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getStaticInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at type literal '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 operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getStaticInteger)", debugger); /* The result of the operation call should be on the stack. */ 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 after operation 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 testOperationCallExpressionStepInto03() throws Exception { String oclResource = "resources/expressions/calls/operation03.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 operation call '+'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at integer literal '42'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.INTEGER_LITERAL + " (42)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at integer literal '0'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.INTEGER_LITERAL + " (0)", debugger); /* oclSource should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after integer literal '0'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); /* oclSource should be on the stack. */ /* oclParam1 should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call '+'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); /* The result of the operation call should be on the stack. */ assertVariableNumber(4, 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.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepInto04() throws Exception { String oclResource = "resources/expressions/calls/operation04.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 operation call 'isInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at self variable. */ 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 at integer literal '42'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.INTEGER_LITERAL + " (42)", debugger); /* oclSource should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'isInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isInteger)", debugger); /* oclSource should be on the stack. */ /* oclParam1 should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + "1", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'isInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isInteger)", debugger); /* The result of the operation call should be on the stack. */ /* oclParam1 should be on the stack. */ assertVariableNumber(4, 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.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepInto05() throws Exception { String oclResource = "resources/expressions/calls/operation05.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 operation call 'isIntegerBetween'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isIntegerBetween)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at self variable. */ 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 at integer literal '0'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.INTEGER_LITERAL + " (0)", debugger); /* oclSource should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at integer literal '42'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.INTEGER_LITERAL + " (42)", debugger); /* oclSource should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'isIntegerBetween'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isIntegerBetween)", debugger); /* oclSource should be on the stack. */ /* oclParam1 should be on the stack. */ /* oclParam2 should be on the stack. */ assertVariableNumber(4, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + "1", debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + "2", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'isIntegerBetween'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isIntegerBetween)", debugger); /* The result of the operation call should be on the stack. */ /* oclParam1 should be on the stack. */ assertVariableNumber(5, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 2, debugger); assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepOver01() throws Exception { String oclResource = "resources/expressions/calls/operation01.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 operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getInteger)", debugger); /* The result of the operation call should be on the stack. */ 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_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepOver02() throws Exception { String oclResource = "resources/expressions/calls/operation02.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 operation call 'getStaticInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getStaticInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getStaticInteger)", debugger); /* The result of the operation call should be on the stack. */ 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_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepOver03() throws Exception { String oclResource = "resources/expressions/calls/operation03.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 operation call '+'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call '+'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); /* The result of the operation call should be on the stack. */ assertVariableNumber(4, 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.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepOver04() throws Exception { String oclResource = "resources/expressions/calls/operation04.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 operation call 'isInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'isInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isInteger)", debugger); /* The result of the operation call should be on the stack. */ /* oclParam1 should be on the stack. */ assertVariableNumber(4, 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.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepOver05() throws Exception { String oclResource = "resources/expressions/calls/operation05.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 operation call 'isIntegerBetween'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isIntegerBetween)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation call 'isIntegerBetween'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isIntegerBetween)", debugger); /* The result of the operation call should be on the stack. */ /* oclParam1 should be on the stack. */ assertVariableNumber(5, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 1, debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + 2, debugger); assertVariableExist(OclDebugger.OCL_OPERATION_CALL_RESULT, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepReturn01() throws Exception { String oclResource = "resources/expressions/calls/operation01.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 operation call 'getInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepReturn02() throws Exception { String oclResource = "resources/expressions/calls/operation02.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 operation call 'getStaticInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (getStaticInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepReturn03() throws Exception { String oclResource = "resources/expressions/calls/operation03.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 operation call '+'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepReturn04() throws Exception { String oclResource = "resources/expressions/calls/operation04.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 operation call 'isInteger'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isInteger)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testOperationCallExpressionStepReturn05() throws Exception { String oclResource = "resources/expressions/calls/operation05.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 operation call 'isIntegerBetween'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (isIntegerBetween)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after operation 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 testRecursiveOperationCallExpressionStepInto01() throws Exception { String oclResource = "resources/expressions/calls/recOperation01.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.OPERATION_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.OPERATION_CALL + " (numberOfParents)", debugger); assertVariableNumber(4, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, 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 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 testRecursiveOperationCallExpressionStepOver01_01() throws Exception { String oclResource = "resources/expressions/calls/recOperation01.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.OPERATION_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.OPERATION_CALL + " (numberOfParents)", debugger); assertVariableNumber(4, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, 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 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 testRecursiveOperationCallExpressionStepOver01_02() throws Exception { String oclResource = "resources/expressions/calls/recOperation01.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.OPERATION_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.OPERATION_CALL + " (numberOfParents)", debugger); assertVariableNumber(4, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, 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 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 testRecursiveOperationCallExpressionStepReturn01_01() throws Exception { String oclResource = "resources/expressions/calls/recOperation01.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.OPERATION_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 testRecursiveOperationCallExpressionStepReturn01_02() throws Exception { String oclResource = "resources/expressions/calls/recOperation01.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.OPERATION_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.OPERATION_CALL + " (numberOfParents)", debugger); assertVariableNumber(4, debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, 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 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); } }