/*******************************************************************************
* Copyright (c) 2008, 2009 Wind River Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.tests.dsf.pda.service.command;
import java.io.File;
import org.eclipse.cdt.examples.dsf.pda.PDAPlugin;
import org.eclipse.core.runtime.Path;
import org.junit.BeforeClass;
import org.junit.Test;
/**
*
*/
public class Test2 extends CommandControlTestsBase {
@BeforeClass
public static void setProgram() {
File programFile = PDAPlugin.getFileInPlugin(new Path("pdavm/tests/vmtest2.pda"));
fProgram = programFile.getPath();
}
@Test
public void testCommonDebugCommands() throws Throwable {
expectEvent("started 1");
// test step
sendCommand("step 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 step");
// test breakpoint
sendCommand("set 4 1");
sendCommand("data 1", "6|");
sendCommand("vmresume");
expectEvent("vmresumed client");
expectEvent("vmsuspended 1 breakpoint 4");
// test data stack
sendCommand("data 1", "6|7|8|9|");
sendCommand("popdata 1");
sendCommand("data 1", "6|7|8|");
sendCommand("pushdata 1 11");
sendCommand("data 1", "6|7|8|11|");
sendCommand("setdata 1 1 2");
sendCommand("data 1", "6|2|8|11|");
// test call stack
sendCommand("set 12 1");
sendCommand("set 19 1");
sendCommand("stepreturn 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 breakpoint 12");
sendCommand("clear 19");
sendCommand("stack 1", fProgram + "|6|main#" + fProgram + "|18|sub1|m|n#" + fProgram + "|12|sub2" );
sendCommand("stackdepth 1", "3");
sendCommand("frame 1 0", fProgram + "|6|main");
sendCommand("frame 1 1", fProgram + "|18|sub1|m|n");
sendCommand("frame 1 2", fProgram + "|12|sub2" );
sendCommand("stepreturn 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 step");
sendCommand("stack 1", fProgram + "|6|main#" + fProgram + "|18|sub1|m|n#" + fProgram + "|13|sub2" );
sendCommand("stepreturn 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 step");
sendCommand("stack 1", fProgram + "|6|main#" + fProgram + "|22|sub1|m|n" );
sendCommand("set 6 1");
sendCommand("stepreturn 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 breakpoint 6");
// test set and clear
sendCommand("set 27 1");
sendCommand("set 29 1");
sendCommand("set 33 1");
sendCommand("vmresume");
expectEvent("vmresumed client");
expectEvent("vmsuspended 1 breakpoint 33");
sendCommand("vmresume");
expectEvent("vmresumed client");
expectEvent("vmsuspended 1 breakpoint 27");
sendCommand("clear 33");
sendCommand("vmresume");
expectEvent("vmresumed client");
expectEvent("vmsuspended 1 breakpoint 29");
// test var and setvar
sendCommand("set 47 1");
sendCommand("vmresume");
expectEvent("vmresumed client");
expectEvent("vmsuspended 1 breakpoint 47");
sendCommand("var 1 1 b", "4");
sendCommand("var 1 2 b", "2");
sendCommand("var 1 1 a", "0");
sendCommand("setvar 1 1 a 99");
sendCommand("data 1", "6|2|8|11|27|1|4|");
sendCommand("step 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 step");
sendCommand("var 1 1 a", "99");
sendCommand("step 1");
expectEvent("vmresumed step");
expectEvent("vmsuspended 1 step");
sendCommand("data 1", "6|2|8|11|27|1|4|99|");
sendCommand("var 1 1 x", "error: variable undefined");
sendCommand("setvar 1 1 x 100");
sendCommand("var 1 1 x", "100");
// test exit
sendCommand("exit");
expectEvent("terminated");
}
@Test
public void testCommonDebugCommandsWithThreadRC() throws Throwable {
expectEvent("started 1");
// test breakpoint
sendCommand("set 3 0");
sendCommand("vmresume");
expectEvent("vmresumed client");
expectEvent("suspended 1 breakpoint 3");
sendCommand("data 1", "6|7|8|");
// test step
sendCommand("step 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 step");
// test data stack
sendCommand("data 1", "6|7|8|9|");
sendCommand("popdata 1");
sendCommand("data 1", "6|7|8|");
sendCommand("pushdata 1 11");
sendCommand("data 1", "6|7|8|11|");
sendCommand("setdata 1 1 2");
sendCommand("data 1", "6|2|8|11|");
// test call stack
sendCommand("set 12 0");
sendCommand("set 19 0");
sendCommand("stepreturn 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 breakpoint 12");
sendCommand("clear 19");
sendCommand("stack 1", fProgram + "|6|main#" + fProgram + "|18|sub1|m|n#" + fProgram + "|12|sub2" );
sendCommand("stackdepth 1", "3");
sendCommand("frame 1 0", fProgram + "|6|main");
sendCommand("frame 1 1", fProgram + "|18|sub1|m|n");
sendCommand("frame 1 2", fProgram + "|12|sub2" );
sendCommand("stepreturn 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 step");
sendCommand("stack 1", fProgram + "|6|main#" + fProgram + "|18|sub1|m|n#" + fProgram + "|13|sub2" );
sendCommand("stepreturn 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 step");
sendCommand("stack 1", fProgram + "|6|main#" + fProgram + "|22|sub1|m|n" );
sendCommand("set 6 0");
sendCommand("stepreturn 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 breakpoint 6");
// test set and clear
sendCommand("set 27 0");
sendCommand("set 29 0");
sendCommand("set 33 0");
sendCommand("resume 1");
expectEvent("resumed 1 client");
expectEvent("suspended 1 breakpoint 33");
sendCommand("resume 1");
expectEvent("resumed 1 client");
expectEvent("suspended 1 breakpoint 27");
sendCommand("clear 33");
sendCommand("resume 1");
expectEvent("resumed 1 client");
expectEvent("suspended 1 breakpoint 29");
// test var and setvar
sendCommand("set 47 0");
sendCommand("resume 1");
expectEvent("resumed 1 client");
expectEvent("suspended 1 breakpoint 47");
sendCommand("var 1 1 b", "4");
sendCommand("var 1 2 b", "2");
sendCommand("var 1 1 a", "0");
sendCommand("setvar 1 1 a 99");
sendCommand("data 1", "6|2|8|11|27|1|4|");
sendCommand("step 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 step");
sendCommand("var 1 1 a", "99");
sendCommand("step 1");
expectEvent("resumed 1 step");
expectEvent("suspended 1 step");
sendCommand("data 1", "6|2|8|11|27|1|4|99|");
// test exit
sendCommand("exit");
expectEvent("terminated");
}
}