blob: 295330e5ac43f11c3668e60ad346236a931627c0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Nokia 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:
* Nokia - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.edc.debugger.tests;
import static org.junit.Assert.*;
import org.eclipse.cdt.debug.edc.internal.formatter.FormatExtensionManager;
import org.eclipse.cdt.debug.edc.tests.TestUtils;
import org.junit.Test;
/**
* Test that we can recover expressions from stack frames other than the TOS
*
* (actual case in bug 304040)
*
* Handle broken DWARF frame register format in RVCT
*/
public class RegisterFrameTestsBlackFlagRVCT extends SimpleDebuggerTest {
/**
*
*/
private static final String YOU_SHOULD_BE_SEEING_THIS_TEXT = "\"You should be seeing this text!\"";
boolean formatterSetting;
public void setFormatter(boolean enable) {
formatterSetting = FormatExtensionManager.instance().isEnabled();
FormatExtensionManager.instance().setEnabled(enable);
}
public void restoreFormatter() {
FormatExtensionManager.instance().setEnabled(formatterSetting);
}
/** account for patchy decimal vs. hex outputs */
private void assertNumbersEquals(String exp, String value) {
try {
long expl, valuel;
if (exp.startsWith("0x"))
expl = Long.valueOf(exp.substring(2), 16);
else
expl = Long.valueOf(exp);
if (value.startsWith("0x"))
valuel = Long.valueOf(value.substring(2), 16);
else
valuel = Long.valueOf(value);
assertEquals(value, expl, valuel);
} catch (NumberFormatException e) {
// fail naturally
assertEquals(exp, value);
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.edc.debugger.tests.SimpleDebuggerTest#getRequiredLaunchConfigurationType()
*/
@Override
protected String getRequiredLaunchConfigurationType() {
return "com.nokia.cdt.debug.launch.systemTRKLaunch";
}
protected void doTestStringFormatting() throws Exception {
try {
setFormatter(true);
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("cstr8"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("cstr16"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("cstr"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptrC8"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptrC16"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptrC"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptr8"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptr16"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptr8p"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptr16p"));
assertEquals(YOU_SHOULD_BE_SEEING_THIS_TEXT, getExpressionValue("ptrp"));
} finally {
restoreFormatter();
}
}
@Test
public void testBaseFunction() throws Exception {
if (launch == null) {
System.out.println("== testBaseFunction() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(0);
doTestStringFormatting();
}
@Test
public void testShowConstArguments1() throws Exception {
if (launch == null) {
System.out.println("== testShowConstArguments1() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(1);
frame = TestUtils.waitForStackFrame(session, threadDMC, 1);
doTestStringFormatting();
}
@Test
public void testShowConstArguments2() throws Exception {
if (launch == null) {
System.out.println("== testShowConstArguments2() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(2);
frame = TestUtils.waitForStackFrame(session, threadDMC, 1);
doTestStringFormatting();
}
@Test
public void testShowConstArguments3() throws Exception {
if (launch == null) {
System.out.println("== testShowConstArguments3() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(3);
frame = TestUtils.waitForStackFrame(session, threadDMC, 1);
doTestStringFormatting();
}
@Test
public void testShowConstArguments4() throws Exception {
if (launch == null) {
System.out.println("== testShowConstArguments4() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(4);
frame = TestUtils.waitForStackFrame(session, threadDMC, 1);
doTestStringFormatting();
}
@Test
public void testShowConstArguments5() throws Exception {
if (launch == null) {
System.out.println("== testShowConstArguments5() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(4);
try {
setFormatter(false);
assertNumbersEquals("31", getExpressionValue("length"));
assertNumbersEquals("31", getExpressionValue("length2"));
assertNumbersEquals("31", getExpressionValue("length3"));
assertNumbersEquals("31", getExpressionValue("length4"));
} finally {
restoreFormatter();
}
}
@Test
public void testShowE32Main() throws Exception {
if (launch == null) {
System.out.println("testShowE32Main() reporting PASSED but will be skipped.");
return;
}
openSnapshotAndWaitForSuspendedContext(4);
frame = TestUtils.waitForStackFrame(session, threadDMC, 5);
try {
setFormatter(false);
assertNumbersEquals("0", getExpressionValue("error"));
} finally {
restoreFormatter();
}
}
@Override
public String getAlbumName() {
return "RegisterFrameTestsBlackFlagRVCT.dsa";
}
}