/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.cdt.core.testplugin;

import java.net.URL;

/**
 * Helper class to launch a test
 */
public class TestPluginLauncher {
	public static final String APP_NAME = "org.eclipse.jdt.ui.tests.app";

	public static void run(String location, Class<?> testCase, String[] args) {
		run(APP_NAME, location, testCase, args);
	}

	public static void run(String application, String location, Class<?> testCase, String[] args) {
		try {
			String bootLocation = getBootLocation();
			int nArgs = args.length;
			String[] newArgs = new String[4 + nArgs];
			newArgs[0] = testCase.getName();
			for (int i = 0; i < nArgs; i++) {
				newArgs[1 + i] = args[i];
			}
			newArgs[1 + nArgs] = "-dev";
			newArgs[1 + nArgs + 1] = "bin";
			newArgs[1 + nArgs + 2] = "-debug";
			NewMain newMain = new NewMain(application, location, null, bootLocation, false);
			newMain.run(newArgs);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static String getLocationFromProperties(String key) {
		return NewMain.getLocationFromProperties(key);
	}

	public static String getLocationFromProperties() {
		return NewMain.getLocationFromProperties("tests");
	}

	public static String getBootLocation() {
		URL url = TestPluginLauncher.class.getResource("TestPluginLauncher.class");
		String s = url.toString();
		int index = s.indexOf("/org.eclipse.jdt.ui.tests");
		if (index == -1)
			throw new IllegalArgumentException();
		s = s.substring(0, index);
		s = s + "/org.eclipse.core.boot/boot.jar";
		return s;
	}
}