/*******************************************************************************
 *  Copyright (c) 2014 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.debug.tests.console;

import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.ui.commands.actions.TerminateAllActionDelegate;
import org.eclipse.jdt.debug.core.IJavaThread;
import org.eclipse.jdt.debug.tests.AbstractDebugTest;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.internal.console.ConsoleView;

/**
 * Test the Terminate All action in Console view
 *
 */
public class ConsoleTerminateAllActionTests extends AbstractDebugTest {

	public ConsoleTerminateAllActionTests(String name) {
		super(name);
	}

	public void testTerminateAll_01() throws Exception{
		createLineBreakpoint(15, "TerminateAll_01");
		createLineBreakpoint(15, "TerminateAll_02");
		IJavaThread thread1 = null;
		IJavaThread thread2 = null; {

        try{
				thread1 = launchToBreakpoint("TerminateAll_01");
				assertNotNull(thread1);
				thread2 = launchToBreakpoint("TerminateAll_02");
				assertNotNull(thread2);
				ConsoleView view = null;
				IWorkbenchWindow[] workbenchWindows = PlatformUI.getWorkbench().getWorkbenchWindows();
				for (int i = 0; i < workbenchWindows.length; i++) {
					IWorkbenchWindow window = workbenchWindows[i];
					if (window != null) {
						IWorkbenchPage page = window.getActivePage();
						if (page != null) {
							IViewPart part = page.findView(IConsoleConstants.ID_CONSOLE_VIEW);
							if (part != null && part instanceof IConsoleView) {
								view = (ConsoleView) part;
								break;
							}
						}
					}
				}
				assertNotNull(view);
				TerminateAllActionDelegate d = new TerminateAllActionDelegate();
				d.init(view);
				d.run(null);
				Thread.sleep(1000);
				assertEquals(2, DebugPlugin.getDefault().getLaunchManager().getLaunches().length);
				assertEquals(true, DebugPlugin.getDefault().getLaunchManager().getLaunches()[0].isTerminated());
				assertEquals(true, DebugPlugin.getDefault().getLaunchManager().getLaunches()[1].isTerminated());

			}
			finally {
				terminateAndRemove(thread1);
				terminateAndRemove(thread2);
				removeAllBreakpoints();
			}
		}
			
	}
}
