blob: abe2db5f7a52d4f584addb7c8370e7a0301471ab [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 junit.framework.Assert;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
import org.eclipse.cdt.debug.edc.internal.services.dsf.Processes;
import org.eclipse.cdt.debug.edc.services.EDCServicesTracker;
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.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMData;
public class ProcessesServiceTest {
// private static final String dbg_derived_types_cpp
// = "C:\\myprog\\BlackFlagWascana\\src\\dbg_derived_types.cpp"; //$NON-NLS-1$
private static Processes processesService;
private static BaseLaunchTest simpleLaunch;
@BeforeClass
public static void setUpClass() throws Exception {
simpleLaunch = new BaseLaunchTest() {
@Override
protected boolean getStopAtMain() {
return true;
}
};
simpleLaunch.basicLaunch();
EDCServicesTracker edcTracker
= new EDCServicesTracker(
EDCDebugger.getBundleContext(), simpleLaunch.session.getId());
Assert.assertNotNull(edcTracker);
processesService = edcTracker.getService(Processes.class);
Assert.assertNotNull(processesService);
}
@AfterClass
public static void shutdown() {
TestUtils.shutdownDebugSession(simpleLaunch.launch, simpleLaunch.session);
processesService = null;
simpleLaunch = null;
}
@Test
public void coverageAttachDebuggerToProcess() throws Exception {
Query<IDMContext> query = new Query<IDMContext>() {
@Override
protected void execute(final DataRequestMonitor<IDMContext> drm) {
processesService.attachDebuggerToProcess(null, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
@Test
public void coverageDebugNewProcess() throws Exception {
Query<IDMContext> query = new Query<IDMContext>() {
@Override
protected void execute(final DataRequestMonitor<IDMContext> drm) {
processesService.debugNewProcess(
simpleLaunch.threadDMC, simpleLaunch.getExeFileName(), null, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
@Test
public void coverageEventReceived() {
// nothing expected, nothing set, nothing returned, no side-effects
processesService.eventDispatched(null);
}
@Test
public void coverageGetDebuggingContext() throws Exception {
Query<IDMContext> query = new Query<IDMContext>() {
@Override
protected void execute(final DataRequestMonitor<IDMContext> drm) {
IProcesses.IThreadDMContext processThreadDMC
= DMContexts.getAncestorOfType(
simpleLaunch.threadDMC, IProcesses.IThreadDMContext.class);
processesService.getDebuggingContext(processThreadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
@Test
public void coverageGetModelData() throws Exception {
Query<IDMContext> query = new Query<IDMContext>() {
@Override
protected void execute(final DataRequestMonitor<IDMContext> drm) {
processesService.getModelData(simpleLaunch.threadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
@Test
public void coverageGetRunningProcesses() throws Exception {
Query<IProcessDMContext[]> query = new Query<IProcessDMContext[]>() {
@Override
protected void execute(final DataRequestMonitor<IProcessDMContext[]> drm) {
processesService.getRunningProcesses(simpleLaunch.threadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
@Test
public void coverageIsDebugNewProcessSupported() throws Exception {
Query<Boolean> query = new Query<Boolean>() {
@Override
protected void execute(final DataRequestMonitor<Boolean> drm) {
processesService.isDebugNewProcessSupported(simpleLaunch.threadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
Boolean bData = query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertNotNull(bData);
Assert.assertFalse(bData);
}
@Test
public void coverageIsDebuggerAttachSupported() throws Exception {
Query<Boolean> query = new Query<Boolean>() {
@Override
protected void execute(final DataRequestMonitor<Boolean> drm) {
processesService.isDebuggerAttachSupported(simpleLaunch.threadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
Boolean bData = query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertNotNull(bData);
Assert.assertFalse(bData);
}
@Test
public void coverageIsRunNewProcessSupported() throws Exception {
Query<Boolean> query = new Query<Boolean>() {
@Override
protected void execute(final DataRequestMonitor<Boolean> drm) {
processesService.isRunNewProcessSupported(simpleLaunch.threadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
Boolean bData = query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertNotNull(bData);
Assert.assertFalse(bData);
}
@Test
public void coverageRunNewProcess() throws Exception {
Query<IProcessDMContext> query = new Query<IProcessDMContext>() {
@Override
protected void execute(final DataRequestMonitor<IProcessDMContext> drm) {
processesService.runNewProcess(
simpleLaunch.threadDMC, simpleLaunch.getExeFileName(), null, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
}
@Test
public void testExecutionDataIsDebuggerAttached() throws Exception {
Query<IThreadDMData> query = new Query<IThreadDMData>() {
@Override
protected void execute(final DataRequestMonitor<IThreadDMData> drm) {
IProcesses.IThreadDMContext processThreadDMC
= DMContexts.getAncestorOfType(
simpleLaunch.threadDMC, IProcesses.IThreadDMContext.class);
processesService.getExecutionData(processThreadDMC, drm);
}
};
simpleLaunch.session.getExecutor().execute(query);
IThreadDMData threadData = query.get(1, TimeUnit.SECONDS);
Assert.assertTrue(query.isDone());
Assert.assertTrue(threadData.isDebuggerAttached());
}
}