/*******************************************************************************
 * 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 junit.framework.Assert;

import org.eclipse.cdt.debug.edc.services.IEDCExecutionDMC;
import org.eclipse.cdt.debug.edc.tests.TestUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestTraceView extends BaseLaunchTest {

	@Override
	protected boolean getStopAtMain() {
		return true;
	}

	@Before
	public void setup() throws Exception {
		TestUtils.showDebugPerspective();
	}

	@After
	public void shutdown() {
		TestUtils.shutdownDebugSession(launch, session);
		session = null;
	}

	@Test
	public void testTraceView() throws Exception {
		TestUtils.showView("org.eclipse.cdt.debug.edc.TraceView");

		launch = createLaunch();
		assertNotNull(launch);
		session = waitForSession(launch);
		assertNotNull(session);
		IEDCExecutionDMC executionDMC = TestUtils.waitForExecutionDMC(session);
		assertNotNull(executionDMC);
		threadDMC = TestUtils.waitForSuspendedThread(session);
		Assert.assertNotNull(threadDMC);
		frame = TestUtils.waitForStackFrame(session, threadDMC);
	}
}
