/******************************************************************************* * Copyright (c) 2000, 2010 QNX Software 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: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.core.tests; import java.io.IOException; import junit.framework.Test; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDILineLocation; import org.eclipse.cdt.debug.core.cdi.ICDILocator; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.core.runtime.CoreException; /** * Create a project with space and do sanity test for debugger */ public class ProjectWithSpaceTests extends AbstractDebugTest { public static Test suite() { return new DebugTestWrapper(ProjectWithSpaceTests.class) { }; } @Override protected String getProjectName() { return "with space"; } @Override protected void setUp() throws Exception { super.setUp(); createDebugSession(); assertNotNull(currentTarget); currentTarget.deleteAllBreakpoints(); pause(); } @Override protected void tearDown() throws Exception { /* clean up the session */ targets[0].terminate(); int x = 0; while ((!targets[0].isTerminated()) && (x < 30)) { Thread.sleep(100); } if (!targets[0].isTerminated()) targets[0].terminate(); super.tearDown(); } /** * Basic sanity test */ public void testLineBreak() throws CoreException, MIException, IOException, CDIException, InterruptedException { ICDITarget cdiTarget = currentTarget; ICDILineLocation location; boolean caught = false; /*********************************************************************** * Create a break point in a generic function **********************************************************************/ location = cdiTarget.createLineLocation("main.c", 7); assertNotNull(location); cdiTarget.setLineBreakpoint(0, location, null, false); targets = session.getTargets(); /* * We better only have one target connected to this session or something * is not right... */ assertTrue(targets.length == 1); /* * Resume the target, this should cause it to run till it hits the * breakpoint */ ICDITarget target = targets[0]; target.resume(false); /** * Give the process up to 10 seconds to become either terminated or * suspended. It sould hit the breakponint almost immediatly so we * should only sleep for max 100 ms */ for (int x = 0; x < 100; x++) { if (target.isSuspended() || target.isTerminated()) break; Thread.sleep(100); } assertTrue("Suspended: " + target.isSuspended() + " Terminated: " + target.isTerminated(), target.isSuspended()); ICDILocator locator = getCurrentLocator(); assertTrue(locator.getLineNumber() == 7); assertTrue(locator.getFunction().equals("func1")); assertTrue(locator.getFile().endsWith("main.c")); } }