blob: 09787a15c83e0811aab5803c18d855369546225b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 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 java.util.concurrent.TimeUnit;
import org.eclipse.cdt.debug.edc.internal.services.dsf.Expressions;
import org.eclipse.cdt.debug.edc.services.IEDCExpression;
import org.eclipse.cdt.debug.edc.tests.TestUtils;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Query;
import org.eclipse.cdt.dsf.debug.service.IExpressions;
import org.junit.Assert;
import org.junit.Test;
public class ExpressionsServiceInternalsTest extends SimpleDebuggerTest {
@Test
public void testBaseEDCExpressionDMCsetEvaluatedValue() throws Exception {
openSnapshotAndWaitForSuspendedContext(0);
IEDCExpression expr = TestUtils.getExpressionDMC(session, frame, "lstruct.achar");
Assert.assertNotNull(expr);
expr.setEvaluatedValue(0);
expr.setEvaluatedValueString("2");
}
@Test
public void testExpressionDMAddressGetLocation() throws Exception {
openSnapshotAndWaitForSuspendedContext(0);
final Expressions expressionsService = TestUtils.getService(session, Expressions.class);
final IExpressions.IExpressionDMContext exprDMC = expressionsService.createExpression(frame, "lstruct");
Query<IExpressions.IExpressionDMAddress> query = new Query<IExpressions.IExpressionDMAddress>() {
@Override
protected void execute(final DataRequestMonitor<IExpressions.IExpressionDMAddress> drm) {
expressionsService.getExpressionAddressData(exprDMC, drm);
}
};
session.getExecutor().execute(query);
IExpressions.IExpressionDMAddress exprDMAddr = query.get(2, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertTrue(exprDMAddr instanceof Expressions.ExpressionDMAddress);
Assert.assertEquals("0x22feb0", ((Expressions.ExpressionDMAddress)exprDMAddr).getLocation());
}
@Test
public void testExpressionData() throws Exception {
openSnapshotAndWaitForSuspendedContext(0);
final Expressions expressionsService = TestUtils.getService(session, Expressions.class);
final IExpressions.IExpressionDMContext exprDMC = expressionsService.createExpression(frame, "lstruct");
Query<IExpressions.IExpressionDMData> query = new Query<IExpressions.IExpressionDMData>() {
@Override
protected void execute(final DataRequestMonitor<IExpressions.IExpressionDMData> drm) {
expressionsService.getExpressionData(exprDMC, drm);
}
};
session.getExecutor().execute(query);
IExpressions.IExpressionDMData exprDMData = query.get(2, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertTrue(exprDMData instanceof Expressions.ExpressionData);
// TODO Expression$ExpressionData#getEncoding() just returns null
Assert.assertNull(exprDMData.getEncoding());
// TODO Expression$ExpressionData#getEnumerations() just returns null
Assert.assertNull(exprDMData.getEnumerations());
Assert.assertEquals("lstruct", exprDMData.getName());
// TODO Expression$ExpressionData#getRegister() just returns null
Assert.assertNull(exprDMData.getRegister());
Assert.assertEquals(IExpressions.IExpressionDMData.TYPEID_INTEGER, exprDMData.getTypeId());
Assert.assertEquals("struct struct_type", exprDMData.getTypeName());
}
// @Test
// public void testGetSubExpressions() throws Exception {
// openSnapshotAndWaitForSuspendedContext(0);
// final Expressions expressionsService = TestUtils.getService(session, Expressions.class);
// final IExpressions.IExpressionDMContext exprDMC = expressionsService.createExpression(frame, "lstruct");
// IEDCExpression expr = TestUtils.getExpressionDMC(session, frame, "lstruct");
//
// Assert.assertEquals(exprDMC.getExpression(), expr.getExpression());
//
// Query<IExpressions.IExpressionDMContext[]> query = new Query<IExpressions.IExpressionDMContext[]>() {
// @Override
// protected void execute(final DataRequestMonitor<IExpressions.IExpressionDMContext[]> drm) {
/// requires a custom type content provider, meaning a Qt or Symbian type for us with what's available
/// and the uncovered function is protected, so skip this _one_ uncovered method for now
// }
// };
//
// session.getExecutor().execute(query);
// IExpressions.IExpressionDMContext[] baseExpressions = query.get(5, TimeUnit.SECONDS);
// Assert.assertNotNull(baseExpressions);
// }
/// TODO there's some sort of timing problem when calling
/// getExpressionValue() like this so immediately after
/// creating the expression with createExpression(),
/// and most things call getFormattedExpressionValue()
/// directly, with the DRM that goes with it, rather
/// than this getExpressionValue() .
///
/// so ... for coverage, we'll rely on the fact that
/// the coverageLoadExpressionValues() below will
/// eventually invoke this getExpressionValue()
///
// @Test
// public void testGetExpressionValue() throws Exception {
// openSnapshotAndWaitForSuspendedContext(0);
// final Expressions expressionsService = TestUtils.getService(session, Expressions.class);
// final IExpressions.IExpressionDMContext exprDMC = expressionsService.createExpression(frame, "lstruct.achar");
// expressionsService.
//
// Assert.assertEquals("49 ('1')", expressionsService.getExpressionValue(exprDMC));
// }
// /**
// * TODO method {@link Expressions$CastInfoCachedData} currently is not public
// * and has zero references, so is filtered out of emma coverage results
// */
// @Test
// public void coverageCastInfoCachedData() {
// Expressions.CastInfoCachedData cache;
// }
/**
* TODO method {@link Expressions#getModelData} currently almost nothing
* except setData(new IDCExpression[0]);
* @throws Exception
*/
@Test
public void coverageGetBaseExpressions() throws Exception {
openSnapshotAndWaitForSuspendedContext(0);
final Expressions expressionsService = TestUtils.getService(session, Expressions.class);
final IExpressions.IExpressionDMContext exprDMC
= expressionsService.createExpression(frame, "lstruct.achar");
Query<IExpressions.IExpressionDMContext[]> query = new Query<IExpressions.IExpressionDMContext[]>() {
@Override
protected void execute(final DataRequestMonitor<IExpressions.IExpressionDMContext[]> drm) {
expressionsService.getBaseExpressions(exprDMC, drm);
}
};
session.getExecutor().execute(query);
IExpressions.IExpressionDMContext[] baseExpressions = query.get(2, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertNotNull(baseExpressions);
Assert.assertEquals(0, baseExpressions.length);
}
/**
* TODO method {@link Expressions#getModelData} currently does nothing.
* @throws Exception
*/
@Test
public void coverageGetModelData() throws Exception {
openSnapshotAndWaitForSuspendedContext(0);
final Expressions expressionsService = TestUtils.getService(session, Expressions.class);
final IExpressions.IExpressionDMContext exprDMC = expressionsService.createExpression(frame, "lstruct.achar");
Query<Object> query = new Query<Object>() {
@Override
protected void execute(final DataRequestMonitor<Object> drm) {
expressionsService.getModelData(exprDMC, drm);
drm.done();
}
};
session.getExecutor().execute(query);
query.get(2, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
/**
* TODO this is listed as coverage only because the attempts to get the evaluated
* value after load were failing with null evaluated values. this is probably
* because the getExressionValue() inside the nested loadExpressionValues()
* isn't normally used, and especially not right after a createExpression() call
* @throws Exception
*/
@Test
public void coverageLoadExpressionValues() throws Exception {
openSnapshotAndWaitForSuspendedContext(0);
Expressions expressionsService = TestUtils.getService(session, Expressions.class);
IExpressions.IExpressionDMContext exprDMC = expressionsService.createExpression(frame, "lstruct");
Assert.assertNull(((IEDCExpression)exprDMC).getEvaluatedValue());
expressionsService.loadExpressionValues(exprDMC, 3);
// Assert.assertNotNull("lstruct not yet evaluated after loadExpressionValues() depth 3", ((IEDCExpression)exprDMC).getEvaluatedValue());
// Assert.assertEquals(TODO, ((IEDCExpression)exprDMC).getEvaluatedValue().intValue());
// Assert.assertEquals("TODO", ((IEDCExpression)exprDMC).getEvaluatedValueString());
// IExpressions.IExpressionDMContext subExprDMC = expressionsService.createExpression(frame, "lstruct.aulong");
// Assert.assertNotNull("lstruct.aulong not yet evaluated after loadExpressionValues() depth 3", ((IEDCExpression)subExprDMC).getEvaluatedValue());
// Assert.assertEquals(TODO, ((IEDCExpression)subExprDMC).getEvaluatedValue().intValue());
// Assert.assertEquals("TODO", ((IEDCExpression)subExprDMC).getEvaluatedValueString());
// IExpressions.IExpressionDMContext subSubExprDMC = expressionsService.createExpression(frame, "lstruct.structb.aslong");
// Assert.assertNotNull("lstruct not yet evaluated after loadExpressionValues() depth 3", ((IEDCExpression)subSubExprDMC).getEvaluatedValue());
// Assert.assertEquals(TODO, ((IEDCExpression)subSubExprDMC).getEvaluatedValue().intValue());
// Assert.assertEquals("TODO", ((IEDCExpression)subSubExprDMC).getEvaluatedValueString());
}
@Override
public String getAlbumName() {
return "ExpressionsAggregatesAndEnums.dsa";
}
}