/*******************************************************************************
* Copyright (c) 2006, 2016 Mountainminds GmbH & Co. KG and Contributors
* 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:
* Marc R. Hoffmann - initial API and implementation
*
******************************************************************************/
package com.mountainminds.eclemma.core.launching;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.mountainminds.eclemma.core.JavaProjectKit;
/**
* Tests for {@link JavaApplicationLauncher}.
*/
public class JavaApplicationLauncherTest {
private JavaProjectKit javaProject1;
private JavaProjectKit javaProject2;
private ICoverageLauncher launcher;
@Before
public void setup() throws Exception {
javaProject1 = new JavaProjectKit("project1");
javaProject2 = new JavaProjectKit("project2");
launcher = new JavaApplicationLauncher();
}
@After
public void teardown() throws Exception {
javaProject1.destroy();
javaProject2.destroy();
}
@Test
public void testNoProject() throws Exception {
JavaProjectKit.waitForBuild();
ILaunchConfigurationWorkingCopy configuration = getJavaApplicationType()
.newInstance(javaProject1.project, "test.launch");
final Collection<IPackageFragmentRoot> scope = launcher
.getOverallScope(configuration);
assertEquals(set(), set(scope));
}
@Test
public void testProjectWithSourceFolders() throws Exception {
IPackageFragmentRoot rootSrc1 = javaProject1.createSourceFolder("src");
IPackageFragmentRoot rootSrc2 = javaProject1.createSourceFolder("test");
JavaProjectKit.waitForBuild();
ILaunchConfigurationWorkingCopy configuration = getJavaApplicationType()
.newInstance(javaProject1.project, "test.launch");
configuration.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "project1");
final Collection<IPackageFragmentRoot> scope = launcher
.getOverallScope(configuration);
assertEquals(set(rootSrc1, rootSrc2), set(scope));
}
@Test
public void testProjectWithRootSourceFolder() throws Exception {
IPackageFragmentRoot rootSrc1 = javaProject1.createSourceFolder();
JavaProjectKit.waitForBuild();
ILaunchConfigurationWorkingCopy configuration = getJavaApplicationType()
.newInstance(javaProject1.project, "test.launch");
configuration.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "project1");
final Collection<IPackageFragmentRoot> scope = launcher
.getOverallScope(configuration);
assertEquals(set(rootSrc1), set(scope));
}
@Test
public void testProjectWithLibrary() throws Exception {
IPackageFragmentRoot rootBin1 = javaProject1.createJAR(
"testdata/bin/signatureresolver.jar", "/sample.jar", new Path(
"/UnitTestProject/sample.jar"), null);
JavaProjectKit.waitForBuild();
ILaunchConfigurationWorkingCopy configuration = getJavaApplicationType()
.newInstance(javaProject1.project, "test.launch");
configuration.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "project1");
final Collection<IPackageFragmentRoot> scope = launcher
.getOverallScope(configuration);
assertEquals(set(rootBin1), set(scope));
}
@Test
public void testProjectWithProjectReference() throws Exception {
IPackageFragmentRoot rootSrc1 = javaProject1.createSourceFolder("src");
IPackageFragmentRoot rootSrc2 = javaProject2.createSourceFolder("src");
javaProject1.addProjectReference(javaProject2);
JavaProjectKit.waitForBuild();
ILaunchConfigurationWorkingCopy configuration = getJavaApplicationType()
.newInstance(javaProject1.project, "test.launch");
configuration.setAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "project1");
final Collection<IPackageFragmentRoot> scope = launcher
.getOverallScope(configuration);
assertEquals(set(rootSrc1, rootSrc2), set(scope));
}
private ILaunchConfigurationType getJavaApplicationType() {
return DebugPlugin
.getDefault()
.getLaunchManager()
.getLaunchConfigurationType(
"org.eclipse.jdt.launching.localJavaApplication");
}
private <E> Set<E> set(E... elements) {
return new HashSet<E>(Arrays.asList(elements));
}
private <E> Set<E> set(Collection<E> elements) {
Set<E> set = new HashSet<E>();
for (E e : elements) {
assertTrue("Duplicate element " + e, set.add(e));
}
return set;
}
}