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 TestDebugLetExpressions extends AbstractDebuggerTest { @BeforeClass public static void setUp() throws Exception { AbstractDebuggerTest.setUp(); } @Test public void testLetExpressionStepInto01() throws Exception { String oclResource = "resources/expressions/let01.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 let expression 'senseOfLife'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (senseOfLife)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at variable expression 'senseOfLife'. */ assertCurrentLine(6, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (senseOfLife)", debugger); /* 'senseOfLife' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("senseOfLife", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at integer literal '42'. */ assertCurrentLine(5, debugger); assertStackSize(4, debugger); assertStackName(CallStackConstants.INTEGER_LITERAL + " (42)", debugger); /* 'senseOfLife' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("senseOfLife", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after variable expression 'senseOfLife'. */ assertCurrentLine(6, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (senseOfLife)", debugger); /* 'senseOfLife' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("senseOfLife", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepInto02() throws Exception { String oclResource = "resources/expressions/let02.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 let expression 'col'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (col)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at variable expression 'col'. */ assertCurrentLine(6, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (col)", debugger); /* 'col' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("col", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at collection literal. */ assertCurrentLine(5, debugger); assertStackSize(4, debugger); assertStackName(CallStackConstants.COLLECTION_LITERAL + " (Set)", debugger); /* 'col' should be on the stack. */ /* 'oclCollection' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("col", debugger); assertVariableExist(OclDebugger.OCL_COLLECTION_RESULT_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at String literal 'first'. */ assertCurrentLine(5, debugger); assertStackSize(5, debugger); assertStackName(CallStackConstants.STRING_LITERAL + " ('first')", debugger); /* 'col' should be on the stack. */ /* 'oclCollection' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("col", debugger); assertVariableExist(OclDebugger.OCL_COLLECTION_RESULT_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after collection literal. */ assertCurrentLine(5, debugger); assertStackSize(4, debugger); assertStackName(CallStackConstants.COLLECTION_LITERAL + " (Set)", debugger); /* 'col' should be on the stack. */ /* 'oclCollection' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("col", debugger); assertVariableExist(OclDebugger.OCL_COLLECTION_RESULT_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after variable expression 'col'. */ assertCurrentLine(6, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (col)", debugger); /* 'senseOfLife' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("col", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepInto03() throws Exception { String oclResource = "resources/expressions/let03.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 let expression 'outer'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (outer)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at let expression 'inner'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (inner)", debugger); /* 'outer' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("outer", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at operation call expression '+'. */ assertCurrentLine(6, debugger); assertStackSize(4, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at variable expression 'outer'. */ assertCurrentLine(6, debugger); assertStackSize(5, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (outer)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at string literal 'outer'. */ assertCurrentLine(5, debugger); assertStackSize(6, debugger); assertStackName(CallStackConstants.STRING_LITERAL + " ('outer')", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after variable expression 'outer'. */ assertCurrentLine(6, debugger); assertStackSize(5, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (outer)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ assertVariableNumber(3, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at variable expression 'inner'. */ assertCurrentLine(6, debugger); assertStackSize(5, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (inner)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ /* 'oclSource' should be on the stack. */ assertVariableNumber(4, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at string literal 'inner'. */ assertCurrentLine(5, debugger); assertStackSize(6, debugger); assertStackName(CallStackConstants.STRING_LITERAL + " ('inner')", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ /* 'oclSource' should be on the stack. */ assertVariableNumber(4, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger after variable expression 'inner'. */ assertCurrentLine(6, debugger); assertStackSize(5, debugger); assertStackName(CallStackConstants.VARIABLE_CALL + " (inner)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ /* 'oclSource' should be on the stack. */ assertVariableNumber(4, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.OCL_CALL_SOURCE_VATRIABLE_NAME, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at operation call expression '+'. */ assertCurrentLine(6, debugger); assertStackSize(4, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ /* 'oclSource' should be on the stack. */ /* 'param1' should be on the stack. */ assertVariableNumber(5, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", debugger); assertVariableExist(OclDebugger.OCL_PARAMETER_VALUE_VARIBALE + "1", 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 expression '+'. */ assertCurrentLine(6, debugger); assertStackSize(4, debugger); assertStackName(CallStackConstants.OPERATION_CALL + " (+)", debugger); /* 'outer' should be on the stack. */ /* 'inner' should be on the stack. */ /* 'oclOperationResult' should be on the stack. */ assertVariableNumber(6, debugger); assertVariableExist("outer", debugger); assertVariableExist("inner", 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 let 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 testLetExpressionStepOver01() throws Exception { String oclResource = "resources/expressions/let01.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 let expression 'senseOfLife'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (senseOfLife)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepOver02() throws Exception { String oclResource = "resources/expressions/let02.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 let expression 'col'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (col)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepOver03_01() throws Exception { String oclResource = "resources/expressions/let03.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 let expression 'outer'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (outer)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepOver03_02() throws Exception { String oclResource = "resources/expressions/let03.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 let expression 'outer'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (outer)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at let expression 'inner'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (inner)", debugger); /* 'outer' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("outer", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_OVER, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepReturn01() throws Exception { String oclResource = "resources/expressions/let01.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 let expression 'senseOfLife'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (senseOfLife)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepReturn02() throws Exception { String oclResource = "resources/expressions/let02.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 let expression 'col'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (col)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepReturn03_01() throws Exception { String oclResource = "resources/expressions/let03.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 let expression 'outer'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (outer)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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 testLetExpressionStepReturn03_02() throws Exception { String oclResource = "resources/expressions/let03.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 let expression 'outer'. */ assertCurrentLine(5, debugger); assertStackSize(2, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (outer)", debugger); assertVariableNumber(1, debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_INTO, DebugEvent.SUSPENDED, debugger); /* Debugger at let expression 'inner'. */ assertCurrentLine(5, debugger); assertStackSize(3, debugger); assertStackName(CallStackConstants.LET_EXPRESSION + " (inner)", debugger); /* 'outer' should be on the stack. */ assertVariableNumber(2, debugger); assertVariableExist("outer", debugger); assertVariableExist(OclDebugger.SELF_VARIABLE_NAME, debugger); debugStepAndWaitFor(DebugStep.STEP_RETURN, DebugEvent.SUSPENDED, debugger); /* Debugger after let 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); } }